ZonePlus v3.2.0 | Construct dynamic zones and effectively determine players and parts within their boundaries

I appreciate the new reports of potential performance problems, it gave me agency to write a lightweight zone module for my own use in prod–all I really needed it to do is do the most basic checks to see if a position is within a box zone, I don’t need any bloat. Though I still think zoneplus is good for those getting started.

In any case, i believe sharing my module could help some people–either to use it or develop their own–it follows similar syntax of zoneplus, but there are new things to be aware of and much of zoneplus’s functions do not exist. So if you intend to use it, you’ll need to be able to comprehend the module script–feel free to code review or dm

4 Likes

Mine is gonna be sooo bloated :smirk_cat:

It seems like it just grabs the players at the start and never changes them.
So things like LoadCharacter are completely broken.
Or maybe im just wrong

There is a possibility that the behavior of LoadCharacter or methods relating to HumanoidDescription could interfere with this module.

when i disconnect the connections make sure to delete the bindable event too please

hey all,

im having trouble navigating this module.

I’m trying to make a sound system and I have the sound ids in the zone part, but I’m not sure how to get that sound id. Is there some way to get the properties of the part?

I have custom characters in my game and for some reason .playerEntered or .playerExited does not fire on players. However .localPlayerEntered does.

The CanTouch and CanQuery properties are toggled on as well on the parts of the character. I have looked around for solution everywhere however I found little to no help to fix this issue.

I would appreciate any help. Thank you.

Customer characters aren’t the child <Player>.Character, hence why it doesn’t fire.

You can modify the code to work with it if you’re wanting to.

1 Like

Yes they are, I have already figured out the issue.

My custom character needed to have a Head part for the zone module to detect it, I’m not sure exactly why but thankfully it all works just fine now.

Thank you for the reply I appreciate it!

1 Like

I have this issue aswell for my custom characters

made a temporary fix dont know if it’ll break anything but works for me. replace line 44 in the tracker module to this:

1 Like

This is really neat! you should post this in its own topic. Its really super wonderful. Great alternative to the currently (Unusable) zone module.

1 Like

This works perfectly except for a major inconvience while setting up.

  1. The module “NetSignal” needs a folder in replicated storage called “NetworkEvents”, also needs a “Converter” module “modules.Utility.Converter” and among other things is practically unusable without these variables (Especially the module “Converter”).

Im pretty sure this resource has retired (Last update in repo in 2021).

Rip Zone! Such a good resource…

My new module SimpleZone has support for Zones inside Zones, however you won’t exit the bigger Zone, you’ll just enter the inner Zone. However, I think by setting the .Query callback to a custom one where you only consider players that arent in other zones, you can make the player exit the outer zone too!

1 Like

Hello, I’m having an issue with ZonePlus when using it with custom characters. Basically ZonePlus responds to all functions such as playerEntered and playerExited with my default roblox character, same thing happens with all other humanoid characters. However, the problem begins when I use a custom character that only contains HumanoidRootPart, Humanoid and a MeshPart (It’s basically an object, for example: a coffee cup).
Somehow ZonePlus doesn’t detect it as a player and I have been trying to solve this 2 days ago and no solutions yet, does ZonePlus depend of a specific part of the character or something to run the functions?

Yes, the answer was “ZonePlus depends of a specific part of the character to run the function”. I simply added a part to the custom character and named it Head, thanks to that now the script detects it as a player.

the zones currently dont fire their events after the players death (in a localscript), would there be any workaround to this apart from moving everything to a serverscript.
Thanks

Hello! I’ve run into a small issue with the autocomplete. I bet a lot of other people are having this issue. Requiring the module has the return type of any, which is inconvenient. The problematic code is as follows:

local referenceLocation = (game:GetService("RunService"):IsClient() and "Client") or "Server"
local referencePresent = referenceObject and referenceObject:FindFirstChild(referenceLocation)
if referencePresent then
	return require(referenceObject.Value)
end

The module returns something else before the last line, which confuses the type checker. They are going to be the same value, but it won’t have the correct type. Here’s how I fixed it:

local referenceLocation = (game:GetService("RunService"):IsClient() and "Client") or "Server"
local referencePresent = referenceObject and referenceObject:FindFirstChild(referenceLocation)

local Zone = {}
Zone.__index = Zone

if not referencePresent then
	ZonePlusReference.addToReplicatedStorage()
else
	return require(referenceObject.Value) :: typeof(Zone)
end

Just thought I would share this in case you wanted to merge this fix!


I always knew about ZonePlus, but I never needed it until now. Thanks for making great stuff! :heart:

having trouble detecting item enter/exit. No errors during :trackitem, but itemEntered and itemExited are not firing

	local parts = attackZone:getParts()
	local characters = HitboxHandler.FilterCharacters(parts)
	print(characters)
	for _, character in characters do
		print('tracking ' .. character.Name)
		attackZone:trackItem(character)
	end
	
	table.insert(
		connections,
		attackZone.itemEntered:Connect(function(item)
			print(item.Name .. " entered")
		end)
	)
	
	table.insert(
		connections,
		attackZone.itemExited:Connect(function(item)
			print(item.Name .. " exited")
		end)
	)```