Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

How do I add Vector3 to Region3?

I'm working on a game where random disasters are generated through a module script, and I'm currently making a flood. However, since the touch event isn't quite the best for this, I am considering region3. I want to make the size of the region3 rise every 2 seconds, however, I can't seem to add a Vector3 to the Region3. I have one error in the output.

Disasters (Module script):

> local TweenService = game:GetService("TweenService")
> local RoundEnded = game.ReplicatedStorage.RoundEnded
> local Disaster = {}
> Disaster.__index = Disaster
> 
> function Disaster.new(DisasterType)
> 	local self = {}
> 	setmetatable(self, Disaster)
> 	self.DisasterType = DisasterType
> 	
> 	
> 	if self.DisasterType == "Flood" then
> 		local floodRegion = Region3.new(workspace.Baseplate.Position - (workspace.Baseplate.Size/2), workspace.Baseplate.Position + (workspace.Baseplate.Size/2))
> 		self.Flood = Instance.new("Part")
> 		self.Flood.Position = workspace.Baseplate.Position + Vector3.new(0,0.5,0)
> 		self.Flood.Size = floodRegion.Size
> 		self.Flood.Name = "Flood"
> 		self.Flood.Anchored = true
> 		self.Flood.CanCollide = false
> 		self.Flood.Transparency = 1
> 		self.Flood.Parent = workspace
> 			
> 		for round = 30, 1, -1 do
> 			floodRegion.Size += Vector3.new(0,1,0)
> 			self.Flood.Size = floodRegion.Size
> 			workspace.Terrain:FillBlock(self.Flood.CFrame, self.Flood.Size, Enum.Material.Water)
> 			if self.Flood.Size.X > 18 then
> 				print("1")
> 			end
> 			wait(2)
> 		end
> 		
> 	end
> 	return self
> end
> 
> function Disaster:GetDisaster()
> 	local disasters = {"Flood"}
> 	local rng = math.random(1,#disasters)
> 	
> 	if rng == 1 then
> 		Disaster.new(disasters[1])
> 		return disasters[1]
> 	end
> 	
> 	return disasters
> end
> 
> function Disaster:RemoveDisaster()
> 	self.Parent = nil
> end
> 
> return Disaster
> 

Error message:

Size cannot be assigned to - Server - Disasters:24

As always, thank you for your time and I appreciate any help.

1 answer

I don't know if there's a better way to do it other than to apply the size to the "flood" part and recalculate the region. Keep on trying to find better info tho, as I do not know if this is the best way to do it.

 local floodRegion = Region3.new(workspace.Baseplate.Position - 	(workspace.Baseplate.Size/2), workspace.Baseplate.Position + (workspace.Baseplate.Size/2))
	self.Flood = Instance.new("Part")
	 self.Flood.Position = workspace.Baseplate.Position + Vector3.new(0,0.5,0)
	self.Flood.Size = floodRegion.Size
	self.Flood.Name = "Flood"
	self.Flood.Anchored = true
	 self.Flood.CanCollide = false
	self.Flood.Transparency = 1
	self.Flood.Parent = workspace

 	for round = 30, 1, -1 do
		self.Flood.Size += Vector3.new(0, 1, 0)
		self.Flood.Position += Vector3.new(0, 0.5, 0)

		floodRegion = Region3.new(workspace.Baseplate.Position - 	(workspace.Baseplate.Size/2), workspace.Baseplate.Position + (workspace.Baseplate.Size/2))
		workspace.Terrain:FillBlock(self.Flood.CFrame, self.Flood.Size, 		  Enum.Material.Water) if self.Flood.Size.X > 18 then
		print("1")
	end
	wait(2)

Please let me know if this works properly, as I haven't tested it.

Hopefully I helped as much as I could.

1 comment

0

I definetly think there's a better way to do this however, because recalculating region3 every second sounds a bit unoptimised.

This discussion is preserved as it was. New answers, comments, and votes are closed.