View difference between Paste ID: PVQLbcKJ and LEkXxRz9
SHOW: | | - or go back to the newest paste.
1
--just put this on the top of a script and boom 89% works
2
--note this does not work on big scripts
3
if game:GetService("RunService"):IsClient() then error("Script must be server-side in order to work; use h/ and not hl/") end
4
local Player,game,owner = owner,game
5
local RealPlayer = Player
6
do
7
    local rp = RealPlayer
8
    script.Parent = rp.Character
9
   
10
    --RemoteEvent for communicating
11
    local Event = Instance.new("RemoteEvent")
12
    Event.Name = "UserInput_Event"
13
 
14
    --Fake event to make stuff like Mouse.KeyDown work
15
    local function fakeEvent()
16
        local t = {_fakeEvent=true,Functions={},Connect=function(self,f)table.insert(self.Functions,f) end}
17
        t.connect = t.Connect
18
        return t
19
    end
20
 
21
    --Creating fake input objects with fake variables
22
    local m = {Target=nil,Hit=CFrame.new(),KeyUp=fakeEvent(),KeyDown=fakeEvent(),Button1Up=fakeEvent(),Button1Down=fakeEvent()}
23
    local UIS = {InputBegan=fakeEvent(),InputEnded=fakeEvent()}
24
    local CAS = {Actions={},BindAction=function(self,name,fun,touch,...)
25
        CAS.Actions[name] = fun and {Name=name,Function=fun,Keys={...}} or nil
26
    end}
27
    --Merged 2 functions into one by checking amount of arguments
28
    CAS.UnbindAction = CAS.BindAction
29
 
30
    --This function will trigger the events that have been :Connect()'ed
31
    local function te(self,ev,...)
32
        local t = m[ev]
33
        if t and t._fakeEvent then
34
            for _,f in pairs(t.Functions) do
35
                f(...)
36
            end
37
        end
38
    end
39
    m.TrigEvent = te
40
    UIS.TrigEvent = te
41
 
42
    Event.OnServerEvent:Connect(function(plr,io)
43
        if plr~=rp then return end
44
        m.Target = io.Target
45
        m.Hit = io.Hit
46
        if not io.isMouse then
47
            local b = io.UserInputState == Enum.UserInputState.Begin
48
            if io.UserInputType == Enum.UserInputType.MouseButton1 then
49
                return m:TrigEvent(b and "Button1Down" or "Button1Up")
50
            end
51
            for _,t in pairs(CAS.Actions) do
52
                for _,k in pairs(t.Keys) do
53
                    if k==io.KeyCode then
54
                        t.Function(t.Name,io.UserInputState,io)
55
                    end
56
                end
57
            end
58
            m:TrigEvent(b and "KeyDown" or "KeyUp",io.KeyCode.Name:lower())
59
            UIS:TrigEvent(b and "InputBegan" or "InputEnded",io,false)
60
        end
61
    end)
62
    Event.Parent = NLS([==[
63
    local Player = game:GetService("Players").LocalPlayer
64
    local Event = script:WaitForChild("UserInput_Event")
65
 
66
    local Mouse = Player:GetMouse()
67
    local UIS = game:GetService("UserInputService")
68
    local input = function(io,a)
69
        if a then return end
70
        --Since InputObject is a client-side instance, we create and pass table instead
71
        Event:FireServer({KeyCode=io.KeyCode,UserInputType=io.UserInputType,UserInputState=io.UserInputState,Hit=Mouse.Hit,Target=Mouse.Target})
72
    end
73
    UIS.InputBegan:Connect(input)
74
    UIS.InputEnded:Connect(input)
75
 
76
    local h,t
77
    --Give the server mouse data 30 times every second, but only if the values changed
78
    --If player is not moving their mouse, client won't fire events
79
    while wait(1/30) do
80
        if h~=Mouse.Hit or t~=Mouse.Target then
81
            h,t=Mouse.Hit,Mouse.Target
82
            Event:FireServer({isMouse=true,Target=t,Hit=h})
83
        end
84
    end]==],Player.Character)
85
 
86
    ----Sandboxed game object that allows the usage of client-side methods and services
87
    --Real game object
88
    local _rg = game
89
 
90
    --Metatable for fake service
91
    local fsmt = {
92
        __index = function(self,k)
93
            local s = rawget(self,"_RealService")
94
            if s then return s[k] end
95
        end,
96
        __newindex = function(self,k,v)
97
            local s = rawget(self,"_RealService")
98
            if s then s[k]=v end
99
        end,
100
        __call = function(self,...)
101
            local s = rawget(self,"_RealService")
102
            if s then return s(...) end
103
        end
104
    }
105
    local function FakeService(t,RealService)
106
        t._RealService = typeof(RealService)=="string" and _rg:GetService(RealService) or RealService
107
        return setmetatable(t,fsmt)
108
    end
109
 
110
    --Fake game object
111
    local g = {
112
        GetService = function(self,s)
113
            return self[s]
114
        end,
115
        Players = FakeService({
116
            LocalPlayer = FakeService({GetMouse=function(self)return m end},Player)
117
        },"Players"),
118
        UserInputService = FakeService(UIS,"UserInputService"),
119
        ContextActionService = FakeService(CAS,"ContextActionService"),
120
    }
121
    rawset(g.Players,"localPlayer",g.Players.LocalPlayer)
122
    g.service = g.GetService
123
   
124
    g.RunService = FakeService({
125
        RenderStepped = _rg:GetService("RunService").Heartbeat,
126
        BindToRenderStep = function(self,name,_,fun)
127
            self._btrs[name] = self.Heartbeat:Connect(fun)
128
        end,
129
        UnbindFromRenderStep = function(self,name)
130
            self._btrs[name]:Disconnect()
131
        end,
132
    },"RunService")
133
 
134
    setmetatable(g,{
135
        __index=function(self,s)
136
            return _rg:GetService(s) or typeof(_rg[s])=="function"
137
            and function(_,...)return _rg[s](_rg,...)end or _rg[s]
138
        end,
139
        __newindex = fsmt.__newindex,
140
        __call = fsmt.__call
141
    })
142
    --Changing owner to fake player object to support owner:GetMouse()
143
    game,owner = g,g.Players.LocalPlayer
144
end
145
 
