You can write your topic however you want, but you need to answer these questions:
What do you want to achieve? Keep it simple and clear!
I have a script in a tool that allows the player to teleport to their mouse click position when pressing T. no i don’t want mobile support.
What is the issue? Include screenshots / videos if possible!
i’ve recently added “areas” into my game, where when you are in an area, it locally changes your Lighting.Atmosphere properties to something else. these “areas” are basically giant CanCollide off invisible parts when touching will toggle the property change. when using the teleport ability, no matter where you click, you just get teleported to the centre of the area.
What solutions have you tried so far? Did you look for solutions on the Developer Hub?
i cannot change the CanTouch or CanCollide property in the areas, as that would break the scripts. i am looking for maybe an attribute where if a physical instance has it, the teleport would go through it. code is below. any help appriciated!!
btw the code is a local script in the tool.
After that, you should include more details if you have any. Try to make your topic as descriptive as possible, so that it’s easier for people to help you!
local tool = script.Parent
local plr = game:GetService('Players').LocalPlayer
local mouse = plr:GetMouse()
mouse.KeyDown:Connect(function(key) --runs the function when a key is pressed
key = string.lower(key)
if key == "t" and tool.Parent == plr.Character then --only when the key "t" is pressed it will run
tool.Parent:moveTo(mouse.hit.Position)
end
end)
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local CollectionService = game:GetService("CollectionService")
local Player = Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local Raycastparams = RaycastParams.new()
Raycastparams.FilterType = Enum.RaycastFilterType.Exclude
local MaxTeleportDistance = 100
local PlayerMouse = Player:GetMouse()
UserInputService.InputBegan:Connect(function(input, gameProcessedEvent)
if input.KeyCode == Enum.KeyCode.T then
Raycastparams.FilterDescendantsInstances = CollectionService:GetTagged("TAG_NAME_HERE")
local mouseHit = PlayerMouse.Hit
local raycastResult = workspace:Raycast(PlayerMouse.Origin.Position, PlayerMouse.Origin.LookVector * MaxTeleportDistance, Raycastparams)
if raycastResult then
local hitPosition = raycastResult.Position
Character:SetPrimaryPartCFrame(CFrame.new(hitPosition))
end
end
end)
I think you’re looking for raycasts with RespectCanCollide on.
-- this goes to the other variables on top
local raycastParams = RaycastParams.new()
raycastParams.RespectCanCollide = true
-- this goes in your input function
local raycast = workspace:Raycast(mouse.UnitRay.Origin, mouse.UnitRay.Direction*1000, raycastParams)
-- if raycast hit something
if raycast then
tool.Parent:MoveTo(raycast.Position)
end
This code is assuming you’re using a client script. You’re gonna have to do the teleporting on the server side though, which you also didin’t do in your previous script. But that wasn’t part of the original question, and I’m sure you can figure it out yourself.
wow. didn’t expect to get a working answer first response. im just wondering, could you tell me how the script works? i just want to have a good look at this new script, and make sure it doesn’t create any additional bugs for my game.