I want the portal to teleport any character within it’s field to a random tile. but it doesn’t work when I try do it. To make sure the portal is activated every round, I have a module script clone the disabled script to the portal model before enabling it. I have no idea what so ever what could be causing the issue but I’d appreciate help on this.
Thanks
Region3 Code:
function CreateRegion3(Part)
return Region3.new(Part.Position-(Part.Size/2),Part.Position+(Part.Size/2))
end
function SelectTiles()
local Tiles = workspace:WaitForChild("SpleefMap"):GetDescendants()
local ActualTiles = {}
for i, v in pairs(Tiles) do
if v:IsA("Part") then
table.insert(ActualTiles,#ActualTiles+1, v)
end
end
return ActualTiles[math.random(1, #ActualTiles)]
end
local r3 = CreateRegion3(script.Parent)
while wait() do
local partsInR3 = workspace:FindPartsInRegion3(r3, script.Parent, math.huge)
local ValidCharacters = {}
for _, part in pairs(partsInR3) do
for _, part in pairs(partsInR3) do
if part.Parent:FindFirstChild("Humanoid") ~= nil and part.Parent:IsA("Model") then
table.insert(ValidCharacters, #ValidCharacters +1, part.Parent)
end
end
end
for _pos, plr in pairs(ValidCharacters) do
local hrp = game.Players:GetPlayerFromCharacter(plr).Character:WaitForChild("HumanoidRootPart")
local tile = SelectTiles()
if hrp then
hrp.Position = tile.Position + Vector3.new(0,3,0)
wait(1)
table.remove(ValidCharacters, _pos)
if script.Parent then
script.Parent:Destroy()
end
end
end
end
I can tell it isn’t getting to the script.Parent:Destroy() part as it isn’t destroying the model once within it.
Relevant Module Section:
function Portal()
local PositionY = 63.528
local A = {}
for i = 1, 14 do
local Tile = table.insert(A, #A+1, SelectTiles())
end
for i, v in pairs(A) do
local Clone = game.ServerStorage.Disasters.Portal:Clone()
local scriptC = script.Script:Clone()
scriptC.Parent = Clone
scriptC.Disabled = false
Clone.Parent = workspace
Clone.Position = Vector3.new(v.Position.X, PositionY, v.Position.Z)
end
end
try debugging the script by adding print statements in every big thing it does such as every for statement and every if statement and then you can see where it goes wrong if one of the prints don’t print! like this:
Region3 Code:
function CreateRegion3(Part)
print("Returned: " .. Part.Position-(Part.Size/2),Part.Position+(Part.Size/2))
return Region3.new(Part.Position-(Part.Size/2),Part.Position+(Part.Size/2))
end
function SelectTiles()
local Tiles = workspace:WaitForChild("SpleefMap"):GetDescendants()
local ActualTiles = {}
for i, v in pairs(Tiles) do
if v:IsA("Part") then
table.insert(ActualTiles,#ActualTiles+1, v)
print("Inserted: ".. v .. "into position: " .. #ActualTiles+1 .. "in table: " .. ActualTiles)
end
end
return ActualTiles[math.random(1, #ActualTiles)]
end
local r3 = CreateRegion3(script.Parent)
while wait() do
local partsInR3 = workspace:FindPartsInRegion3(r3, script.Parent, math.huge)
local ValidCharacters = {}
for _, part in pairs(partsInR3) do
for _, part in pairs(partsInR3) do
if part.Parent:FindFirstChild("Humanoid") ~= nil and part.Parent:IsA("Model") then
table.insert(ValidCharacters, #ValidCharacters +1, part.Parent)
print("Inserted: " .. part.Parent .. "into position: " .. #ValidCharacters+1 .. "of table: " .. ValidCharacters)
end
end
end
for _pos, plr in pairs(ValidCharacters) do
local hrp = game.Players:GetPlayerFromCharacter(plr).Character:WaitForChild("HumanoidRootPart")
print("Set 'hrp' to " .. game.Players:GetPlayerFromCharacter(plr).Character:WaitForChild("HumanoidRootPart"))
local tile = SelectTiles()
if hrp then
hrp.Position = tile.Position + Vector3.new(0,3,0)
print("Set 'hrp.Position' to " .. tile.Position + Vector3.new(0,3,0))
wait(1)
table.remove(ValidCharacters, _pos)
print("Removed: " .. _pos .. " from table: " .. ValidCharacters)
if script.Parent then
script.Parent:Destroy()
print("Destroyed: " .. script.Parent)
end
end
end
end
Module Script Code:
function Portal()
local PositionY = 63.528
local A = {}
for i = 1, 14 do
--// This local Tile variable seems irrelevant. maybe just try the table.insert
local Tile = table.insert(A, #A+1, SelectTiles())
end
for i, v in pairs(A) do
local Clone = game.ServerStorage.Disasters.Portal:Clone()
local scriptC = script.Script:Clone()
scriptC.Parent = Clone
scriptC.Disabled = false
Clone.Parent = workspace
Clone.Position = Vector3.new(v.Position.X, PositionY, v.Position.Z)
end
end