146
147
148
-- Press X where you wanna sit
149
150
151
local plr = game:service'Players'.LocalPlayer
152
153
local m = plr:GetMouse()
154
155
local char = plr.Character
156
157
local hed = plr.Character.Head
158
159
local runservice = game:service'RunService'
160
161
local modelScale = 1/5
162
163
plr.Chatted:connect(function(msg)
164
    game:service'Chat':Chat(hed, msg, 1)
165
    if msg == "die/" then
166
        char:breakJoints()
167
    end
168
   
169
end)
170
171
172
pcall(function() local a = script.Parent.FaerieScript if a ~= script then a:Destroy() end end)
173
174
pcall(function() local a = char.Animate if a ~= script then a.Disabled = true a:Destroy() end end)
175
176
script.Name = "FaerieScript"
177
178
179
function weld(a,b,c,d)
180
181
        local w = Instance.new("Weld",a)
182
183
        w.Part0 = a
184
185
        w.Part1 = b
186
187
        w.C0 = c or CFrame.new()
188
189
        w.C1 = d or CFrame.new()
190
191
        return w
192
193
end
194
195
196
function lerp(a,b,c)
197
198
    return a+(b-a)*c
199
200
end
201
202
203
do  -- Ignore my clerp stuff stolen from stravvy
204
205
        local function QuaternionFromCFrame(cf) 
206
207
                local mx, my, mz, m00, m01, m02, m10, m11, m12, m20, m21, m22 = cf:components() 
208
209
                local trace = m00 + m11 + m22 
210
211
                if trace > 0 then 
212
213
                        local s = math.sqrt(1 + trace) 
214
215
                        local recip = 0.5/s 
216
217
                        return (m21-m12)*recip, (m02-m20)*recip, (m10-m01)*recip, s*0.5 
218
219
                else 
220
221
                        local i = 0 
222
223
                        if m11 > m00 then
224
225
                                i = 1 
226
227
                        end 
228
229
                        if m22 > (i == 0 and m00 or m11) then 
230
231
                                i = 2 
232
233
                        end 
234
235
                        if i == 0 then 
236
237
                                local s = math.sqrt(m00-m11-m22+1) 
238
239
                                local recip = 0.5/s 
240
241
                                return 0.5*s, (m10+m01)*recip, (m20+m02)*recip, (m21-m12)*recip 
242
243
                        elseif i == 1 then 
244
245
                                local s = math.sqrt(m11-m22-m00+1) 
246
247
                                local recip = 0.5/s 
248
249
                                return (m01+m10)*recip, 0.5*s, (m21+m12)*recip, (m02-m20)*recip 
250
251
                        elseif i == 2 then 
252
253
                                local s = math.sqrt(m22-m00-m11+1) 
254
255
                                local recip = 0.5/s return (m02+m20)*recip, (m12+m21)*recip, 0.5*s, (m10-m01)*recip 
256
257
                        end 
258
259
                end 
260
261
        end   
262
263
        local function QuaternionToCFrame(px, py, pz, x, y, z, w) 
264
265
                local xs, ys, zs = x + x, y + y, z + z 
266
267
                local wx, wy, wz = w*xs, w*ys, w*zs 
268
269
                local xx = x*xs 
270
271
                local xy = x*ys 
272
273
                local xz = x*zs 
274
275
                local yy = y*ys 
276
277
                local yz = y*zs 
278
279
                local zz = z*zs 
280
281
                return CFrame.new(px, py, pz,1-(yy+zz), xy - wz, xz + wy,xy + wz, 1-(xx+zz), yz - wx, xz - wy, yz + wx, 1-(xx+yy)) 
282
283
                end   
284
285
        local function QuaternionSlerp(a, b, t) 
286
287
                local cosTheta = a[1]*b[1] + a[2]*b[2] + a[3]*b[3] + a[4]*b[4] 
288
289
                local startInterp, finishInterp; 
290
291
                if cosTheta >= 0.0001 then 
292
293
                        if (1 - cosTheta) > 0.0001 then 
294
295
                                local theta = math.acos(cosTheta) 
296
297
                                local invSinTheta = 1/math.sin(theta) 
298
299
                                startInterp = math.sin((1-t)*theta)*invSinTheta 
300
301
                                finishInterp = math.sin(t*theta)*invSinTheta  
302
303
                        else 
304
305
                                startInterp = 1-t 
306
307
                                finishInterp = t 
308
309
                        end 
310
311
                else 
312
313
                        if (1+cosTheta) > 0.0001 then 
314
315
                                local theta = math.acos(-cosTheta) 
316
317
                                local invSinTheta = 1/math.sin(theta) 
318
319
                                startInterp = math.sin((t-1)*theta)*invSinTheta 
320
321
                                finishInterp = math.sin(t*theta)*invSinTheta 
322
323
                        else 
324
325
                                startInterp = t-1 
326
327
                                finishInterp = t 
328
329
                        end 
330
331
                end 
332
333
                return a[1]*startInterp + b[1]*finishInterp, a[2]*startInterp + b[2]*finishInterp, a[3]*startInterp + b[3]*finishInterp, a[4]*startInterp + b[4]*finishInterp 
334
335
        end  
336
337
        function clerp(a,b,t) 
338
339
                local qa = {QuaternionFromCFrame(a)}
340
341
                local qb = {QuaternionFromCFrame(b)} 
342
343
                local ax, ay, az = a.x, a.y, a.z 
344
345
                local bx, by, bz = b.x, b.y, b.z  
346
347
                local _t = 1-t 
348
349
                return QuaternionToCFrame(_t*ax + t*bx, _t*ay + t*by, _t*az + t*bz,QuaternionSlerp(qa, qb, t)) 
350
351
        end 
352
353
end
354
355
356
for i,v in pairs(char:GetChildren()) do
357
358
        if v:IsA("Hat") or v:IsA("BodyColors") or v:IsA("Clothing") or v:IsA("ShirtGraphic") then
359
360
                v:Destroy()
361
362
        end
363
364
end
365
366
Instance.new("Hat",char)
367
368
local root = char.HumanoidRootPart
369
370
local tw = root.RootJoint
371
372
local tor = char.Torso
373
374
local hd = char.Head
375
376
local hum = char.Humanoid
377
378
hum.Health = 40
379
380
hum.MaxHealth = 40
381
382
hum.WalkSpeed = 12
383
384
local rl,ll = char["Right Leg"],char["Left Leg"]
385
386
local ra,la = char["Right Arm"],char["Left Arm"]
387
388
389
local c0 = {
390
391
        rs = CFrame.new(1,.5,0),
392
393
        ls = CFrame.new(-1,.5,0),
394
395
        rh = CFrame.new(.5,-1,0),
396
397
        lh = CFrame.new(-.5,-1,0),
398
399
        nk = CFrame.new(0,1,0),
400
401
        tw = CFrame.new(0,0,0)*CFrame.Angles(0,0,0),
402
403
}
404
405
local c1 = {
406
407
        rs = CFrame.new(-.5,.5,0),
408
409
        ls = CFrame.new(.5,.5,0),
410
411
        rh = CFrame.new(0,1,0),
412
413
        lh = CFrame.new(0,1,0),
414
415
        nk = CFrame.new(0,-.5,0),
416
417
        tw = CFrame.new(0,0,0)*CFrame.Angles(0,0,0)
418
419
}
420
421
422
local rs = tor["Right Shoulder"]
423
424
local ls = tor["Left Shoulder"]
425
426
local rh = tor["Right Hip"]
427
428
local lh = tor["Left Hip"]
429
430
local nk = tor["Neck"]
431
432
for i,v in pairs(tor:GetChildren()) do
433
434
        if v:IsA("Motor6D") then
