I’m working on a group door that teleports you to the other side and I’m having some difficulty with this - I simply edited a gamepass door that we had where it teleports you to the other side - and that one works completely fine.
However this one refuses to work for me when I edited it to make it work for group ranks.
Here’s the code:
local function WaitForChild(parent, childName)
assert(parent, "ERROR: WaitForChild: parent is nil")
while not parent:FindFirstChild(childName) do parent.ChildAdded:wait() end
return parent[childName]
end
local GamePassService = game:GetService('MarketplaceService')
local PlayersService = game:GetService('Players')
local VipDoor = script.Parent
local GamePassIdObject = script: WaitForChild('GamePassId')
local JustTouched = {}
local function TeleportToOtherSide(character, hitPart)
local bottomOfDoor = VipDoor.CFrame.p - Vector3.new(0, VipDoor.Size.Y / 2, 0)
local inFrontOfDoor = bottomOfDoor + VipDoor.CFrame.lookVector * 3
local behindDoor = bottomOfDoor - VipDoor.CFrame.lookVector * 3
local distanceToFront = (inFrontOfDoor - hitPart.Position).magnitude
local distanceToBack = (behindDoor - hitPart.Position).magnitude
if distanceToFront < distanceToBack then
character:MoveTo(behindDoor)
else
character:MoveTo(inFrontOfDoor)
end
end
local function OnTouched(otherPart)
if otherPart and otherPart.Parent and otherPart.Parent:FindFirstChild('Humanoid') then
local player = PlayersService:GetPlayerFromCharacter(otherPart.Parent)
local config = script.Configuration
if player and not JustTouched[player] then
JustTouched[player] = time()
if player:GetRankInGroup(config.GroupId.Value) >= config.RankId.Value then
TeleportToOtherSide(player.Character, otherPart)
end
end
end
end
local function RemoveOldTouches()
for player, touchTime in pairs(JustTouched) do
if time() > touchTime + 0.3 then
JustTouched[player] = nil
end
end
end
VipDoor.Touched:connect(OnTouched)
while true do
RemoveOldTouches()
wait(1/30)
end