Run it
Copy the script and paste it into your executor.
Players = :()
Workspace = :()
Debris = :()
LocalPlayer = Players.LocalPlayer
WEAPON_ASSET_ID =
PORTAL_ASSET_ID =
TOOL_ICON_ID =
TOOL_NAME =
NOME_PORTAL_1 =
NOME_PORTAL_2 =
POSITION_OFFSET = .(, -, -)
ROTATION_OFFSET = .(.(), .(), .())
cliqueCount =
portal1 =
portal2 =
cooldownTeleport =
executandoDisparo =
()
pGui = LocalPlayer:()
sg = pGui:() .()
sg.Name =
sg.ResetOnSpawn =
sg.Parent = pGui
frame = .()
frame.Size = .(, , , )
frame.Position = .(, -, , -)
frame.BackgroundColor3 = .(, , )
frame.BorderSizePixel =
frame.Parent = sg
corner = .()
corner.CornerRadius = .(, )
corner.Parent = frame
label = .()
label.Size = .(, , , )
label.BackgroundTransparency =
label.Text =
label.TextColor3 = .(, , )
label.TextSize =
label.Font = .Font.SourceSansBold
label.Parent = frame
.(, ()
sg sg:()
)
(part)
part:()
part.Anchored =
part.CanCollide =
part.CanTouch =
part.CanQuery =
part.Massless =
part.CustomPhysicalProperties = PhysicalProperties.(, , , , )
(instancia)
parts = {}
instancia:()
.(parts, instancia)
(instancia)
_, child (instancia:())
child:()
.(parts, child)
(child)
#parts >
mainPart = parts[]
i = , #parts
weld = .()
weld.Part0 = mainPart
weld.Part1 = parts[i]
weld.Parent = mainPart
(cframeTarget, nomePortal)
success, result = (()
:( .. PORTAL_ASSET_ID)[]
)
portalObj =
success result
portalObj = result
portalObj = .()
portalObj.Size = .(, , )
portalObj.Color = .(, , )
portalObj.Material = .Material.Neon
portalObj.Name = nomePortal
_, child (portalObj:())
child:() child:() child:() child:() child:()
child:()
portalObj:()
portalObj:(cframeTarget)
_, child (portalObj:())
child:()
child.Anchored =
child.CanCollide =
child.CanTouch =
portalObj:()
portalObj.CFrame = cframeTarget
portalObj.Anchored =
portalObj.CanCollide =
portalObj.CanTouch =
portalObj.Parent = Workspace
portalObj
(portal)
portal
portal:()
portal:()
portal:()
portal.CFrame
()
portal1 portal2
(portalOrigem, obterPortalDestino)
partsTarget = {}
portalOrigem:()
.(partsTarget, portalOrigem)
_, v (portalOrigem:())
v:()
.(partsTarget, v)
_, part (partsTarget)
part.Touched:((hit)
cooldownTeleport
char = hit.Parent
hrp = char:()
hrp char == LocalPlayer.Character
destPortal = ()
destPortal
destCFrame = (destPortal)
destCFrame
cooldownTeleport =
hrp.CFrame = destCFrame * .(, , -)
.()
cooldownTeleport =
)
(portal1, () portal2 )
(portal2, () portal1 )
(etapa)
char = LocalPlayer.Character
char char:()
executandoDisparo =
mouse = LocalPlayer:()
targetPos = mouse.Hit mouse.Hit.Position (char.HumanoidRootPart.CFrame * .(, , -)).Position
startPos = char.HumanoidRootPart.Position + .(, , )
direction = (targetPos - startPos).Unit
bola = .()
bola.Shape = .PartType.Ball
bola.Size = .(, , )
bola.Color = .(, , )
bola.Material = .Material.Neon
bola.CanCollide =
bola.Anchored =
bola.CFrame = .(startPos, startPos + direction)
bv = .()
bv.MaxForce = .(.huge, .huge, .huge)
bv.Velocity = direction *
bv.Parent = bola
bola.Parent = Workspace
impactoProcessado =
conect =
(hitCFrame)
impactoProcessado
impactoProcessado =
conect
conect:()
bola bola.Parent
bola:()
etapa ==
portal1 portal1:()
portal1 = (hitCFrame, NOME_PORTAL_1)
etapa ==
portal2 portal2:()
portal2 = (hitCFrame, NOME_PORTAL_2)
()
executandoDisparo =
.(, ()
impactoProcessado bola bola.Parent
finalCFrame = .(bola.Position, bola.Position + direction)
(finalCFrame)
)
bola.Touched:((hit)
hit hit:(char) hit.Name ~= NOME_PORTAL_1 hit.Name ~= NOME_PORTAL_2
raycastParams = RaycastParams.()
raycastParams.FilterDescendantsInstances = {char, bola}
raycastParams.FilterType = .RaycastFilterType.Exclude
result = Workspace:(bola.Position, direction * , raycastParams)
surfaceNormal = result result.Normal .(, , )
hitPos = result result.Position bola.Position
finalCFrame = .(hitPos + (surfaceNormal * ), hitPos + surfaceNormal) * .(.(), , )
(finalCFrame)
)
conect = :().Heartbeat:(()
impactoProcessado bola bola.Parent
conect conect:()
raycastParams = RaycastParams.()
raycastParams.FilterDescendantsInstances = {char, bola}
raycastParams.FilterType = .RaycastFilterType.Exclude
result = Workspace:(bola.Position, direction * , raycastParams)
result
conect conect:()
finalCFrame = .(result.Position + (result.Normal * ), result.Position + result.Normal) * .(.(), , )
(finalCFrame)
)
()
executandoDisparo
cliqueCount = cliqueCount +
cliqueCount ==
executandoDisparo =
()
cliqueCount ==
executandoDisparo =
()
cliqueCount >=
portal1 portal1:() portal1 =
portal2 portal2:() portal2 =
cliqueCount =
()
backpack = LocalPlayer:()
character = LocalPlayer.Character LocalPlayer.CharacterAdded:()
_, item (backpack:())
item.Name == TOOL_NAME item.Name == item.Name ==
item:()
_, item (character:())
item.Name == TOOL_NAME item.Name == item.Name ==
item:()
tool = .()
tool.Name = TOOL_NAME
tool.TextureId = .. (TOOL_ICON_ID)
tool.RequiresHandle =
handle = .()
handle.Name =
handle.Size = .(, , )
handle.Transparency =
(handle)
handle.Parent = tool
tool.Parent = backpack
modelo3D =
tool.Equipped:(()
char = LocalPlayer.Character
char
success, result = (()
:( .. WEAPON_ASSET_ID)[]
)
success result
result:()
visualContainer = .()
visualContainer.Name =
_, child (result:())
child:() child:() child:()
child.Parent = visualContainer
result:()
modelo3D = visualContainer
modelo3D = result
(modelo3D)
rightHand = char:() char:()
rightHand
offsetCFrame = .(POSITION_OFFSET) * ROTATION_OFFSET
mainPart = modelo3D:() (modelo3D.PrimaryPart modelo3D:()) modelo3D
mainPart
modelo3D:()
modelo3D:(rightHand.CFrame * offsetCFrame)
mainPart.CFrame = rightHand.CFrame * offsetCFrame
weldToHand = .()
weldToHand.Part0 = rightHand
weldToHand.Part1 = mainPart
weldToHand.Parent = mainPart
modelo3D.Parent = char
)
tool.Activated:(()
()
)
tool.Unequipped:(()
modelo3D
modelo3D:()
modelo3D =
)
()
pGui = LocalPlayer:()
portaisEncontrados = {}
_, obj (Workspace:())
obj.Name == NOME_PORTAL_1 obj.Name == NOME_PORTAL_2 obj.Name == obj.Name ==
.(portaisEncontrados, obj)
totalPortais = #portaisEncontrados
redGui = .()
redGui.Name =
redGui.ResetOnSpawn =
redGui.Parent = pGui
frameRed = .()
frameRed.Size = .(, , , )
frameRed.Position = .(, -, , -)
frameRed.BackgroundColor3 = .(, , )
frameRed.BorderSizePixel =
frameRed.Parent = redGui
corner = .()
corner.CornerRadius = .(, )
corner.Parent = frameRed
lblStatus = .()
lblStatus.Size = .(, , , )
lblStatus.BackgroundTransparency =
lblStatus.Text = .. totalPortais
lblStatus.TextColor3 = .(, , )
lblStatus.TextSize =
lblStatus.Font = .Font.SourceSansBold
lblStatus.Parent = frameRed
.()
totalPortais >
i, pObj (portaisEncontrados)
lblStatus.Text = .. i .. .. totalPortais
pObj:()
.()
redGui:()
()
()
()
pGui = LocalPlayer:()
mainGui = .()
mainGui.Name =
mainGui.ResetOnSpawn =
mainGui.Parent = pGui
frame = .()
frame.Size = .(, , , )
frame.Position = .(, -, , -)
frame.BackgroundColor3 = .(, , )
frame.BorderSizePixel =
frame.Parent = mainGui
corner = .()
corner.CornerRadius = .(, )
corner.Parent = frame
title = .()
title.Size = .(, , , )
title.BackgroundTransparency =
title.Text =
title.TextColor3 = .(, , )
title.TextSize =
title.Font = .Font.SourceSansBold
title.Parent = frame
bugs = .()
bugs.Size = .(, , , )
bugs.Position = .(, , , )
bugs.BackgroundTransparency =
bugs.Text =
bugs.TextColor3 = .(, , )
bugs.TextSize =
bugs.Font = .Font.SourceSansBold
bugs.Parent = frame
btnOk = .()
btnOk.Size = .(, , , )
btnOk.Position = .(, -, , -)
btnOk.BackgroundColor3 = .(, , )
btnOk.Text =
btnOk.TextColor3 = .(, , )
btnOk.Font = .Font.SourceSansBold
btnOk.TextSize =
btnOk.Parent = frame
btnCorner = .()
btnCorner.CornerRadius = .(, )
btnCorner.Parent = btnOk
btnOk.MouseButton1Click:(()
mainGui:()
()
)
()Portal gun Update 1.1 Update: Bugs fixed ✅ Image of the changed inventory item ✅ Bug fixed: now when you click on the sky with the portal, the script waits 3 seconds and then opens the portal high up Image of the changed inventory item: the item has been changed.

Universal