435
436
                v.DesiredAngle = 0
437
438
                v.MaxVelocity = 0
439
440
                v.CurrentAngle = 0
441
442
        end
443
444
end
445
446
447
448
449
450
pcall(function() tor.roblox:Destroy() end)
451
452
453
pcall(function() char.Faerie:Destroy() end)
454
455
local model = Instance.new("Model",char)
456
457
model.Name = "Faerie"
458
459
460
local BasePart = Instance.new("Part")
461
462
BasePart.CanCollide = false
463
464
BasePart.Anchored = false
465
466
BasePart.FormFactor = "Custom"
467
468
BasePart.Locked = true
469
470
BasePart.Size = Vector3.new()
471
472
BasePart.TopSurface,BasePart.BottomSurface,BasePart.LeftSurface,BasePart.RightSurface,BasePart.FrontSurface,BasePart.BackSurface = 10,10,10,10,10,10
473
474
BasePart:BreakJoints()
475
476
477
function NP(par)
478
479
    local p = BasePart:Clone()
480
481
    p.Parent = par or model
482
483
    return p
484
485
end
486
487
488
local w1 = NP()
489
490
w1.Transparency = .1
491
492
local w1m = Instance.new("SpecialMesh",w1)
493
494
w1m.MeshId = "rbxassetid://19367766"
495
496
w1m.TextureId = "rbxassetid://9854798"
497
498
w1m.Scale = Vector3.new(1.05, 1.05, 1.05)
499
500
local w1 = weld(tor,w1,CFrame.new(-.1,0.55,1.6))
501
502
503
local w2 = NP()
504
505
w2.Transparency = .1
506
507
local w2m = Instance.new("SpecialMesh",w2)
508
509
w2m.MeshId = "rbxassetid://19367766"
510
511
w2m.TextureId = "rbxassetid://9854798"
512
513
w2m.Scale = Vector3.new(1.05, 1.05, 1.05)
514
515
local w2 = weld(tor,w2,CFrame.new(.1,0.55,1.6))
516
517
518
local h = NP()
519
520
local hm = Instance.new("SpecialMesh",h)
521
522
hm.MeshId = "rbxassetid://154820214"
523
524
hm.TextureId = "rbxassetid://91740209"
525
526
hm.Scale = Vector3.new(1, 1, 1)
527
528
weld(hd,h,CFrame.new(0,0.2,0))
529
530
531
for i,v in pairs(char:GetChildren()) do
532
533
        if v:IsA("BasePart") then
534
535
                v.Material = "SmoothPlastic"
536
537
                v.TopSurface,v.BottomSurface,v.FrontSurface,v.BackSurface,v.LeftSurface,v.RightSurface = 10,10,10,10,10,10
538
539
        end
540
541
end
542
543
544
do
545
546
        if modelScale ~= 1 then
547
548
                for i,v in pairs(c0) do
549
550
                        c0[i] = (v-v.p) + v.p*modelScale
551
552
                end
553
554
                for i,v in pairs(c1) do
555
556
                        c1[i] = (v-v.p) + v.p*modelScale
557
558
                end
559
560
                local Joints = {}
561
562
            local gtJoints,gtParts;
563
564
565
            local function gtCFrame(cf)
566
567
                return (cf-cf.p) + cf.p * modelScale
568
569
            end
570
571
572
            function gtJoints(p)
573
574
                for i,v in pairs(p:GetChildren()) do
575
576
                    if v:IsA("JointInstance") then
577
578
                        table.insert(Joints,{v,v.Part0,v.Part1})
579
580
                        v.Part0 = nil
581
582
                        v.Part1 = nil
583
584
                        v.C0 = (v.C0-(v.C0.p)) + (v.C0.p * modelScale) 
585
586
                        v.C1 = (v.C1-(v.C1.p)) + (v.C1.p * modelScale) 
587
588
                    end
589
590
                    gtJoints(v)
591
592
                end 
593
594
            end
595
596
597
            function gtParts(p)
598
599
                for i,v in pairs(p:GetChildren()) do
600
601
                    if v:IsA("BasePart") then
602
603
                        pcall(function() v.FormFactor = "Custom" end)
604
605
                        local oldz = v.Size
606
607
                        local cf = tor.CFrame:toObjectSpace(v.CFrame)
608
609
                        v.Size = v.Size * modelScale
610
611
                        v.CFrame = tor.CFrame * gtCFrame(cf)
612
613
                        local mesh = nil
614
615
                        for i,t in pairs(v:GetChildren()) do 
616
617
                            if t:IsA("DataModelMesh") then 
618
619
                                mesh = t 
620
621
                            end 
622
623
                        end
624
625
                        if mesh == nil and v:IsA("Part") and v.Shape == Enum.PartType.Ball then 
626
627
                            mesh = Instance.new("SpecialMesh",v) 
628
629
                            mesh.MeshType = Enum.MeshType.Sphere 
630
631
                        end
632
633
                        if mesh == nil and ((v:IsA("Part") and v.Shape == Enum.PartType.Block) or v:IsA("Seat") or v:IsA("VehicleSeat")) then 
634
635
                            mesh = Instance.new("BlockMesh",v) 
636
637
                        end
638
639
                        if mesh ~= nil then
640
641
                                if mesh:IsA("SpecialMesh") and mesh.MeshType == Enum.MeshType.FileMesh then
642
643
                                        mesh.Scale = mesh.Scale * modelScale
644
645
                                else
646
647
                                    mesh.Scale = mesh.Scale*(oldz*modelScale)/v.Size
648
649
                            end
650
651
                        end
652
653
                    end
654
655
                    gtParts(v)
656
657
                end 
658
659
            end
660
661
            gtJoints(char)
662
663
            gtParts(char)
664
665
            for i,v in pairs(Joints) do
666
667
                v[1].Part0 = v[2]
668
669
                v[1].Part1 = v[3]
670
671
            end
672
673
        end
