View difference between Paste ID: P0AxdGcb and JiW0yu1d
SHOW: | | - or go back to the newest paste.
1-
mouse = game.Players.LocalPlayer:GetMouse()
1+
if game:GetService("RunService"):IsClient() then error("Script must be server-side in order to work; use h/ and not hl/") end
2-
gun = Instance.new("Part", game.Players.LocalPlayer.Character)
2+
local Player,Mouse,mouse,UserInputService,ContextActionService = owner
3
do
4
	print("FE Compatibility code by Mokiros")
5
	script.Parent = Player.Character
6
7-
weld.Part0 = game.Players.LocalPlayer.Character["Right Arm"]
7+
	--RemoteEvent for communicating
8
	local Event = Instance.new("RemoteEvent")
9
	Event.Name = "UserInput_Event"
10
11
	--Fake event to make stuff like Mouse.KeyDown work
12-
portalmoosic = Instance.new("Sound", game.Players.LocalPlayer.Character)
12+
	local function fakeEvent()
13
		local t = {_fakeEvent=true,Connect=function(self,f)self.Function=f end}
14
		t.connect = t.Connect
15
		return t
16-
impact = Instance.new("Sound", game.Players.LocalPlayer.Character)
16+
17
18
	--Creating fake input objects with fake variables
19
    local m = {Target=nil,Hit=CFrame.new(),KeyUp=fakeEvent(),KeyDown=fakeEvent(),Button1Up=fakeEvent(),Button1Down=fakeEvent()}
20-
local rhandweld = Instance.new("Weld", game.Players.LocalPlayer.Character.Torso)
20+
	local UIS = {InputBegan=fakeEvent(),InputEnded=fakeEvent()}
21-
rhandweld.Part0 = game.Players.LocalPlayer.Character.Torso
21+
	local CAS = {Actions={},BindAction=function(self,name,fun,touch,...)
22-
rhandweld.Part1 = game.Players.LocalPlayer.Character["Right Arm"]
22+
		CAS.Actions[name] = fun and {Name=name,Function=fun,Keys={...}} or nil
23
	end}
24
	--Merged 2 functions into one by checking amount of arguments
25-
local lhandweld = Instance.new("Weld", game.Players.LocalPlayer.Character.Torso)
25+
	CAS.UnbindAction = CAS.BindAction
26-
lhandweld.Part0 = game.Players.LocalPlayer.Character.Torso
26+
27-
lhandweld.Part1 = game.Players.LocalPlayer.Character["Left Arm"]
27+
	--This function will trigger the events that have been :Connect()'ed
28
	local function te(self,ev,...)
29
		local t = m[ev]
30
		if t and t._fakeEvent and t.Function then
31
			t.Function(...)
32
		end
33
	end
34
	m.TrigEvent = te
35
	UIS.TrigEvent = te
36
37
	Event.OnServerEvent:Connect(function(plr,io)
38
	    if plr~=Player then return end
39
		if io.isMouse then
40
			m.Target = io.Target
41
			m.Hit = io.Hit
42
		else
43
			local b = io.UserInputState == Enum.UserInputState.Begin
44
			if io.UserInputType == Enum.UserInputType.MouseButton1 then
45
				return m:TrigEvent(b and "Button1Down" or "Button1Up")
46
			end
47
			for _,t in pairs(CAS.Actions) do
48
				for _,k in pairs(t.Keys) do
49
					if k==io.KeyCode then
50
						t.Function(t.Name,io.UserInputState,io)
51
					end
52
				end
53
			end
54
			m:TrigEvent(b and "KeyDown" or "KeyUp",io.KeyCode.Name:lower())
55
			UIS:TrigEvent(b and "InputBegan" or "InputEnded",io,false)
56
	    end
57
	end)
58
	Event.Parent = NLS([==[
59
	local Player = game:GetService("Players").LocalPlayer
60
	local Event = script:WaitForChild("UserInput_Event")
61
62
	local UIS = game:GetService("UserInputService")
63
	local input = function(io,a)
64
		if a then return end
65
		--Since InputObject is a client-side instance, we create and pass table instead
66
		Event:FireServer({KeyCode=io.KeyCode,UserInputType=io.UserInputType,UserInputState=io.UserInputState})
67
	end
68
	UIS.InputBegan:Connect(input)
69
	UIS.InputEnded:Connect(input)
70
71
	local Mouse = Player:GetMouse()
72
	local h,t
73
	--Give the server mouse data 30 times every second, but only if the values changed
74
	--If player is not moving their mouse, client won't fire events
75
	while wait(1/30) do
76
		if h~=Mouse.Hit or t~=Mouse.Target then
77
			h,t=Mouse.Hit,Mouse.Target
78
			Event:FireServer({isMouse=true,Target=t,Hit=h})
79
		end
80
	end]==],Player.Character)
