Advertisement
BobMe

VRMS

Apr 7th, 2018
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. wait(2)
  2.  
  3. local InputService=game:GetService("UserInputService")
  4. local Camera=game.Workspace.CurrentCamera
  5. local Player=game.Players.LocalPlayer
  6. local Character=Player.Character
  7. local Head=Character.Head
  8. local Torso=Character.Torso
  9. local RootPart=Character.HumanoidRootPart
  10. local RootJoint=RootPart.RootJoint
  11. local Neck=Torso.Neck
  12. Camera.FieldOfView=90
  13. Camera.CameraType="Scriptable"
  14. InputService.MouseBehavior=Enum.MouseBehavior.LockCenter
  15. port = Instance.new("Part", game.Players.LocalPlayer.Character)
  16. port.Transparency = 1
  17. port.CanCollide = false
  18. port.Anchored = true
  19. port.Name = ("parted")
  20.  
  21. local plr = game.Players.LocalPlayer
  22. plr.Changed:connect(function(change)
  23. if (change == "Character.parted") then
  24. plr.CameraMode = "Classic"
  25. script.Disabled = true
  26. script:Destroy()
  27. end
  28. end)
  29.  
  30.  
  31. local v3=Vector3.new
  32. local cf=CFrame.new
  33. local components=cf().components
  34. local inverse=cf().inverse
  35. local fromAxisAngle=CFrame.fromAxisAngle
  36. local atan,atan2=math.atan,math.atan2
  37. local acos=math.acos
  38.  
  39. local function toAxisAngleFromVector(v)
  40. local z=v.z
  41. return z*z<0.99999 and v3(v.y,-v.x,0).unit*acos(-z) or v3()
  42. end
  43.  
  44. local function AxisAngleLookOrientation(c,v,t)--CFrame,Vector,Tween
  45. local c=c-c.p
  46. local rv=(inverse(c)*v).unit
  47. local rz=rv.z
  48. return rz*rz<0.99999 and c*fromAxisAngle(v3(rv.y,-rv.x,0),acos(-rz)*(t or 1)) or c
  49. end
  50.  
  51. local function AxisAngleLookNew(v,t)--CFrame,Vector,Tween
  52. local rv=v.unit
  53. local rz=rv.z
  54. return rz*rz<0.99999 and fromAxisAngle(v3(rv.y,-rv.x,0),acos(-rz)*(t or 1)) or cf()
  55. end
  56.  
  57. local function AxisAngleLook(c,v,t)--CFrame,Vector,Tween
  58. local rv=(inverse(c)*v).unit
  59. local rz=rv.z
  60. return rz*rz<0.99999 and c*fromAxisAngle(v3(rv.y,-rv.x,0),acos(-rz)*(t or 1)) or c
  61. end
  62. gamma = 0
  63.  
  64.  
  65.  
  66. local Sensitivity=0.005
  67.  
  68.  
  69. local CameraDirection=Vector3.new(0,0,1)
  70.  
  71. local function EulerAnglesYX(l)
  72. local x,z=l.x,l.z
  73. return atan(l.y/(x*x+z*z)^0.5),-atan2(x,-z)
  74. end
  75.  
  76. local function AnglesXY(l)
  77. local z=l.z
  78. return atan2(l.y,-z),-atan2(l.x,-z)
  79. end
  80.  
  81. plr = game:service'Players'.LocalPlayer
  82. char = plr.Character
  83. Mouse2 = plr:GetMouse()
  84.  
  85. Mouse2.KeyDown:connect(function(KeyDown)
  86. if KeyDown == "z" then
  87. if Zoom == 8 then return
  88. else
  89. Camera.FieldOfView=10
  90. local Sensitivity=0.0000005
  91. local DirectionBound=3.14159/6
  92. end
  93. end
  94. end)
  95.  
  96. Mouse2.KeyUp:connect(function(KeyUp)
  97. if KeyUp == "z" then
  98. Camera.FieldOfView=80
  99. local Sensitivity=0.005
  100. local DirectionBound=3.14159/3
  101. end
  102. end)
  103.  
  104. Mouse2.KeyDown:connect(function(KeyDown)
  105. if string.byte(KeyDown) == 50 then
  106. InputService.MouseBehavior=Enum.MouseBehavior.Default
  107. end
  108. end)
  109.  
  110. Mouse2.KeyUp:connect(function(KeyUp)
  111. if string.byte(KeyUp) == 50 then
  112. InputService.MouseBehavior=Enum.MouseBehavior.LockCenter
  113. end
  114. end)
  115.  
  116. local function MouseMoved(Input)
  117. if Input.UserInputType==Enum.UserInputType.MouseMovement then
  118. local dx,dy=Input.Delta.x*Sensitivity,Input.Delta.y*Sensitivity
  119. local m2=dx*dx+dy*dy
  120. if m2>0 then
  121. CameraDirection=(AxisAngleLookOrientation(RootPart.CFrame,CameraDirection)*fromAxisAngle(v3(-dy,-dx,0),m2^0.5)).lookVector
  122. end
  123. local RootOrientation=RootPart.CFrame-RootPart.Position
  124. local RelativeDirection=RootOrientation:inverse()*CameraDirection
  125. local AngX,AngY=AnglesXY(RelativeDirection)--RootOrientation:inverse()*
  126. if AngX<-1.57*11/12 then
  127. local y,z,c,s=RelativeDirection.y,RelativeDirection.z,math.cos(-1.57*11/12-AngX),-math.sin(-1.57*11/12-AngX)
  128. z,y=z*c-y*s,z*s+y*c
  129. CameraDirection=RootOrientation*v3(RelativeDirection.x<0 and -(1-y*y-z*z)^0.5 or (1-y*y-z*z)^0.5,y,z)
  130. elseif AngX>1.57*11/12 then
  131. local y,z,c,s=RelativeDirection.y,RelativeDirection.z,math.cos(1.57*11/12-AngX),-math.sin(1.57*11/12-AngX)
  132. z,y=z*c-y*s,z*s+y*c
  133. CameraDirection=RootOrientation*v3(RelativeDirection.x<0 and -(1-y*y-z*z)^0.5 or (1-y*y-z*z)^0.5,y,z)
  134. end
  135. end
  136. end
  137.  
  138. local Mouse=Player:GetMouse()
  139.  
  140. local Zoom=-0.5
  141.  
  142. Mouse.KeyDown:connect(function(k)
  143. if k=="j" then
  144. Zoom=-0.5
  145. local d = game.Players.LocalPlayer.Character:GetChildren()
  146. for i=1, #d do
  147. if (d[i].className == "Accessory") then
  148. d[i].Handle.LocalTransparencyModifier = 1
  149. end
  150. end
  151. Zoom=-0.5
  152. elseif k=="l" then
  153. local d = game.Players.LocalPlayer.Character:GetChildren()
  154. for i=1, #d do
  155. if (d[i].className == "Accessory") then
  156. d[i].Handle.LocalTransparencyModifier = 0
  157. end
  158. end
  159. Zoom=8
  160. end
  161. end)
  162.  
  163. InputService.InputChanged:connect(MouseMoved)
  164.  
  165. Neck.C1=cf()
  166.  
  167. local _
  168. local DirectionBound=3.14159/3
  169. local CurrentAngY=0
  170.  
  171. local function CameraUpdate()
  172. Camera.CameraType="Scriptable"
  173. local cx,cz=CameraDirection.x,CameraDirection.z
  174. local rvx,rvz=RootPart.Velocity.x,RootPart.Velocity.z
  175. if rvx*rvx+rvz*rvz>4 and cx*rvx+cz*rvz<-0.5*(cx*cx+cz*cz)^0.5*(rvx*rvx+rvz*rvz)^0.5 then
  176. DirectionBound=math.min(DirectionBound*0.9,math.abs(CurrentAngY*0.9))
  177. else
  178. DirectionBound=DirectionBound*0.1+3.14159/3*0.9
  179. end
  180. local AngX,AngY=EulerAnglesYX((RootPart.CFrame-RootPart.Position):inverse()*CameraDirection)
  181. if AngY>DirectionBound then
  182. RootPart.CFrame=RootPart.CFrame*CFrame.Angles(0,AngY-DirectionBound,0)
  183. elseif AngY<-DirectionBound then
  184. RootPart.CFrame=RootPart.CFrame*CFrame.Angles(0,AngY+DirectionBound,0)
  185. end
  186. _,CurrentAngY=EulerAnglesYX((RootPart.CFrame-RootPart.Position):inverse()*CameraDirection)
  187. local CameraOrientation=AxisAngleLookNew((RootPart.CFrame-RootPart.Position):inverse()*CameraDirection,1)
  188. Neck.C0=CFrame.new(0,1,0)*CameraOrientation*CFrame.new(0,0.5,0)
  189. local PreCam=AxisAngleLook(RootPart.CFrame*cf(0,1,0),RootPart.CFrame*v3(0,1,0)+CameraDirection)*CFrame.new(0,0.825,0)
  190. if Zoom==8 then
  191. local Part,Position=Workspace:findPartOnRay(Ray.new(PreCam.p,PreCam.lookVector*-8),Character)
  192. Camera.CoordinateFrame=PreCam*CFrame.new(Zoom/2.2,.5,(Position-PreCam.p).magnitude)
  193. else
  194. Camera.CoordinateFrame=PreCam*CFrame.new(0,0,Zoom)
  195. end
  196. end
  197.  
  198. local d = game.Players.LocalPlayer.Character:GetChildren()
  199. for i=1, #d do
  200. if (d[i].className == "Accessory") then
  201. d[i].Handle.LocalTransparencyModifier = 1
  202. end
  203. end
  204. local plr = game.Players.LocalPlayer
  205. plr.Changed:connect(function(change)
  206. if (change == "Character.parted") then
  207. plr.CameraMode = "Classic"
  208. script.Disabled = true
  209. script:Destroy()
  210. end
  211. end)
  212.  
  213.  
  214.  
  215. game:GetService("RunService").RenderStepped:connect(CameraUpdate)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement