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