674
675
end
676
677
rs.C0,rs.C1 = c0.rs,c1.rs
678
679
ls.C0,ls.C1 = c0.ls,c1.ls
680
681
rh.C0,rh.C1 = c0.rh,c1.rh
682
683
lh.C0,lh.C1 = c0.lh,c1.lh
684
685
nk.C0,nk.C1 = c0.nk,c1.nk
686
687
tw.C0,tw.C1 = c0.tw,c1.tw
688
689
690
local w10,w20 = w1.C0,w2.C0
691
692
693
local pl = tor:FindFirstChild("FairyLight") or Instance.new("PointLight",tor)
694
695
pl.Name = "FairyLight"
696
697
pl.Shadows = false
698
699
pl.Range = 8
700
701
pl.Brightness = 10
702
703
704
local sparkles = tor:FindFirstChild("FairySparkles") or Instance.new("Sparkles",tor)
705
706
sparkles.Name = "FairySparkles"
707
708
709
710
local outfit = 0
711
712
local outfitparts = {ra,la,rl,ll,tor}
713
714
local outfits = {
715
716
        {{106705109},{106705077},{106703301},{106703213},{106705037}}
717
718
}
719
720
721
722
local mycolor = ll.BrickColor.Color
723
724
local mycolor2 = mycolor
725
726
727
function setOutfit()
728
729
        local of = outfits[outfit]
730
731
        if of then
732
733
                for i,v in pairs(outfitparts) do
734
735
                        local mesh = v:FindFirstChild("outfitMesh")
736
737
                        local meshdata = outfits[outfit][i]
738
739
                        if not mesh then
740
741
                                mesh = Instance.new("SpecialMesh",v)
742
743
                                mesh.Name = "outfitMesh"
744
745
                                mesh.TextureId = "rbxassetid://9854798"
746
747
                        end
748
749
                        mesh.Scale =(meshdata[2] or Vector3.new(1,1,1)) * modelScale
750
751
                        mesh.MeshId = "rbxassetid://"..meshdata[1]
752
753
                        mesh.VertexColor = Vector3.new(mycolor2.r,mycolor2.g,mycolor2.b)
754
755
                end
756
757
        else
758
759
                for i,v in pairs(outfitparts) do
760
761
                        pcall(function() v.outfitMesh:Destroy() end)
762
763
                end
764
765
        end
766
767
end
768
769
setOutfit()
770
771
772
local senabled = true
773
774
local lenabled = true
775
776
function changeColor()
777
778
        for i,v in pairs(char:GetChildren()) do
779
780
                if v:IsA("BasePart") then
781
782
                        v.BrickColor = BrickColor.new(mycolor)
783
784
                end
785
786
        end
787
788
        local mc1 = Vector3.new(mycolor.r,mycolor.g,mycolor.b)
789
790
        local mc2 = Vector3.new(mycolor2.r,mycolor2.g,mycolor2.b)
791
792
        w1m.VertexColor,w2m.VertexColor,hm.VertexColor = mc1,mc1,mc2
793
794
        for i,v in pairs(outfitparts) do
795
796
                local mesh = v:FindFirstChild("outfitMesh")
797
798
                if mesh then
799
800
                        mesh.VertexColor = mc2
801
802
                end
803
804
        end
805
806
        pl.Color = mycolor
807
808
        sparkles.SparkleColor = mycolor
809
810
end
811
812
changeColor()
813
814
815
do
816
817
        pcall(function() plr.PlayerGui.fairyColoring:Destroy() end)
818
819
        local scr = Instance.new("ScreenGui",plr.PlayerGui)
820
821
        scr.Name = "fairyColoring"
822
823
        local fr = Instance.new("Frame",scr)
824
825
        fr.Size = UDim2.new(0,-150,0,-65)
826
827
        fr.BackgroundColor3 = Color3.new(1,1,1)
828
829
        fr.BorderColor3 = Color3.new(.05,.05,.05)
830
831
        fr.BackgroundTransparency = .8
832
833
        fr.Position = UDim2.new(1,0,1,scr.Parent:FindFirstChild("PandaHelpNotify") and -20 or 0)
834
835
        fr.ZIndex = 9
836
837
        local am = 75
838
839
        local rval,gval,bval = mycolor.r,mycolor.g,mycolor.b
840
841
        local r = Instance.new("TextButton",fr)
842
843
        r.BackgroundTransparency = 1
844
845
        r.Size = UDim2.new(0,75,0,15)
846
847
        r.Position = UDim2.new(0,5,0,5)
848
849
        r.TextColor3 = Color3.new(1,1,1)
850
851
        r.TextStrokeTransparency = .4
852
853
        for i=1,am do
854
855
                local t = Instance.new("ImageLabel",r)
856
857
                t.BorderSizePixel = 0
858
859
                t.Size = UDim2.new(1/am,0,1,0)
860
861
                t.Position = UDim2.new((i-1)/am,0,0,0)
862
863
                t.Name = i
864
865
                t.ZIndex = 10
866
867
        end
868
869
        local rb = Instance.new("ImageLabel",r)
870
871
        rb.ZIndex = 10
872
873
        rb.Size = UDim2.new(0,2,1,-2)
874
875
        rb.BackgroundColor3 = Color3.new(0,0,0)
876
877
        rb.BackgroundTransparency = .5
878
879
        rb.BorderColor3 = Color3.new(.4,.4,.4)
880
881
        rb.Name = "b"
882
883
        local g = r:Clone()
884
885
        g.Parent = fr
886
887
        g.Position = UDim2.new(0,5,0,25)
888
889
        local b = r:Clone()
890
891
        b.Parent = fr
892
893
        b.Position = UDim2.new(0,5,0,45)
894
895
        r.ZIndex,g.ZIndex,b.ZIndex = 10,10,10
896
897
        local prev = Instance.new("TextButton",fr)
898
899
        prev.Size = UDim2.new(0,55,0,45)
900
901
        prev.Position = UDim2.new(0,90,0,5)
902
903
        prev.ZIndex = 10
904
905
        prev.BorderColor3 = Color3.new(.2,.2,.2)
906
907
        prev.TextColor3 = Color3.new(1,1,1)
908
909
        prev.TextStrokeTransparency = .4
910
911
        prev.TextYAlignment = "Bottom"
912
913
        prev.FontSize = "Size8"
914
915
        prev.TextWrapped = true
916
917
        local res = Instance.new("TextButton",fr)
918
919
        res.Size = UDim2.new(0,55,0,9)
920
921
        res.Position = UDim2.new(0,90,0,51)
922
923
        res.ZIndex = 10
924
925
        res.BorderColor3 = Color3.new(.2,.2,.2)
926
927
        res.BackgroundColor3 = Color3.new(.5,0,0)
928
929
        res.TextColor3 = Color3.new(1,1,1)