81
	Mouse,mouse,UserInputService,ContextActionService = m,m,UIS,CAS
82
end
83
Player = owner
84
gun = Instance.new("Part", owner.Character)
85
gun.Size = Vector3.new(0.5, 1, 2)
86
gun.CanCollide = false
87
gun:BreakJoints()
88
weld = Instance.new("Weld", gun)
89
weld.Part0 = owner.Character["Right Arm"]
90
weld.Part1 = gun
91
mesh = Instance.new("SpecialMesh", gun)
92
mesh.MeshId = "rbxassetid://430056568"
93
mesh.TextureId = "rbxassetid://430056584"
94
portalmoosic = Instance.new("Sound", owner.Character)
95
portalmoosic.SoundId = "rbxassetid://142300248"
96
portalmoosic.Looped = true
97
portalmoosic:Play()
98
impact = Instance.new("Sound", owner.Character)
99
impact.SoundId = "rbxassetid://142082170"
100
mesh.Scale = Vector3.new(0.17,0.17,0.17)
101
weld.C0 = weld.C0 * CFrame.new(-0.2,-1.3,-0.8) * CFrame.Angles(3,0,0)
102
local rhandweld = Instance.new("Weld", owner.Character.Torso)
103
rhandweld.Part0 = owner.Character.Torso
104
rhandweld.Part1 = owner.Character["Right Arm"]
105
rhandweld.C0 = CFrame.new(1.5, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, 0, 0)
106
rhandweld.C1 = CFrame.new(0, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, 0, 0)
107
local lhandweld = Instance.new("Weld", owner.Character.Torso)
108
lhandweld.Part0 = owner.Character.Torso
109
lhandweld.Part1 = owner.Character["Left Arm"]
110
lhandweld.C0 = CFrame.new(-1.5, 0.5, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0)
111
lhandweld.C1 = CFrame.new(0, 0.5, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0)
112
Pick = Instance.new("Sound", gun)
113
Pick.SoundId = "rbxassetid://291256829"
114
Pick:Play()
115
Shoot = Instance.new("Sound", gun)
116
Shoot.SoundId = "rbxassetid://142774034"
117
blueexists = false
118
tping = false
119
orangeexists = false
120
for i = 0,1 , 0.1 do
121
	wait()
122
	lhandweld.C0 = lhandweld.C0 * CFrame.new():lerp(CFrame.Angles(0,-0.2,-0.28),i)
123
	rhandweld.C0 = rhandweld.C0 * CFrame.new():lerp(CFrame.Angles(0,0,0.28),i)
124
end
125
for i = 0,1 , 0.1 do
126
	wait()
127
	lhandweld.C0 = lhandweld.C0 * CFrame.new():lerp(CFrame.new(0,-0.25,0),i)
128
end
129
using = false
130
orange = false
131
blue = true
132
function changeportals(key)
133
	key = key:lower()
134
	if key == "q" then
135
		if not blue then
136
			blue = true
137
			orange = false
138
		end
139
	end
140
	if key == "e" then
141
		if not orange then
142
			blue = false
143
			orange = true
144
		end
145
	end
146
end
147
function portal()
148
	if not using then
149
		using = true
150
		if blue then
151
			Shoot:Play()
152
			local projectile = Instance.new("Part", workspace)
153
			projectile.Size = Vector3.new(1,1,1)
154
			projectile.BrickColor = BrickColor.new("Electric blue")
155
			projectile.Shape = "Ball"
156
			projectile.CanCollide = true
157
			projectile.Anchored = false
158
			projectile.Material = "Neon"
159
			local vel = Instance.new("BodyVelocity", projectile)
160
			vel.MaxForce = Vector3.new(math.huge,math.huge,math.huge)
161
			vel.Velocity = mouse.Hit.lookVector * 80
162
			projectile.Position = gun.CFrame.p
163
			wait(0.03)
164
			local function make(part)
165
				local gr = part.Parent:findFirstChild("Part")
166
				local porjectileposition = projectile.Position
167
				local portaldoor = Instance.new("Part", workspace)
168
				portaldoor.Size = Vector3.new(1, 1, 1)
169
				portaldoor.BrickColor = BrickColor.new("Electric blue")
170
				portaldoor.Anchored = true
171
				portaldoor.Shape = "Cylinder"
172
				portaldoor.Material = "Neon"
173
				portaldoor.CanCollide = false
174
				if blueexists == true then
175
					workspace.BluePortal:destroy()
176
				end
177
				blueexists = true
178
				portaldoor.Name = "BluePortal"
179
				portaldoor.CFrame = part.CFrame
