How do I optimize my Region3 player detection?
Asked by
4 years ago Edited 4 years ago
I'm trying to make a mock auto duels for practice, as the applicability of using Region3s extends far beyond that scope. The issue I'm having is that the system has troubles detecting the player's character, and, probably more consistently, detecting when the character leaves the region.
Server Script:
01 | local Players = game:GetService( "Players" ) |
03 | local Arena = workspace.Arena |
04 | local Room = Arena.Room |
05 | local Spawns = Arena.Spawns |
06 | local Pads = Arena.Pads |
07 | local StatusBoard = Arena.StatusBoard |
11 | for i,v in pairs (Pads.Team 1 Pads:GetChildren()) do |
13 | Regions [ i ] = { Pad = v,Area = Region 3. new(SelectedPad.Position,Vector 3. new(SelectedPad.Position.X,SelectedPad.Position.Y + 12.9 ,SelectedPad.Position.Z)) } |
16 | for i,v in pairs (Pads.Team 2 Pads:GetChildren()) do |
18 | Regions [ i + 3 ] = { Pad = v,Area = Region 3. new(SelectedPad.Position,Vector 3. new(SelectedPad.Position.X,SelectedPad.Position.Y + 12.9 ,SelectedPad.Position.Z)) } |
23 | for i,v in pairs (Regions) do |
24 | local Parts = workspace:FindPartsInRegion 3 (v.Area,Pads, math.huge ) |
25 | for _,Part in pairs (Parts) do |
26 | local Character = Players:GetPlayerFromCharacter(Part.Parent) |
28 | v.Pad.BrickColor = BrickColor.new( "Really red" ) |
30 | v.Pad.BrickColor = BrickColor.new( "Medium stone grey" ) |
As I mentioned, the above code does work. It simply doesn't work well, and I'm unsure of what else I can do to optimize it. Any help would be greatly appreciated.
Edited Code
01 | local Players = game:GetService( "Players" ) |
03 | local Arena = workspace.Arena |
04 | local Room = Arena.Room |
05 | local Spawns = Arena.Spawns |
06 | local Pads = Arena.Pads |
07 | local StatusBoard = Arena.StatusBoard |
12 | Players.PlayerAdded:Connect( function (Player) |
13 | Player.CharacterAdded:Connect( function (Character) |
14 | local Root = Character:WaitForChild( "HumanoidRootPart" ) |
15 | if not PlayerRoots [ Root ] then |
16 | table.insert(PlayerRoots,Root) |
19 | Player.CharacterRemoving:Connect( function (Character) |
20 | local Root = Character:WaitForChild( "HumanoidRootPart" ) |
21 | for i,v in pairs (PlayerRoots) do |
23 | table.remove(PlayerRoots,i) |
29 | for i,v in pairs (Pads.Team 1 Pads:GetChildren()) do |
31 | Regions [ i ] = { Pad = v,Area = Region 3. new(SelectedPad.Position,Vector 3. new(SelectedPad.Position.X,SelectedPad.Position.Y + 12.9 ,SelectedPad.Position.Z)) } |
34 | for i,v in pairs (Pads.Team 2 Pads:GetChildren()) do |
36 | Regions [ i + 3 ] = { Pad = v,Area = Region 3. new(SelectedPad.Position,Vector 3. new(SelectedPad.Position.X,SelectedPad.Position.Y + 12.9 ,SelectedPad.Position.Z)) } |
41 | for i,v in pairs (Regions) do |
42 | local Parts = workspace:FindPartsInRegion 3 WithWhiteList(v.Area,PlayerRoots, math.huge ) |
43 | if #Parts = = 0 and v.Pad.BrickColor = = BrickColor.new( "Really red" ) then |
44 | v.Pad.BrickColor = BrickColor.new( "Medium stone grey" ) |
46 | for _,Part in pairs (Parts) do |
47 | local Player = Players:GetPlayerFromCharacter(Part.Parent) |
49 | v.Pad.BrickColor = BrickColor.new( "Really red" ) |
51 | v.Pad.BrickColor = BrickColor.new( "Medium stone grey" ) |