Im_not_a_robot

Hover

Mar 11th, 2017
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.26 KB | None | 0 0
  1.  
  2. local Services = setmetatable({},{__index = function(t,i)
  3.     return game:service(i) or nil
  4. end})
  5. local Player = Services.Players.LocalPlayer
  6. local Mouse = Player:GetMouse()
  7. local Character = Player.Character
  8. local Human = Character:findFirstChild("Humanoid")
  9. local Backpack = Player:WaitForChild("Backpack")
  10. local Mouse = Player:GetMouse()
  11. local Count = false
  12. local Breathing = 0
  13. local Transition = false
  14. local Stance = "Standby"
  15. ScriptData = {
  16.     Colors = {
  17.         Base = "Grey",
  18.         Trim = "White",
  19.     },
  20.     Surfaces = {
  21.         "Top",
  22.         "Bottom",
  23.         "Left",
  24.         "Right",
  25.         "Front",
  26.         "Back",
  27.     },
  28.     Rotation = 0,
  29.     Rotors = {},
  30.     Keys = {
  31.         W = false,
  32.         A = false,
  33.         S = false,
  34.         D = false,
  35.         Space = false,
  36.     },
  37.     Lift = 2, --Studs off ground
  38.     TurnAngle = 0,
  39.     Last = 0,
  40.     Acceleration = 0,
  41. }
  42.  
  43. for _,v in pairs(Character:children()) do
  44.     if v.Name == "Hover" then
  45.         v:Destroy()
  46.     end
  47. end
  48. local MainModel = Instance.new("Model",Character)
  49. MainModel.Name = "Hover"
  50.  
  51. local function CreatePart(StringName,ObjectParent,VectorX,VectorY,VectorZ,StringColor,StringMaterial)
  52.     local New_Part = Instance.new("Part",ObjectParent)
  53.     New_Part.Name = StringName
  54.     New_Part.formFactor = 3
  55.     New_Part.Anchored = false
  56.     New_Part.CanCollide = false
  57.     New_Part.Locked = true
  58.     New_Part.BrickColor = BrickColor.new(StringColor)
  59.     New_Part.Size = Vector3.new(VectorX,VectorY,VectorZ)
  60.     New_Part.Material = StringMaterial
  61.     for _,S in pairs(ScriptData.Surfaces) do
  62.         New_Part[S.."Surface"] = 10
  63.     end
  64.     New_Part:BreakJoints()
  65.     Instance.new("BlockMesh",New_Part).Name = "Mesh"
  66.     return New_Part
  67. end
  68.  
  69. local function UD(a,b)
  70.     return UDim2.new(a,0,b,0)
  71. end
  72.  
  73. local function Thread(_F)
  74.     return coroutine.resume(coroutine.create(_F))
  75. end
  76.  
  77. local function CreateWeld(StringName,ObjectParent,Part1,Part0,CFrame1,CFrame0)
  78.     local New_Weld = Instance.new("Weld",ObjectParent)
  79.     New_Weld.Name = StringName
  80.     New_Weld.Part1 = Part1
  81.     New_Weld.Part0 = Part0
  82.     New_Weld.C1 = CFrame0
  83.     New_Weld.C0 = CFrame1
  84.     return New_Weld
  85. end
  86.  
  87. local function lerp(a, b, c)
  88.     return a+(b-a)*c
  89. end
  90.  
  91. local function AnimLerp(c1, c2, al)
  92.     local com1 = {c1.X,c1.Y,c1.Z,c1:toEulerAnglesXYZ()}
  93.     local com2 = {c2.X,c2.Y,c2.Z,c2:toEulerAnglesXYZ()}
  94.     for i,v in pairs(com1) do
  95.         com1[i] = lerp(v,com2[i],al)
  96.     end
  97.     return CFrame.new(com1[1],com1[2],com1[3]) * CFrame.Angles(select(4,unpack(com1)))
  98. end
  99.  
  100. local Stance = "None"
  101.  
  102. local Head = Character:findFirstChild("Head")
  103. local Torso = Character:findFirstChild("Torso")
  104. local Root = Character:findFirstChild("HumanoidRootPart")
  105. local MotorHolder = Instance.new("Model",MainModel)
  106. MotorHolder.Name = "Motors"
  107. local Sides = {"Left","Right"}
  108. local Arms = {Character["Left Arm"],Character["Right Arm"]}
  109. local Legs = {Character["Left Leg"],Character["Right Leg"]}
  110. local Welds = {
  111.     ArmW = {
  112.         Left = Instance.new("Weld",MotorHolder);
  113.         Right = Instance.new("Weld",MotorHolder);
  114.     };
  115.     LegW = {
  116.         Left = Instance.new("Weld",MotorHolder);
  117.         Right = Instance.new("Weld",MotorHolder);
  118.     };
  119.     HeadW = {
  120.         Middle = Instance.new("Weld",MotorHolder);
  121.     };
  122. }
  123. local RWelds = {
  124.     ArmW = {
  125.         Left = Torso["Left Shoulder"];
  126.         Right = Torso["Right Shoulder"];
  127.     };
  128.     LegW = {
  129.         Left = Torso["Left Hip"];
  130.         Right = Torso["Right Hip"];
  131.     };
  132.     HeadW = {
  133.         Middle = Torso["Neck"];
  134.     };
  135. }
  136. local LA,RA = Welds.ArmW.Left,Welds.ArmW.Right
  137. local LL,LR = Welds.LegW.Left,Welds.LegW.Right
  138. local HD = Welds.HeadW.Middle
  139. local LAD = CFrame.new(-1.5,0.5,0)
  140. local RAD = CFrame.new(1.5,0.5,0)
  141. local HDD = CFrame.new(0,-0.8,0)
  142. Welds.ArmW.Left.C1,Welds.ArmW.Left.C0,Welds.ArmW.Left.Part0 = CFrame.new(0, 0.5, 0),CFrame.new(-1.5, 0.5, 0),Torso
  143. Welds.ArmW.Right.C1,Welds.ArmW.Right.C0,Welds.ArmW.Right.Part0 = CFrame.new(0, 0.5, 0),CFrame.new(1.5, 0.5, 0),Torso
  144. Welds.LegW.Left.C1,Welds.LegW.Left.Part0 = CFrame.new(.5,2,0),Torso
  145. Welds.LegW.Right.C1,Welds.LegW.Right.Part0 = CFrame.new(-.5,2,0),Torso
  146. Welds.HeadW.Middle.C1,Welds.HeadW.Middle.Part0 = CFrame.new(0,-1.5,0),Torso
  147. local _Arm = function(side,tf)
  148.     local Arm = nil
  149.     local Weld = nil
  150.     local RWeld = nil
  151.     for _,S in pairs(Sides) do
  152.         if side:lower() == S:lower() then
  153.             for _,A in pairs(Arms) do
  154.                 if A.Name:lower():find(side:lower()) then
  155.                     Arm = A
  156.                     Weld = Welds.ArmW[S]
  157.                     RWeld = RWelds.ArmW[S]
  158.                 end
  159.             end
  160.         end
  161.     end
  162.     if Arm and Weld and RWeld then
  163.         if tf then
  164.             Weld.Part1 = Arm
  165.             RWeld.Part1 = nil
  166.         elseif not tf then
  167.             Weld.Part1 = nil
  168.             RWeld.Part1 = Arm
  169.         else
  170.             print("Error")
  171.         end
  172.     end
  173. end
  174.  
  175. local _Leg = function(side,tf)
  176.     local Leg = nil
  177.     local Weld = nil
  178.     local RWeld = nil
  179.     for _,S in pairs(Sides) do
  180.         if side:lower() == S:lower() then
  181.             for _,A in pairs(Legs) do
  182.                 if A.Name:lower():find(side:lower()) then
  183.                     Leg = A
  184.                     Weld = Welds.LegW[S]
  185.                     RWeld = RWelds.LegW[S]
  186.                 end
  187.             end
  188.         end
  189.     end
  190.     if Leg and Weld and RWeld then
  191.         if tf then
  192.             Weld.Part1 = Leg
  193.             RWeld.Part1 = nil
  194.         elseif not tf then
  195.             Weld.Part1 = nil
  196.             RWeld.Part1 = Leg
  197.         else
  198.             print("Error")
  199.         end
  200.     end
  201. end
  202.  
  203. local _Head = function(tf)
  204.     local Head = nil
  205.     local Weld = nil
  206.     local RWeld = nil
  207.     Head = Character["Head"]
  208.     Weld = Welds.HeadW.Middle
  209.     RWeld = RWelds.HeadW.Middle
  210.     if Head and Weld and RWeld then
  211.         if tf then
  212.             Weld.Part1 = Head
  213.             RWeld.Part1 = nil
  214.         elseif not tf then
  215.             Weld.Part1 = nil
  216.             RWeld.Part1 = Head
  217.         else
  218.             print("Error")
  219.         end
  220.     end
  221. end
  222.  
  223. local function Round(Number)
  224.     return math.floor(Number+.5)
  225. end
  226.  
  227. --[[Hover Creation]]--
  228. local Board = CreatePart("Part",MainModel,1.5,0.25,4,ScriptData.Colors.Base,"SmoothPlastic")
  229. local BoardEdge = CreatePart("Part",MainModel,1.505,0.2,3.995,ScriptData.Colors.Trim,"Neon")
  230. local BEW = CreateWeld("Weld",BoardEdge,BoardEdge,Board,CFrame.new(0,0,0),CFrame.Angles(0,0,0))
  231. --
  232. --
  233. local PointA = CreatePart("Part",MainModel,0.2,0.2,0.2,ScriptData.Colors.Base,"SmoothPlastic")
  234. PointA.Transparency = 1
  235. PointA.CanCollide = false
  236. local PW = CreateWeld("Weld",PointA,PointA,Board,CFrame.new(0,-0.1,3),CFrame.Angles(math.rad(90),0,0))
  237. local PointB = CreatePart("Part",MainModel,0.2,0.2,0.2,ScriptData.Colors.Base,"SmoothPlastic")
  238. PointB.Transparency = 1
  239. PointB.CanCollide = false
  240. local PWB = CreateWeld("Weld",PointB,PointB,Board,CFrame.new(0,-0.1,-3),CFrame.Angles(math.rad(90),0,0))
  241. --
  242. --
  243. local BodyPos = Instance.new("BodyPosition",Board)
  244. BodyPos.maxForce = Vector3.new(1e5,1e5,1e5)
  245. local Tilt = Instance.new("BodyGyro",Board)
  246. Tilt.maxTorque = Vector3.new(1,1,1)/0
  247. local Push = Instance.new("BodyForce",Board)
  248. Push.force = Vector3.new()
  249. --[[Player Welding]]--
  250.  
  251. if Torso and Human and Board then
  252.     Human.PlatformStand = true
  253.     Torso.CFrame = Torso.CFrame*CFrame.new(0,2,0)
  254.     local TtBW = CreateWeld("Weld",Torso,Torso,Board,CFrame.new(0,3,0),CFrame.Angles(0,math.rad(90),0))
  255. end
  256.  
  257. local function HoverPiece(CF,CFA)
  258.     local Center = CreatePart("Part",MainModel,0.4,0.2,0.4,"Black","SmoothPlastic")
  259.     Center:ClearAllChildren()
  260.     Instance.new("CylinderMesh",Center).Scale = Vector3.new(1,1,1)
  261.     local Emitter = Instance.new("ParticleEmitter", Center)
  262.     Emitter.Enabled = true
  263.     Emitter.Name = "Realism"
  264.     Emitter.Acceleration = Vector3.new(0.5,0.5,0.5)
  265.     Emitter.Transparency = NumberSequence.new(0.5,0.8)
  266.     Emitter.Rate = NumberRange.new(1)
  267.     local PW1 = CreateWeld("Weld",Center,Center,Board,CF,CFA)
  268.     local Spin = Center:Clone()
  269.     Spin.Parent = MainModel
  270.     Spin.Size = Vector3.new(1,1,1)
  271.     Spin.Transparency = 1
  272.     local SPW = CreateWeld("Weld",Spin,Spin,Center,CFrame.new(0,0,0),CFrame.Angles(0,0,0))
  273.     table.insert(ScriptData.Rotors, SPW)
  274.     for i=0,360,45 do
  275.         local Part = CreatePart("Part",MainModel,1,0.25,0.25,ScriptData.Colors.Base,"SmoothPlastic")
  276.         local PW2 = CreateWeld("Weld",Part,Part,Center,CFrame.Angles(0,math.rad(i),0)*CFrame.new(0,0,1.08),CFrame.Angles(0,0,0))
  277.         local Edge = CreatePart("Part",MainModel,1,0.2,0.2,ScriptData.Colors.Trim,"Neon")
  278.         local EW = CreateWeld("Weld",Edge,Edge,Part,CFrame.new(0,0,0.05),CFrame.Angles(0,0,0))
  279.     end
  280.     for i=0,360,45 do
  281.         local Rotor = CreatePart("Part",MainModel,2,0.2,0.25,"White","SmoothPlastic")
  282.         Rotor:findFirstChild("Mesh").Scale = Vector3.new(1,0.125,1)
  283.         local RW = CreateWeld("Weld",Rotor,Rotor,Spin,CFrame.Angles(0,math.rad(i),0)*CFrame.new(0,0,0.2),CFrame.Angles(math.rad(-20),0,0))
  284.     end
  285. end
  286.  
  287. HoverPiece(CFrame.new(0,0,-2.9),CFrame.Angles(0,0,0))
  288. HoverPiece(CFrame.new(0,0,2.9),CFrame.Angles(0,0,0))
  289.  
  290. Services.RunService.Stepped:connect(function()
  291.     pcall(function()
  292.         for _,v in pairs(ScriptData.Rotors) do
  293.             if v and v.Parent then
  294.                 v.C0 = v.C0 * CFrame.Angles(0,math.rad(10),0)
  295.             end
  296.         end
  297.     end)
  298.     a,b = ypcall(function()
  299.         if Board and Torso and BodyPos and Tilt and PointA and PointB then
  300.             local Rays = Ray.new(PointA.CFrame.p,PointA.CFrame.lookVector*(ScriptData.Lift + 4 + (ScriptData.Keys.Space==true and 5 or 0)))
  301.             local Object,Pos = Services.Workspace:findPartOnRay(Rays,Character)
  302.             local Rays2 = Ray.new(PointB.CFrame.p,PointB.CFrame.lookVector*(ScriptData.Lift + 4 + (ScriptData.Keys.Space==true and 5 or 0)))
  303.             local Object2,Pos2 = Services.Workspace:findPartOnRay(Rays2,Character)
  304.             local Left,Right,Front,Back,Space,Accept = 0,0,0,0,0,0
  305.             local Face = Board.CFrame.lookVector
  306.  
  307.             if ScriptData.Keys.A==true then
  308.                 Left = 1
  309.             elseif ScriptData.Keys.D==true then
  310.                 Right = -1
  311.             end
  312.             if ScriptData.Keys.Space==true then
  313.                 Space = 5
  314.             else
  315.                 Space = 0
  316.             end
  317.             if ScriptData.Keys.S==true then
  318.                 Back,ScriptData.Last = -2,-1
  319.                 ScriptData.Acceleration = ScriptData.Acceleration >=8 and 8 or ScriptData.Acceleration + 0.1
  320.             elseif ScriptData.Keys.W==true then
  321.                 Front,ScriptData.Last = 2,1
  322.                 ScriptData.Acceleration = ScriptData.Acceleration >=8 and 8 or ScriptData.Acceleration + 0.1
  323.             elseif ScriptData.Acceleration ~= 0 and not ScriptData.Keys.S==true and not ScriptData.Keys.W==true then
  324.                 ScriptData.Acceleration = ScriptData.Acceleration>0 and ScriptData.Acceleration - 0.1 or 0
  325.                 Accept = ScriptData.Last
  326.             end
  327.  
  328.             ScriptData.TurnAngle = ScriptData.TurnAngle - math.pi*(Left+Right)/32
  329.             Tilt.cframe = CFrame.new()*CFrame.Angles(0,-ScriptData.TurnAngle,((Left+Right)/2))*CFrame.Angles(-((Front+Back)/5),0,0)
  330.  
  331.             if Object and Object:IsA("BasePart") or Object2 and Object2:IsA("BasePart") then
  332.                 local A = 0
  333.                 local B = 0
  334.  
  335.                 if Object then
  336.                     A = Object.CFrame.Y + Object.Size.Y/2
  337.                 end
  338.                 if Object2 then
  339.                     B = Object2.CFrame.Y + Object2.Size.Y/2
  340.                 end
  341.                 BodyPos.maxForce = Vector3.new(1e5,1e5,1e5)
  342.                 BodyPos.position = Vector3.new(Board.CFrame.X,(((A+B)/2)+ScriptData.Lift)+Space,Board.CFrame.Z) + Vector3.new(Face.X,0,Face.Z)*ScriptData.Acceleration*(Front+Back+Accept)
  343.             else
  344.                 BodyPos.maxForce = Vector3.new(1e5,0,1e5)
  345.                 BodyPos.position = Vector3.new(Board.CFrame.X,Board.CFrame.Y,Board.CFrame.Z) + Vector3.new(Face.X,Space,Face.Z)*ScriptData.Acceleration*(Front+Back+Accept)
  346.             end
  347.         end
  348.     end)
  349.     if not a then
  350.         print("E: "..b)
  351.     end
  352. end)
  353.  
  354. Thread(function()
  355.     while true do
  356.         for i = 0,10,0.1 do
  357.             ScriptData.Lift = ScriptData.Lift + (math.sin(math.pi*2/10*i)*0.1)
  358.             wait(0.02)
  359.         end
  360.     end
  361. end)
  362.  
  363. Mouse.KeyDown:connect(function(Key)
  364.     if Key == "w" then
  365.         ScriptData.Keys.W = true
  366.     end
  367.     if Key == "a" then
  368.         ScriptData.Keys.A = true
  369.     end
  370.     if Key == "s" then
  371.         ScriptData.Keys.S = true
  372.     end
  373.     if Key == "d" then
  374.         ScriptData.Keys.D = true
  375.     end
  376.     if Key:byte() == 32 then
  377.         ScriptData.Keys.Space = true
  378.     end
  379. end)
  380.  
  381. Mouse.KeyUp:connect(function(Key)
  382.     if Key == "w" then
  383.         ScriptData.Keys.W = false
  384.     end
  385.     if Key == "a" then
  386.         ScriptData.Keys.A = false
  387.     end
  388.     if Key == "s" then
  389.         ScriptData.Keys.S = false
  390.     end
  391.     if Key == "d" then
  392.         ScriptData.Keys.D = false
  393.     end
  394.     if Key:byte() == 32 then
  395.         ScriptData.Keys.Space = false
  396.     end
  397. end)
  398.  
  399. _Arm("Left", true)
  400. _Arm("Right", true)
  401. _Leg("Left", true)
  402. _Leg("Right", true)
  403. _Head(true)
  404.  
  405. Services.RunService.RenderStepped:connect(function()
  406.     if Transition then
  407.         if Breathing >= 1 then
  408.             Transition = false
  409.         end
  410.         Breathing = Breathing + 1/100
  411.     else
  412.         if Breathing <= 0 then
  413.             Transition = true
  414.         end
  415.         Breathing = Breathing - 1/100
  416.     end
  417.  
  418.     if Stance == "None" then
  419.         LA.C0 = LAD * CFrame.Angles(math.rad(10*Breathing),0,math.rad(-20))
  420.         RA.C0 = RAD * CFrame.Angles(math.rad(-10*Breathing),0,math.rad(20))
  421.         LL.C0 = CFrame.new() * CFrame.Angles(0,0,math.rad(-5))
  422.         LR.C0 = CFrame.new() * CFrame.Angles(0,0,math.rad(5))
  423.     end
  424. end)
Add Comment
Please, Sign In to add comment