180
				if part.Size.y < part.Size.x and part.Size.y < part.Size.z then --a big help from Toxsikkilla
181
					print("if y < x")
182
					portaldoor.CFrame = portaldoor.CFrame * CFrame.fromEulerAnglesXYZ(0,0,math.pi / 2)
183
				elseif part.Size.x < part.Size.y and part.Size.x < part.Size.z then
184
					print("if x < y")
185
					portaldoor.CFrame = portaldoor.CFrame * CFrame.fromEulerAnglesXYZ(math.pi / 2, 0, 0)
186
				elseif part.Size.z < part.Size.y and part.Size.z < part.Size.y then
187
					print("if z < y")
188
					portaldoor.CFrame = portaldoor.CFrame * CFrame.fromEulerAnglesXYZ(0, math.pi / 2, 0)
189
				end
190
				portaldoor.Position = projectile.Position
191
				projectile:destroy()
192
				for i = 1,18 do
193
					portaldoor.Size = portaldoor.Size + Vector3.new(0,0.3,0.3)
194
					wait()
195
				end
196
				local function tp(part)
197
					local hum = part.Parent:findFirstChild("Humanoid")
198
					if hum ~= nil and blueexists and orangeexists and not tping then
199
						tping = true
200
						local tor = part.Parent:findFirstChild("Torso")
201
						if tor then
202
							local velocityoftorso = tor.Velocity
203
							local blport = workspace:findFirstChild("OrangePortal")
204
							if blport then
205
								tor.CFrame = workspace.OrangePortal.CFrame
206
								tor.Velocity = workspace.OrangePortal.CFrame.rightVector * -velocityoftorso * 1.7
207
							end
208
						end
209
						wait(0.3)
210
						tping = false
211
					end
212
					if not hum and blueexists and orangeexists and not tping then
213
							tping = true
214
							local cube = part.Parent:findFirstChild("Cube")
215
							if cube then
216
								tping = true
217
								local velocityoftorso = cube.Velocity
218
								cube.CFrame = workspace.OrangePortal.CFrame
219
								cube.Velocity = workspace.OrangePortal.CFrame.rightVector * -velocityoftorso * 1.7
220
								wait(0.3)
221
								tping = false
222
							end
223
					end
224
					wait(0.3)
225
					tping = false
226
				end
227
				portaldoor.Touched:connect(tp)
228
			end
229
			projectile.Touched:connect(make)
230
		end
231
		if orange then
232
			Shoot:Play()
233
			local projectile1 = Instance.new("Part", workspace)
234
			projectile1.Size = Vector3.new(1,1,1)
235
			projectile1.BrickColor = BrickColor.new("Deep orange")
236
			projectile1.Shape = "Ball"
237
			projectile1.CanCollide = true
238
			projectile1.Anchored = false
239
			projectile1.Material = "Neon"
240
			local vel1 = Instance.new("BodyVelocity", projectile1)
241
			vel1.MaxForce = Vector3.new(math.huge,math.huge,math.huge)
242
			vel1.Velocity = mouse.Hit.lookVector * 80
243
			projectile1.Position = gun.CFrame.p
244
			wait(0.03)
245
			local function make1(part)
246
				local gr = part.Parent:findFirstChild("Part")
247
				local portaldoor = Instance.new("Part", workspace)
248
				portaldoor.Size = Vector3.new(1, 1, 1)
249
				portaldoor.BrickColor = BrickColor.new("Deep orange")
250
				portaldoor.Anchored = true
251
				portaldoor.Material = "Neon"
252
				portaldoor.Shape = "Cylinder"
253
				portaldoor.CanCollide = false
254
				if orangeexists == true then
255
					workspace.OrangePortal:destroy()
256
				end
257
				portaldoor.CFrame = part.CFrame
258
				if part.Size.y < part.Size.x and part.Size.y < part.Size.z then --a big help from Toxsikkilla
259
					print("if y < x")
260
					portaldoor.CFrame = portaldoor.CFrame * CFrame.fromEulerAnglesXYZ(0,0,math.pi / 2)
261
				elseif part.Size.x < part.Size.y and part.Size.x < part.Size.z then
262
					print("if x < y")
263
					portaldoor.CFrame = portaldoor.CFrame * CFrame.fromEulerAnglesXYZ(math.pi / 2, 0, 0)
264
				elseif part.Size.z < part.Size.y and part.Size.z < part.Size.y then
265
					print("if z < y")
266
					portaldoor.CFrame = portaldoor.CFrame * CFrame.fromEulerAnglesXYZ(0, math.pi / 2, 0)
267
				end
268
				portaldoor.Position = projectile1.Position
269
				projectile1:destroy()
270
				for i = 1,18 do
