Hi I’d Like To Help You!
First Go To Workspace And Insert Tools Name It PortalGun And Build The Portal Gun If You Done Put The Tools Inside The StarterPack. Then Insert Script Inside The Portal Gun Name It : ServerHandler. then Add This Code :
script.Parent:WaitForChild("MakePortalPart").OnServerEvent:Connect(function(player, cFrame, handle, mouse, portalPart, pos, otherPortalPart)
game.ReplicatedStorage.SayPortal:FireAllClients()
local tweenservice = game:GetService("TweenService")
local portalBall = Instance.new("Part", workspace)
local weld = Instance.new("WeldConstraint", portalBall)
portalBall.Shape = "Ball"
portalBall.CFrame = cFrame
portalBall.BrickColor = portalPart.TeleporterPart.BrickColor
portalBall.Material = Enum.Material.Neon
portalBall.Size = Vector3.new(1, 1, 1)
local portaltime = 0.1
local mousePosTween = tweenservice:Create(portalBall, TweenInfo.new(portaltime), {CFrame = CFrame.new(pos.X, pos.Y, pos.Z)})
mousePosTween:Play()
wait(portaltime)
portalBall:Destroy()
portalPart.TeleporterPart.Position = pos + Vector3.new(0, 3, 0)
if mouse == nil then
else
portalPart.TeleporterPart.Orientation = Vector3.new(mouse.Orientation.X, mouse.Orientation.Y, mouse.Orientation.Z)
end
local t1 = tweenservice:Create(portalPart.TeleporterPart, TweenInfo.new(0.1), {Size = game.ServerScriptService.PortalHolder.ModelBlue.Size})
local t2 = tweenservice:Create(otherPortalPart.TeleporterPart, TweenInfo.new(0.1), {Size = game.ServerScriptService.PortalHolder.ModelBlue.Size})
if portalPart.TeleporterPart.Size == game.ServerScriptService.PortalHolder.ModelBlue.Size then
portalPart.TeleporterPart.Size = Vector3.new(1, 1, 1)
wait()
t1:Play()
if otherPortalPart.TeleporterPart.Size == game.ServerScriptService.PortalHolder.ModelBlue.Size then
otherPortalPart.TeleporterPart.Size = Vector3.new(1, 1, 1)
wait()
t2:Play()
else
otherPortalPart.TeleporterPart.Size = Vector3.new(1, 1, 1)
wait()
t2:Play()
end
else
t1:Play()
end
if mouse == nil then
weld:Destroy()
elseif mouse:IsA("Part") then
weld.Part0 = portalPart.TeleporterPart
weld.Part1 = mouse
end
end)
script.Parent:WaitForChild("PlaySound").OnServerEvent:Connect(function(player)
script.Parent.Activated:Connect(function()
script.Parent.Fire:Play()
end)
end)
Then Insert Local Script Inside The PortalGun Name It : PortalScript. Then Add This Code :
local Camera = workspace.CurrentCamera
local Handle = script.Parent:WaitForChild("Handle")
local player = game.Players.LocalPlayer
local PortalLoadedIn = "BluePortal"
local BluePortal = workspace:WaitForChild(player.Name.."'s Portals").PortalBlue
local OranagePortal = workspace:WaitForChild(player.Name.."'s Portals").PortalOrange
local mouse = player:GetMouse()
local ani = script.Parent:WaitForChild("holdAnimation")
local currentCamera = workspace.CurrentCamera
local tweenService = game:GetService("TweenService")
local TipObject = script.Parent:WaitForChild("Tip")
local keys = false
local playAni = false
local walking = false
local walkingCF = CFrame.new()
local swayingCF = CFrame.new()
local UserInputService = game:GetService("UserInputService")
local playSound = script.Parent:WaitForChild("PlaySound")
player.CameraMode = Enum.CameraMode.LockFirstPerson
local RunService = game:GetService("RunService")
local run
script.Parent.Equipped:Connect(function()
local aniHumanoid
mouse.Icon = "rbxassetid://120192974"
keys = true
playAni=true
local viewmodel = script.Parent.Handle:Clone()
viewmodel.Parent = Camera
viewmodel.Transparency = 0
script.Parent.Handle.Transparency = 1
run = RunService.RenderStepped:Connect(function()
swayingCF = swayingCF:Lerp(CFrame.new(math.rad(game:GetService("UserInputService"):GetMouseDelta().X), math.rad(game:GetService("UserInputService"):GetMouseDelta().Y), 0), 0.1)
if viewmodel then
viewmodel.CFrame = Camera.CFrame * walkingCF * swayingCF * CFrame.new(1,-1.3,-3) * CFrame.Angles(-1,0,0)
viewmodel.CanCollide = false
end
if walking then
walkingCF = walkingCF:Lerp(CFrame.new(0.1*math.sin(tick() * 4), 0.1*math.sin(tick() * 6), 0), 0.1)
else
walkingCF = walkingCF:Lerp(CFrame.new(),0.1)
end
player.Character:WaitForChild("Humanoid").Running:Connect(function(speed)
if speed > 0 then
walking = true
else
walking = false
end
end)
end)
script.Parent.Activated:Connect(function()
playSound:FireServer()
if PortalLoadedIn == "BluePortal" then
script.Parent:WaitForChild("MakePortalPart"):FireServer(TipObject.CFrame, Handle, mouse.Target, BluePortal, mouse.Hit.p, OranagePortal)
game.ReplicatedStorage.SayPortal:FireServer(mouse.Hit.p)
wait(0.09)
PortalLoadedIn = "OrangePortal"
end
end)
script.Parent.Activated:Connect(function()
if PortalLoadedIn == "OrangePortal" then
script.Parent:WaitForChild("MakePortalPart"):FireServer(TipObject.CFrame, Handle, mouse.Target, OranagePortal, mouse.Hit.p, BluePortal)
wait(0.09)
PortalLoadedIn = "BluePortal"
end
end)
UserInputService.InputBegan:Connect(function(key)
if key.KeyCode == Enum.KeyCode.H then
if keys then
PortalLoadedIn = "OrangePortal"
end
end
if key.KeyCode == Enum.KeyCode.G then
if keys then
PortalLoadedIn = "BluePortal"
end
end
end)
while wait() do
if playAni then
aniHumanoid = player.Character.Humanoid:LoadAnimation(ani)
aniHumanoid:Play()
else
aniHumanoid:Stop()
end
end
end)
script.Parent.Unequipped:Connect(function()
mouse.Icon = ""
playAni = false
keys = false
if run then
run:Disconnect()
if Camera:FindFirstChild("Handle") then
Camera.Handle:Destroy()
end
end
end)
game.ReplicatedStorage.SayPortal.OnClientEvent:Connect(function()
game.StarterGui:SetCore("ChatMakeSystemMessage", {
Text = "{Server-Side, all players} Message = "..player.Name.." put a portal down! Watch out for his!";
Color = Color3.fromRGB(82, 203, 214);
Font = Enum.Font.SourceSans;
FontSize = Enum.FontSize.Size32;
})
end)
Then Add Remote Events Inside The PortalGun Name It: MakePortalPart
Ok Now Add Folder Inside ServerScriptService Name It : PortalHolder Then Add Script Inside The Folder Name It : PortalHandler then Add The Part You Want To Teleport Called TeleporterPart. Then Add The Teleporter Part Again Inside The Folder Name It : ModelBlue. Then Add A Script Inside Server Script Service Name It : portalCreate. Then Add This Code :
game.Players.PlayerAdded:Connect(function(player)
local portalfolder = game.ServerScriptService.PortalHolder:Clone()
portalfolder.Parent = workspace
portalfolder.Name = player.Name.."'s Portals"
end)
game.Players.PlayerRemoving:Connect(function(player)
if workspace:FindFirstChild(player.Name.."'s Portals") then
workspace:FindFirstChild(player.Name.."'s Portals"):Destroy()
end
end)
Then Move To Replicated Storage Insert Remote Events Name It : SayPortal.
This Is All My Explain I Hope This Help Full