View difference between Paste ID: 3zGYFJ1Y and kuJ2nSaT
SHOW: | | - or go back to the newest paste.
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
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
local function MouseMoved(Input)
82
	if Input.UserInputType==Enum.UserInputType.MouseMovement then
83
		local dx,dy=Input.Delta.x*Sensitivity,Input.Delta.y*Sensitivity
84
		local m2=dx*dx+dy*dy
85
		if m2>0 then
86
			CameraDirection=(AxisAngleLookOrientation(RootPart.CFrame,CameraDirection)*fromAxisAngle(v3(-dy,-dx,0),m2^0.5)).lookVector
87
		end
88
		local RootOrientation=RootPart.CFrame-RootPart.Position
89
		local RelativeDirection=RootOrientation:inverse()*CameraDirection
90
		local AngX,AngY=AnglesXY(RelativeDirection)--RootOrientation:inverse()*
91
		if AngX<-1.57*11/12 then
92
			local y,z,c,s=RelativeDirection.y,RelativeDirection.z,math.cos(-1.57*11/12-AngX),-math.sin(-1.57*11/12-AngX)
93
			z,y=z*c-y*s,z*s+y*c
94
			CameraDirection=RootOrientation*v3(RelativeDirection.x<0 and -(1-y*y-z*z)^0.5 or (1-y*y-z*z)^0.5,y,z)
95
		elseif AngX>1.57*11/12 then
96
			local y,z,c,s=RelativeDirection.y,RelativeDirection.z,math.cos(1.57*11/12-AngX),-math.sin(1.57*11/12-AngX)
97
			z,y=z*c-y*s,z*s+y*c
98
			CameraDirection=RootOrientation*v3(RelativeDirection.x<0 and -(1-y*y-z*z)^0.5 or (1-y*y-z*z)^0.5,y,z)
99
		end
100
	end
101
end
102
103
local Mouse=Player:GetMouse()
104
105
local Zoom=-0.5
106
107
Mouse.KeyDown:connect(function(k) 
108
	if k=="j" then 	
109
		Zoom=-0.5
110
	elseif k=="l" then
111
		Zoom=8
112
	end
113
end)
114
115
InputService.InputChanged:connect(MouseMoved)
116
117
Neck.C1=cf()
118
119
local _
120
local DirectionBound=3.14159/3
121
local CurrentAngY=0
122
123
local function CameraUpdate()
124
	Camera.CameraType="Scriptable"
125
	local cx,cz=CameraDirection.x,CameraDirection.z
126
	local rvx,rvz=RootPart.Velocity.x,RootPart.Velocity.z
127
	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
128
		DirectionBound=math.min(DirectionBound*0.9,math.abs(CurrentAngY*0.9))
129
	else
130
		DirectionBound=DirectionBound*0.1+3.14159/3*0.9
131
	end
132
	local AngX,AngY=EulerAnglesYX((RootPart.CFrame-RootPart.Position):inverse()*CameraDirection)
133
	if AngY>DirectionBound then
134
		RootPart.CFrame=RootPart.CFrame*CFrame.Angles(0,AngY-DirectionBound,0)
135
	elseif AngY<-DirectionBound then
136
		RootPart.CFrame=RootPart.CFrame*CFrame.Angles(0,AngY+DirectionBound,0)
137
	end
138
	_,CurrentAngY=EulerAnglesYX((RootPart.CFrame-RootPart.Position):inverse()*CameraDirection)
139
	local CameraOrientation=AxisAngleLookNew((RootPart.CFrame-RootPart.Position):inverse()*CameraDirection,1)
140
	Neck.C0=CFrame.new(0,1,0)*CameraOrientation*CFrame.new(0,0.5,0)
141
	local PreCam=AxisAngleLook(RootPart.CFrame*cf(0,1,0),RootPart.CFrame*v3(0,1,0)+CameraDirection)*CFrame.new(0,0.825,0)
142
	if Zoom==8 then
143
		local Part,Position=Workspace:findPartOnRay(Ray.new(PreCam.p,PreCam.lookVector*-8),Character)
144
		Camera.CoordinateFrame=PreCam*CFrame.new(0,0,(Position-PreCam.p).magnitude)
145
	else
146
		Camera.CoordinateFrame=PreCam*CFrame.new(0,0,Zoom)
147
	end
148
end
149
150
local d = game.Players.LocalPlayer.Character:GetChildren() 
151
for i=1, #d do 
152
	if (d[i].className == "Accessory") then 
153
		d[i].Handle.LocalTransparencyModifier = 1 
154
	end 
155
end
156
game.Workspace.Memo1332.EpicWings.Handle.LocalTransparencyModifier = 0
157
158
local plr = game.Players.LocalPlayer
159
plr.Changed:connect(function(change)
160
if (change == "Character.parted") then
161
plr.CameraMode = "Classic"
162
script.Disabled = true	
163
script:Destroy()
164
end
165
end)
166
167
plr.Character.parted.ChildRemoved:connect(function(partedoof)
168
if partedoof then
169
plr.CameraMode = "Classic"
170
script.Disabled = true	
171
script:Destroy()
172
end
173
end)
174
175
game:GetService("RunService").RenderStepped:connect(CameraUpdate)