271
					portaldoor.Size = portaldoor.Size + Vector3.new(0,0.3,0.3)
272
					wait()
273
				end
274
				orangeexists = true
275
				portaldoor.Name = "OrangePortal"
276
				local function tp(part)
277
					local hum = part.Parent:findFirstChild("Humanoid")
278
					if hum ~= nil and blueexists and orangeexists and not tping then
279
						tping = true
280
						local tor = part.Parent:findFirstChild("Torso")
281
						if tor then
282
							local velocityoftorso = tor.Velocity
283
							local blport = workspace:findFirstChild("BluePortal")
284
							if blport then
285
								tor.CFrame = workspace.BluePortal.CFrame
286
								tor.Velocity = workspace.BluePortal.CFrame.rightVector * -velocityoftorso * 1.7
287
							end
288
						end
289
						wait(0.3)
290
						tping = false
291
					end
292
					if not hum and blueexists and orangeexists and not tping then
293
							tping = true
294
							local cube = part.Parent:findFirstChild("Cube")
295
							if cube then
296
								tping = true
297
								local velocityoftorso = cube.Velocity
298
								local blport = workspace:findFirstChild("BluePortal")
299
								if velocityoftorso.y < velocityoftorso.z and velocityoftorso.y < velocityoftorso.x then
300
									cube.Velocity = -velocityoftorso * 1.5
301-
game.Players.LocalPlayer.Character.Humanoid.Died:connect(deleterportalsondedth)
301+
302
										cube.CFrame = workspace.BluePortal.rightVector * -velocityoftorso * 1.7
303
									end
304
								end
305
								wait(0.3)
306
								tping = false
307
							end
308
							wait(0.3)
309
							tping = false
310
					end
311
					wait(0.3)
312
					tping = false
313
				end
314
				portaldoor.Touched:connect(tp)
315
			end
316
			projectile1.Touched:connect(make1)
317
		end
318
		
319
		for i = 0,1 , 0.3 do
320
			wait()
321
			lhandweld.C0 = lhandweld.C0 * CFrame.new():lerp(CFrame.Angles(0,0,-0.2),i)
322
			rhandweld.C0 = rhandweld.C0 * CFrame.new():lerp(CFrame.Angles(0,0,0.2),i)
323
		end
324
		for i = 0,1 , 0.3 do
325
			wait()
326
			lhandweld.C0 = lhandweld.C0 * CFrame.new():lerp(CFrame.Angles(0,0,0.2),i)
327
			rhandweld.C0 = rhandweld.C0 * CFrame.new():lerp(CFrame.Angles(0,0,-0.2),i)
328
		end
329
		using = false
330
	end
331
end
332
function remove(key)
333
	key = key:lower()
334
	if key == "r" then
335
		if blueexists or orangeexists or blueexists and orangeexists then
336
			workspace.OrangePortal:destroy()
337
			workspace.BluePortal:destroy()
338
			orangeexists = false
339
			blueexists = false
340
		end
341
	end
342
end
343
impacting = false
344
cubesp = false
345
function cubespawn(key)
346
	key = key:lower()
347
	if key == "c" then
348
		if cubesp then
349
			workspace.Cube:destroy()
350
		end
351
		cubesp = true
352
		local coobe = Instance.new("Part", workspace)
353
		coobe.Size = Vector3.new(2.774, 2.834, 2.804)
354
		coobe:BreakJoints()
355
		coobe.Position = game.Players.LocalPlayer.Character.Torso.Position
356
		coobe.Name = "Cube"
357
		local meh = Instance.new("SpecialMesh", coobe)
358
		meh.MeshId = "rbxassetid://464957313"
359
		meh.TextureId = "rbxassetid://464957325"
360
		meh.Scale = Vector3.new(0.8,0.8,0.8)
361
		local function sounds()
362
			if not impacting then
363
				impacting = true
364
				local impactspeed = math.random(0.9,1.1)
365
				impact.PlaybackSpeed = impactspeed
366
				impact:Play()
367
				wait(0.2)
368
				impacting = false
369
			end
370
		end
371
		coobe.Touched:connect(sounds)
372
	end
373
end
374
function deleterportalsondedth()
375
	if orangeexists or blueexists or blueexists and orangeexists then
376
		workspace.OrangePortal:destroy()
377
		workspace.BluePortal:destroy()
378
		if cubesp then
379
			workspace.Cube:destroy()
380
		end
381
	end
382
end
383
owner.Character.Humanoid.Died:connect(deleterportalsondedth)
384
mouse.KeyDown:connect(cubespawn)
385
mouse.Button1Down:connect(portal)
386
mouse.KeyDown:connect(changeportals)
387
mouse.KeyDown:connect(remove)