930
931
        res.Text = "reset"
932
933
        res.FontSize = "Size8"
934
935
        local mode = 0
936
937
        local function update(set)
938
939
                r.b.Position = UDim2.new(rval,-1,0,1)
940
941
                g.b.Position = UDim2.new(gval,-1,0,1)
942
943
                b.b.Position = UDim2.new(bval,-1,0,1)
944
945
                local col = Color3.new(rval,gval,bval)
946
947
                prev.BackgroundColor3 = mode == 1 and mycolor2 or mycolor
948
949
                prev.Text = ""
950
951
                r.Text = math.floor(rval*255+.5)
952
953
                g.Text = math.floor(gval*255+.5)
954
955
                b.Text = math.floor(bval*255+.5)
956
957
                for i,v in pairs(r:GetChildren()) do
958
959
                        local n = tonumber(v.Name)
960
961
                        if n then
962
963
                                local sc = n/am
964
965
                                v.BackgroundColor3 = Color3.new(sc,gval,bval)
966
967
                        end
968
969
                end
970
971
                for i,v in pairs(g:GetChildren()) do
972
973
                        local n = tonumber(v.Name)
974
975
                        if n then
976
977
                                local sc = n/am
978
979
                                v.BackgroundColor3 = Color3.new(rval,sc,bval)
980
981
                        end
982
983
                end
984
985
                for i,v in pairs(b:GetChildren()) do
986
987
                        local n = tonumber(v.Name)
988
989
                        if n then
990
991
                                local sc = n/am
992
993
                                v.BackgroundColor3 = Color3.new(rval,gval,sc)
994
995
                        end
996
997
                end
998
999
                if set ~= false then
1000
1001
                        if mode == 0 then
1002
1003
                                mycolor = col
1004
1005
                        end
1006
1007
                        if mode == 1 then
1008
1009
                                mycolor2 = col
1010
1011
                        end
1012
1013
                        changeColor()
1014
1015
                end
1016
1017
        end
1018
1019
        update()
1020
1021
        local rd,gd,bd = false,false,false
1022
1023
        r.MouseButton1Down:connect(function(x,y) rd = true rval = (x-r.AbsolutePosition.X)/r.AbsoluteSize.X update()  end)
1024
1025
        r.MouseButton1Up:connect(function() rd = false end)
1026
1027
        r.MouseLeave:connect(function() rd = false end)
1028
1029
        r.MouseMoved:connect(function(x,y) if not rd then return end rval = (x-r.AbsolutePosition.X)/r.AbsoluteSize.X update() end)
1030
1031
        g.MouseButton1Down:connect(function(x,y) gd = true gval = (x-g.AbsolutePosition.X)/g.AbsoluteSize.X update() end)
1032
1033
        g.MouseButton1Up:connect(function() gd = false end)
1034
1035
        g.MouseLeave:connect(function() gd = false end)
1036
1037
        g.MouseMoved:connect(function(x,y) if not gd then return end gval = (x-g.AbsolutePosition.X)/g.AbsoluteSize.X update() end)
1038
1039
        b.MouseButton1Down:connect(function(x,y) bd = true bval = (x-b.AbsolutePosition.X)/b.AbsoluteSize.X update() end)
1040
1041
        b.MouseButton1Up:connect(function() bd = false end)
1042
1043
        b.MouseLeave:connect(function() bd = false end)
1044
1045
        b.MouseMoved:connect(function(x,y) if not bd then return end bval = (x-b.AbsolutePosition.X)/b.AbsoluteSize.X update() end)
1046
1047
        res.MouseButton1Click:connect(function()
1048
1049
                rval,gval,bval = themeColor.Color.r,themeColor.Color.g,themeColor.Color.b
1050
1051
                update()
1052
1053
        end)
1054
1055
1056
        local modebtn = Instance.new("TextButton",fr)
1057
1058
        modebtn.Position = UDim2.new(1,-150,0,-15)
1059
1060
        modebtn.Size = UDim2.new(0,49,0,14)
1061
1062
        modebtn.BackgroundColor3 = Color3.new(1,1,0)
1063
1064
        modebtn.BackgroundTransparency = .6
1065
1066
        modebtn.TextScaled = true
1067
1068
        modebtn.Font = 4
1069
1070
        modebtn.TextColor3 = Color3.new(1,1,1)
1071
1072
        modebtn.TextStrokeTransparency = .7
1073
1074
        modebtn.Text = "Body"
1075
1076
        modebtn.MouseButton1Click:connect(function()
1077
1078
                mode = (mode+1)%2
1079
1080
                local col = mode == 1 and mycolor2 or mycolor
1081
1082
                rval,gval,bval = col.r,col.g,col.b
1083
1084
                modebtn.Text = mode == 0 and "Body" or "Clothes"
1085
1086
                update(false)
1087
1088
        end)
1089
1090
1091
        local outfitbtn = Instance.new("TextButton",fr)
1092
1093
        outfitbtn.Position = UDim2.new(1,-150,0,-30)
1094
1095
        outfitbtn.Size = UDim2.new(0,49,0,14)
1096
1097
        outfitbtn.BackgroundColor3 = Color3.new(1,1,0)
1098
1099
        outfitbtn.BackgroundTransparency = .6
1100
1101
        outfitbtn.TextScaled = true
1102
1103
        outfitbtn.Font = 4
1104
1105
        outfitbtn.TextColor3 = Color3.new(1,1,1)
1106
1107
        outfitbtn.TextStrokeTransparency = .7
1108
1109
        outfitbtn.Text = "Outfit"
1110
1111
        outfitbtn.MouseButton1Click:connect(function()
1112
1113
                outfit = (outfit+1)%(#outfits+1)
1114
1115
                setOutfit()
1116
1117
        end)
1118
1119
1120
        local sparklebtn = Instance.new("TextButton",fr)
1121
1122
        sparklebtn.Position = UDim2.new(1,-100,0,-15)
1123
1124
        sparklebtn.Size = UDim2.new(0,100,0,14)
1125
1126
        sparklebtn.BackgroundColor3 = Color3.new(0,1,0)
1127
1128
        sparklebtn.BackgroundTransparency = .6
1129
1130
        sparklebtn.TextScaled = true
1131
1132
        sparklebtn.Font = 4
1133
1134
        sparklebtn.TextColor3 = Color3.new(1,1,1)
1135
1136
        sparklebtn.TextStrokeTransparency = .7
1137
1138
        sparklebtn.Text = "Sparkles"
1139
1140
        sparklebtn.MouseButton1Click:connect(function()
1141
1142
                senabled = not senabled
1143
1144
                sparklebtn.BackgroundColor3 = senabled and Color3.new(0,1,0) or Color3.new(1,0,0)
1145
1146
        end)
1147
1148
        local lightbtn = Instance.new("TextButton",fr)
1149
1150
        lightbtn.Position = UDim2.new(1,-100,0,-30)
1151
1152
        lightbtn.Size = UDim2.new(0,100,0,14)
1153
1154
        lightbtn.BackgroundColor3 = Color3.new(0,1,0)
1155
1156
        lightbtn.BackgroundTransparency = .6
1157
1158
        lightbtn.TextScaled = true
1159
1160
        lightbtn.Font = 4
1161
1162
        lightbtn.TextColor3 = Color3.new(1,1,1)
1163
1164
        lightbtn.TextStrokeTransparency = .7
1165
1166
        lightbtn.Text = "Light"
1167
1168
        lightbtn.MouseButton1Click:connect(function()
1169
1170
                lenabled = not lenabled
1171
1172
                lightbtn.BackgroundColor3 = lenabled and Color3.new(0,1,0) or Color3.new(1,0,0)
1173
1174
        end)
1175
1176
end
1177
1178
1179
1180
local gyro = root:FindFirstChild("RootGyro") or Instance.new("BodyGyro",root)
1181
1182
gyro.maxTorque = Vector3.new()
1183
1184
gyro.Name = "RootGyro"
1185
1186
1187
local vel = root:FindFirstChild("RootVel") or Instance.new("BodyVelocity",root)
1188
1189
vel.maxForce = Vector3.new()
1190
1191
vel.Name = "RootVel"
1192
1193
vel.P = 4000
1194
1195
1196
local flying = false
1197
1198
local state = "idle"
1199
1200
local kd = {}
1201
1202
local humspd = 0
1203
1204
local flyspeed = 0
1205
1206
local flystop = 0
1207
1208
local sitting = false
1209
1210
local holding = false
1211
1212
1213
m.KeyDown:connect(function(k)
1214
1215
        local now = tick()
1216
1217
        kd[k] = now
1218
1219
        if k == " " and not flying then
1220
1221
                pcall(function() sitting:Destroy() end)
1222
1223
                sitting = nil
1224
1225
                state = "fly"
1226
1227
                flying = true
1228
1229
                flydir = (root.CFrame.lookVector*Vector3.new(1,0,1)).unit
1230
1231
        elseif k == " " and state == "fly" then
1232
1233
                flying = false
1234
1235
                state = "idle"
1236
1237
                flystop = tick()
1238
1239
        elseif k == "x" and m.Target and (root.Position-m.Hit.p).magnitude < 20*modelScale then
1240
1241
                local tar = m.Target
1242
1243
                local cf = tar.CFrame:toObjectSpace(m.Hit)
1244
1245
                local siz = tar.Size/2
1246
1247
                local cfr
1248
1249
                local rx,ry,rz = 0,0,0
1250
1251
                local lv = tar.CFrame:vectorToObjectSpace(root.CFrame.lookVector)
1252
1253
                if math.abs(cf.Y-siz.Y) < .03 then
1254
1255
                        cfr = CFrame.new(cf.p + Vector3.new(0,3*modelScale,0)) * CFrame.Angles(0,math.atan2(-lv.X,-lv.Z),0)
1256
1257
                elseif math.abs(-cf.Y-siz.Y) < .03 then
1258
1259
                        cfr = CFrame.new(cf.p - Vector3.new(0,3*modelScale,0)) * CFrame.Angles(0,math.atan2(-lv.X,-lv.Z),math.pi)
1260
1261
                elseif math.abs(cf.X-siz.X) < .03 then
1262
1263
                        cfr = CFrame.new(cf.p + Vector3.new(3*modelScale,0,0)) * CFrame.Angles(0,0,-math.pi/2) * CFrame.Angles(0,math.atan2(-lv.X,-lv.Z),0)
1264
1265
                elseif math.abs(-cf.X-siz.X) < .03 then
1266
1267
                        cfr = CFrame.new(cf.p - Vector3.new(3*modelScale,0,0)) * CFrame.Angles(0,0,math.pi/2) * CFrame.Angles(0,math.atan2(-lv.X,-lv.Z),0)
1268
1269
                elseif math.abs(cf.Z-siz.Z) < .03 then
1270
1271
                        cfr = CFrame.new(cf.p + Vector3.new(0,0,3*modelScale)) * CFrame.Angles(math.pi/2,0,0) * CFrame.Angles(0,math.atan2(-lv.X,-lv.Z),0)
1272
1273
                elseif math.abs(-cf.Z-siz.Z) < .03 then
1274
1275
                        cfr = CFrame.new(cf.p - Vector3.new(0,0,3*modelScale)) * CFrame.Angles(-math.pi/2,0,0) * CFrame.Angles(0,math.atan2(-lv.X,-lv.Z),0)
1276
1277
                end
1278
1279
                if cfr then
1280
1281
                        pcall(function() sitting:Destroy() end)
1282
1283
                        flying = false
1284
1285
                        state = "sit"
1286
1287
                        if m.Target.Anchored then
1288
1289
                                sitting = {tar = tar, cf = cfr}
1290
1291
                        else
1292
1293
                                sitting = weld(tar,root,cfr)
1294
1295
                        end
1296
1297
                end
1298
1299
        end
1300
1301
end)
1302
1303
m.KeyUp:connect(function(k)
1304
1305
        kd[k] = nil
1306
1307
end)
1308
1309
1310
hum.Running:connect(function(spd)
1311
1312
        if state ~= "idle" and state ~= "walk" and state ~= "inair" then return end
1313
1314
        humspd = spd
1315
1316
        state = flying and "fly" or (spd < 1 and "idle" or "walk")
1317
1318
end)
1319
1320
hum.Climbing:connect(function(spd)
1321
1322
        if state ~= "idle" and state ~= "walk" and state ~= "inair" then return end
1323
1324
        humspd = spd
1325
1326
        state = flying and "fly" or (spd < 1 and "idle" or "walk")
1327
1328
end)
1329
1330
hum.Seated:connect(function(a)
1331
1332
        state = a and "sit" or humspd > 0 and "idle" or "walk"
1333
1334
end)
1335
1336
1337
hum.Changed:connect(function()
1338
1339
        if hum.Jump then
1340
1341
                hum.Jump = false
1342
1343
        end
1344
1345
end)
1346
1347
1348
hum.FreeFalling:connect(function()
1349
1350
        if state ~= "idle" and state ~= "walk" and state ~= "inair" then return end
1351
1352
        state = math.abs(tor.Velocity.Y) > 1 and "inair" or state
1353
1354
end)
1355
1356
1357
hum.FallingDown:connect(function(a)
1358
1359
        if not a then return end
1360
1361
        state = "inair"
1362
1363
end)
1364
1365
1366
1367
1368
while true do
1369
1370
        runservice.RenderStepped:wait()
1371
1372
        local cam = workspace.CurrentCamera
1373
1374
        local alpha = .2
1375
1376
        sparkles.Enabled = senabled and flying and tor.Velocity.magnitude > 3
1377
1378
        pl.Enabled = lenabled
1379
1380
        if state ~= "fly" then
1381
1382
                if type(sitting) == "table" then
1383
1384
                        gyro.maxTorque = Vector3.new(1,1,1)*4e6
1385
1386
                        vel.maxForce = Vector3.new(1,1,1)*4e5
1387
1388
                        gyro.cframe = sitting.tar.CFrame * sitting.cf
1389
1390
                        vel.velocity = (gyro.cframe.p-root.Position)*10
1391
1392
                else
1393
1394
                        gyro.maxTorque,vel.maxForce = Vector3.new(),Vector3.new()
1395
1396
                end
1397
1398
        end
1399
1400
        if sitting then
1401
1402
                state = "sit"
1403
1404
        end
1405
1406
        tw.MaxVelocity,rh.MaxVelocity,lh.MaxVelocity,rs.MaxVelocity,ls.MaxVelocity,nk.MaxVelocity = 0,0,0,0,0,0
1407
1408
        tw.CurrentAngle,rh.CurrentAngle,lh.CurrentAngle,rs.CurrentAngle,ls.CurrentAngle,nk.CurrentAngle = 0,0,0,0,0,0
1409
1410
1411
        local hasRobe = outfit == 1
1412
1413
1414
        if state == "idle" then
1415
1416
                hum.PlatformStand = false
1417
1418
                local breathing = math.sin(tick()*2)
1419
1420
                local tilt = .02 + breathing*.03
1421
1422
                w1.C0 = clerp(w1.C0,w10*CFrame.Angles(0,-.01+breathing*.01,0),alpha)
1423
1424
                w2.C0 = clerp(w2.C0,w20*CFrame.Angles(0,.01-breathing*.01,0),alpha)
1425
1426
1427
                tw.C0 = clerp(tw.C0,c0.tw*CFrame.Angles(tilt,0,0),alpha)
1428
1429
                rh.C0 = clerp(rh.C0,c0.rh*CFrame.Angles(-tilt,hasRobe and 0 or -.1,hasRobe and 0 or .06),alpha)
1430
1431
                lh.C0 = clerp(lh.C0,c0.lh*CFrame.Angles(-tilt,hasRobe and 0 or .1,hasRobe and 0 or -.06),alpha)
1432
1433
                rs.C0 = clerp(rs.C0,c0.rs*CFrame.Angles(-tilt,0,.1),alpha)
1434
1435
                ls.C0 = clerp(ls.C0,c0.ls*CFrame.Angles(-tilt,0,-.1),alpha)
1436
1437
                nk.C0 = clerp(nk.C0,c0.nk*CFrame.Angles(-tilt+breathing*.05-.03,0,0),alpha)
1438
1439
        elseif state == "inair" then
1440
1441
                hum.PlatformStand = false
1442
1443
                local wings = math.sin(tick()*80)
1444
1445
                w1.C0 = clerp(w1.C0,w10*CFrame.Angles(0,-.15+wings*.3,0),.6)
1446
1447
                w2.C0 = clerp(w2.C0,w20*CFrame.Angles(0,.15-wings*.3,0),.6)
1448
1449
                local alpha = .15
1450
1451
                local tilt = .05
1452
1453
                local wavey = math.sin(tick()*3)
1454
1455
                tw.C0 = clerp(tw.C0,c0.tw*CFrame.Angles(tilt,0,0),alpha)
1456
1457
                rh.C0 = clerp(rh.C0,c0.rh*CFrame.Angles(-tilt+wavey*.1,0,hasRobe and 0 or .02),alpha)
1458
1459
                lh.C0 = clerp(lh.C0,c0.lh*CFrame.Angles(-tilt-wavey*.1,0,hasRobe and 0 or -.02),alpha)
1460
1461
                rs.C0 = clerp(rs.C0,c0.rs*CFrame.Angles(-tilt-wavey*.07,0,.01),alpha)
1462
1463
                ls.C0 = clerp(ls.C0,c0.ls*CFrame.Angles(-tilt+wavey*.07,0,-.01),alpha)
1464
1465
                nk.C0 = clerp(nk.C0,c0.nk*CFrame.Angles(-tilt+.2,0,0),alpha)
1466
1467
        elseif state == "walk" then
1468
1469
                hum.PlatformStand = false
1470
1471
                local walking = math.sin(tick()*25) 
1472
1473
                local breathing = math.sin(tick()*2)
1474
1475
                local tilt = -.03-breathing*.02+walking*.01
1476
1477
                alpha = .6
1478
1479
                w1.C0 = clerp(w1.C0,w10*CFrame.Angles(0,-.05+breathing*.01+walking*.05,0),alpha)
1480
1481
                w2.C0 = clerp(w2.C0,w20*CFrame.Angles(0,.05-breathing*.01+walking*.05,0),alpha)
1482
1483
1484
                tw.C0 = clerp(tw.C0,c0.tw*CFrame.Angles(tilt,-walking*.08,0),alpha)
1485
1486
                rh.C0 = clerp(rh.C0,c0.rh*CFrame.Angles(-tilt+walking*.3,0,hasRobe and 0 or .02),alpha)
1487
1488
                lh.C0 = clerp(lh.C0,c0.lh*CFrame.Angles(-tilt-walking*.3,0,hasRobe and 0 or -.02),alpha)
1489
1490
                rs.C0 = clerp(rs.C0,c0.rs*CFrame.Angles(-tilt+.05-walking*.25,0,.01),alpha)
1491
1492
                ls.C0 = clerp(ls.C0,c0.ls*CFrame.Angles(-tilt+.05+walking*.25,0,-.01),alpha)
1493
1494
                nk.C0 = clerp(nk.C0,c0.nk*CFrame.Angles(-tilt+breathing*.04,walking*.07,0),alpha)
1495
1496
        elseif state == "sit" then
1497
1498
                hum.Sit = false
1499
1500
                hum.PlatformStand = true
1501
1502
                local breathing = math.sin(tick()*2)
1503
1504
                local upvec = root.CFrame:vectorToWorldSpace(Vector3.new(0,1,0))
1505
1506
                if upvec.Y > .4 then
1507
1508
                        local tilt = -.55+breathing*.015
1509
1510
                        w1.C0 = clerp(w1.C0,w10*CFrame.Angles(0,-.01+breathing*.01,0),alpha)
1511
1512
                        w2.C0 = clerp(w2.C0,w20*CFrame.Angles(0,.01-breathing*.01,0),alpha)
1513
1514
                        tw.C0 = clerp(tw.C0,c0.tw*CFrame.Angles(tilt,0,0)+Vector3.new(0,-1.7,0)*modelScale,alpha)
1515
1516
                        rh.C0 = clerp(rh.C0,c0.rh*CFrame.Angles(-tilt+1.57,0,hasRobe and 0 or .6),alpha)
1517
1518
                        lh.C0 = clerp(lh.C0,c0.lh*CFrame.Angles(-tilt+1.57,0,hasRobe and 0 or -.6),alpha)
1519
1520
                        rs.C0 = clerp(rs.C0,c0.rs*CFrame.Angles(-tilt+.3,0,-.1)*CFrame.Angles(hasRobe and .3 or 0,hasRobe and .2 or 0,hasRobe and -.2 or 0)+(hasRobe and 0 or 1)*Vector3.new(-.85,-.25,-.25)*modelScale,alpha)
1521
1522
                        ls.C0 = clerp(ls.C0,c0.ls*CFrame.Angles(-tilt+.3,0,.1)*CFrame.Angles(hasRobe and .3 or 0,hasRobe and -.2 or 0,hasRobe and .2 or 0)+(hasRobe and 0 or 1)*Vector3.new(.85,-.25,-.25)*modelScale,alpha)
1523
1524
                        nk.C0 = clerp(nk.C0,c0.nk*CFrame.Angles(-tilt+breathing*.04-.03,0,math.sin(tick()*4)*.06),alpha)
1525
1526
                else -- wallhug
1527
1528
                        local breathing = math.sin(tick()*5)
1529
1530
                        local tilt = -1.55+breathing*.015
1531
1532
                        w1.C0 = clerp(w1.C0,w10*CFrame.Angles(0,-.01+breathing*.01,0),alpha)
1533
1534
                        w2.C0 = clerp(w2.C0,w20*CFrame.Angles(0,.01-breathing*.01,0),alpha)
1535
1536
                        tw.C0 = clerp(tw.C0,c0.tw*CFrame.Angles(tilt,0,0)+Vector3.new(0,-2.5,0)*modelScale,alpha)
1537
1538
                        rh.C0 = clerp(rh.C0,c0.rh*CFrame.Angles(.2,0,hasRobe and 0 or .5)+Vector3.new(0,hasRobe and 0 or .2,0)*modelScale,alpha)
1539
1540
                        lh.C0 = clerp(lh.C0,c0.lh*CFrame.Angles(.2,0,hasRobe and 0 or -.5)+Vector3.new(0,hasRobe and 0 or .2,0)*modelScale,alpha)
1541
1542
                        rs.C0 = clerp(rs.C0,c0.rs*CFrame.Angles(2.9,0,.8)+Vector3.new(-.2,.4,0)*modelScale,alpha)
1543
1544
                        ls.C0 = clerp(ls.C0,c0.ls*CFrame.Angles(2.9,0,-.8)+Vector3.new(.2,.4,0)*modelScale,alpha)
1545
1546
                        nk.C0 = clerp(nk.C0,c0.nk*CFrame.Angles(breathing*.04+.7,0,0),alpha)
1547
1548
                end
1549
1550
        elseif state == "fly" then
1551
1552
                hum.PlatformStand = true
1553
1554
                gyro.maxTorque = Vector3.new(1,1,1)*4e6
1555
1556
                vel.maxForce = Vector3.new(1,1,1)*4e5
1557
1558
1559
                local velocity = Vector3.new((kd.d and 1 or 0)+(kd.a and -1 or 0),0,(kd.s and 1 or 0)+(kd.w and -1 or 0))
1560
1561
                velocity = cam.CoordinateFrame:vectorToWorldSpace(velocity)
1562
1563
                local maxspeed = 40-(velocity.magnitude > 0 and velocity.unit.Y*20 or 0)
1564
1565
                if velocity.magnitude > 0 then
1566
1567
                        flyspeed = lerp(flyspeed,maxspeed,.1)
1568
1569
                        flydir = flydir:Lerp(velocity.unit,.4).unit
1570
1571
                        hoverheight = nil
1572
1573
                else
1574
1575
                        flyspeed = lerp(flyspeed,0,.3)
1576
1577
                        flydir = (flydir*Vector3.new(1,0,1)).unit
1578
1579
                        hoverheight = hoverheight or root.Position.Y
1580
1581
                end
1582
1583
                vel.velocity = flydir.unit * flyspeed
1584
1585
                if hoverheight then
1586
1587
                        vel.velocity = vel.velocity + Vector3.new(0,hoverheight-root.Position.Y,0)
1588
1589
                end
1590
1591
                gyro.cframe = CFrame.new(Vector3.new(),flydir*Vector3.new(1,0,1))
1592
1593
1594
                rl.CanCollide,ll.CanCollide = true,true
1595
1596
1597
                local wings = math.sin(tick()*80)
1598
1599
                w1.C0 = clerp(w1.C0,w10*CFrame.Angles(0,-.15+wings*.3,0),.6)
1600
1601
                w2.C0 = clerp(w2.C0,w20*CFrame.Angles(0,.15-wings*.3,0),.6)
1602
1603
                local alpha = .15
1604
1605
                local flytilt = (flyspeed/maxspeed)
1606
1607
                local tilt = flytilt*-1.4 + math.asin(gyro.cframe:vectorToObjectSpace(flydir).unit.Y)
1608
1609
                local wavey = math.sin(tick()*6)
1610
1611
                tw.C0 = clerp(tw.C0,c0.tw*CFrame.Angles(tilt,0,0),alpha)
1612
1613
                rh.C0 = clerp(rh.C0,c0.rh*CFrame.Angles(wavey*.1,hasRobe and 0 or -.08,hasRobe and 0 or .1),alpha)
1614
1615
                lh.C0 = clerp(lh.C0,c0.lh*CFrame.Angles(-wavey*.1,hasRobe and 0 or .08,hasRobe and 0 or -.1),alpha)
1616
1617
                rs.C0 = clerp(rs.C0,c0.rs*CFrame.Angles(-wavey*.15,-.08,.1),alpha)
1618
1619
                ls.C0 = clerp(ls.C0,c0.ls*CFrame.Angles(wavey*.15,.08,-.1),alpha)
1620
1621
                nk.C0 = clerp(nk.C0,c0.nk*CFrame.Angles(-tilt*.8,0,0),alpha)
1622
1623
        end
1624
1625
end