Tweening zone problems

Hey! I’m trying to make a zone that tweens automatically, after you use a command (say !startzone in the chat, if you are on the whitelist). It basically works like Fortnite. It tweens only a part, then stops. After some time, it tweens again. It repeats this process 20 times, until its finished fully.

Obviously, as there is a Roblox scale limit, I’m making it via multiple parts, that are being cloned.

However, there the issue comes. I need to position the newly cloned parts, so that they are in front of the already tweened zone parts, basically. I am able to do this for the first time, as I will just change the position based off of the part behind it, but I’m not sure how to do it on every newly cloned part.

ServerScript:

local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local RS = game:GetService("ReplicatedStorage")
local AnnouncementEvent = RS:WaitForChild("ZoneAnnouncement")
local SoundService = game:GetService("SoundService")
local AnnouncementSound = SoundService:WaitForChild("ZoneAnnouncement")
local SS = game:GetService("ServerStorage")
local ModelFolder = workspace:WaitForChild("Zone")
local ZoneFolder = SS:WaitForChild("ZoneParts")

local zoneCount = 0

local zone1 = ModelFolder:WaitForChild("Zone1")
local zone2 = ModelFolder:WaitForChild("Zone2")
local zone3 = ModelFolder:WaitForChild("Zone3")
local zone4 = ModelFolder:WaitForChild("Zone4")

local part1 = ZoneFolder:WaitForChild("1")
local part2 = ZoneFolder:WaitForChild("2")
local part3 = ZoneFolder:WaitForChild("3")
local part4 = ZoneFolder:WaitForChild("4")

local whitelist = {"y_acines";"SwornStallions";"witchdefence123";"atxmiczz";"Necrosial";"syncouI";"Emirati_an";"austri_an";"Afgh_an";"Nyxifier"}

local Tween_Info = TweenInfo.new(5,Enum.EasingStyle.Linear,Enum.EasingDirection.Out,0,false,0)

local tweenInfo1 = {
	Size = zone1.Size + Vector3.new(0,0,399.80675);
	Position = zone1.Position - Vector3.new(199.903375,0,0)
}
local tween1 = TweenService:Create(zone1,Tween_Info,tweenInfo1)

local tweenInfo2 = {
	Size = zone2.Size + Vector3.new(0,0,399.80675);
	Position = zone2.Position - Vector3.new(199.903375,0,0)
}
local tween2 = TweenService:Create(zone2,Tween_Info,tweenInfo2)

local tweenInfo3 = {
	Size = zone3.Size + Vector3.new(0,0,399.80675);
	Position = zone3.Position - Vector3.new(199.903375,0,0)
}
local tween3 = TweenService:Create(zone3,Tween_Info,tweenInfo3)

local tweenInfo4 = {
	Size = zone4.Size + Vector3.new(0,0,399.80675);
	Position = zone4.Position - Vector3.new(199.903375,0,0)
}
local tween4 = TweenService:Create(zone4,Tween_Info,tweenInfo4)

Players.PlayerAdded:Connect(function(Player)
	Player.Chatted:Connect(function(Message)
		local Words = string.split(Message, " ")
		if Words[1] == "!startzone" then
			if table.find(whitelist, Player.Name) then
				print("Started the zone!")
				AnnouncementEvent:FireAllClients()
				AnnouncementSound:Play()
				zone1.Transparency = 0.2
				zone2.Transparency = 0.2
				zone3.Transparency = 0.2
				zone4.Transparency = 0.2
				tween1:Play()
				tween2:Play()
				tween3:Play()
				tween4:Play()
				zoneCount += 1
				while wait(10) do
					if zoneCount > 0 and zoneCount < 20 then
						local clone1 = part1:Clone()
						local clone2 = part2:Clone()
						local clone3 = part3:Clone()
						local clone4 = part4:Clone()
						clone1.Parent = ModelFolder
						clone2.Parent = ModelFolder
						clone3.Parent = ModelFolder
						clone4.Parent = ModelFolder
						
						clone1.Position = clone1.Position - Vector3.new(399.80675,0,0)
						clone2.Position = clone2.Position - Vector3.new(399.80675,0,0)
						clone3.Position = clone3.Position - Vector3.new(399.80675,0,0)
						clone4.Position = clone4.Position - Vector3.new(399.80675,0,0)
						
						local newTweenInfo1 = {
							Size = clone1.Size + Vector3.new(0,0,399.80675);
							Position = clone1.Position - Vector3.new(199.903375,0,0)
						}
						local newTween1 = TweenService:Create(clone1,Tween_Info,newTweenInfo1)
						
						local newTweenInfo2 = {
							Size = clone2.Size + Vector3.new(0,0,399.80675);
							Position = clone2.Position - Vector3.new(199.903375,0,0)
						}
						local newTween2 = TweenService:Create(clone2,Tween_Info,newTweenInfo2)
						
						local newTweenInfo3 = {
							Size = clone3.Size + Vector3.new(0,0,399.80675);
							Position = clone3.Position - Vector3.new(199.903375,0,0)
						}
						local newTween3 = TweenService:Create(clone3,Tween_Info,newTweenInfo3)
						
						local newTweenInfo4 = {
							Size = clone4.Size + Vector3.new(0,0,399.80675);
							Position = clone4.Position - Vector3.new(199.903375,0,0)
						}
						local newTween4 = TweenService:Create(clone4,Tween_Info,newTweenInfo4)
						
						newTween1:Play()
						newTween2:Play()
						newTween3:Play()
						newTween4:Play()
						
						zoneCount += 1
					elseif zoneCount == 20 then
						print("Zone shrining ended!")
						break
					end
				end
			else
				print("You're not allowed to use this command!")
			end
		end
	end)
end)

LocalScript:

local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local PlayerGUI = LocalPlayer.PlayerGui
local RS = game:GetService("ReplicatedStorage")
local Event = RS:WaitForChild("ZoneAnnouncement")

Event.OnClientEvent:Connect(function()
	local GUI = PlayerGUI:WaitForChild("ZoneAnnouncement")
	local HolderFrame = GUI:WaitForChild("Holder")
	local Text = HolderFrame:WaitForChild("Announcement")
	
	HolderFrame.Visible = true
	HolderFrame:TweenPosition(UDim2.new(0.463,0,0.44,0),"Out","Quad",0.7,true)
	wait(3)
	HolderFrame:TweenPosition(UDim2.new(0.463,0,0.3,0),"Out","Quad",0.7,true)
	wait(0.7)
	HolderFrame.Visible = false
end)

You can use the Model Position X, Y, Z


local tween1 = TweenService:Create(zone1, { 
  Position = Vector3.new(
       0,
       0,
       zone1.Position.Z + 2, -- For exemple
  ) 
})
1 Like

Yes, I know. The problem is that I would need to increase this every time tho, seen that the clonable parts (from ServerStorage) don’t get positioned automatically, but they keep cloning at the same position, while the zone keeps scaling more and more.

I’m not sure how to do that.

Alright, so… I actually managed to fix it by myself, it was pretty simple after all.

local increaseBy = 399.80675 * zoneCount
						
						clone1.Position = clone1.Position - Vector3.new(increaseBy,0,0)
						clone2.Position = clone2.Position - Vector3.new(increaseBy,0,0)
						clone3.Position = clone3.Position - Vector3.new(increaseBy,0,0)
						clone4.Position = clone4.Position - Vector3.new(increaseBy,0,0)

However thanks for trying to help me! :smiley:

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.