Run it
Copy the script and paste it into your executor.
Client = (.Players.LocalPlayer.PlayerScripts.Client)
player = .Players.LocalPlayer
config = {
plantDelay = ,
plantAmount = ,
surroundBase = ,
circleRadius =
}
screenGui = .()
screenGui.Name =
screenGui.ResetOnSpawn =
screenGui.Parent = player.PlayerGui
frame = .()
frame.Size = .(, , , )
frame.Position = .(, -, , -)
frame.BackgroundColor3 = .(, , )
frame.BorderSizePixel =
frame.BorderColor3 = .(, , )
frame.Parent = screenGui
corner = .()
corner.CornerRadius = .(, )
corner.Parent = frame
title = .()
title.Size = .(, , , )
title.BackgroundTransparency =
title.Text =
title.TextColor3 = .(, , )
title.TextSize =
title.Font = .Font.GothamBold
title.Parent = frame
usageLabel = .()
usageLabel.Size = .(, -, , )
usageLabel.Position = .(, , , )
usageLabel.BackgroundTransparency =
usageLabel.Text =
usageLabel.TextColor3 = .(, , )
usageLabel.TextSize =
usageLabel.Font = .Font.Gotham
usageLabel.TextXAlignment = .TextXAlignment.Left
usageLabel.Parent = frame
delayLabel = .()
delayLabel.Size = .(, -, , )
delayLabel.Position = .(, , , )
delayLabel.BackgroundTransparency =
delayLabel.Text =
delayLabel.TextColor3 = .(, , )
delayLabel.TextSize =
delayLabel.Font = .Font.Gotham
delayLabel.TextXAlignment = .TextXAlignment.Left
delayLabel.Parent = frame
delaySlider = .()
delaySlider.Size = .(, -, , )
delaySlider.Position = .(, , , )
delaySlider.BackgroundColor3 = .(, , )
delaySlider.Text =
delaySlider.TextColor3 = .(, , )
delaySlider.TextSize =
delaySlider.Font = .Font.Gotham
delaySlider.PlaceholderText =
delaySlider.Parent = frame
delayCorner = .()
delayCorner.CornerRadius = .(, )
delayCorner.Parent = delaySlider
amountLabel = .()
amountLabel.Size = .(, -, , )
amountLabel.Position = .(, , , )
amountLabel.BackgroundTransparency =
amountLabel.Text =
amountLabel.TextColor3 = .(, , )
amountLabel.TextSize =
amountLabel.Font = .Font.Gotham
amountLabel.TextXAlignment = .TextXAlignment.Left
amountLabel.Parent = frame
amountInput = .()
amountInput.Size = .(, -, , )
amountInput.Position = .(, , , )
amountInput.BackgroundColor3 = .(, , )
amountInput.Text =
amountInput.TextColor3 = .(, , )
amountInput.TextSize =
amountInput.Font = .Font.Gotham
amountInput.PlaceholderText =
amountInput.Parent = frame
amountCorner = .()
amountCorner.CornerRadius = .(, )
amountCorner.Parent = amountInput
surroundToggle = .()
surroundToggle.Size = .(, -, , )
surroundToggle.Position = .(, , , )
surroundToggle.BackgroundColor3 = .(, , )
surroundToggle.Text =
surroundToggle.TextColor3 = .(, , )
surroundToggle.TextSize =
surroundToggle.Font = .Font.GothamBold
surroundToggle.Parent = frame
surroundToggleCorner = .()
surroundToggleCorner.CornerRadius = .(, )
surroundToggleCorner.Parent = surroundToggle
radiusLabel = .()
radiusLabel.Size = .(, -, , )
radiusLabel.Position = .(, , , )
radiusLabel.BackgroundTransparency =
radiusLabel.Text =
radiusLabel.TextColor3 = .(, , )
radiusLabel.TextSize =
radiusLabel.Font = .Font.Gotham
radiusLabel.TextXAlignment = .TextXAlignment.Left
radiusLabel.Visible =
radiusLabel.Parent = frame
radiusInput = .()
radiusInput.Size = .(, -, , )
radiusInput.Position = .(, , , )
radiusInput.BackgroundColor3 = .(, , )
radiusInput.Text =
radiusInput.TextColor3 = .(, , )
radiusInput.TextSize =
radiusInput.Font = .Font.Gotham
radiusInput.PlaceholderText =
radiusInput.Visible =
radiusInput.Parent = frame
radiusCorner = .()
radiusCorner.CornerRadius = .(, )
radiusCorner.Parent = radiusInput
previewButton = .()
previewButton.Size = .(, , , )
previewButton.Position = .(, , , )
previewButton.BackgroundColor3 = .(, , )
previewButton.Text =
previewButton.TextColor3 = .(, , )
previewButton.TextSize =
previewButton.Font = .Font.GothamBold
previewButton.Parent = frame
previewCorner = .()
previewCorner.CornerRadius = .(, )
previewCorner.Parent = previewButton
plantButton = .()
plantButton.Size = .(, , , )
plantButton.Position = .(, , , )
plantButton.BackgroundColor3 = .(, , )
plantButton.Text =
plantButton.TextColor3 = .(, , )
plantButton.TextSize =
plantButton.Font = .Font.GothamBold
plantButton.Parent = frame
buttonCorner = .()
buttonCorner.CornerRadius = .(, )
buttonCorner.Parent = plantButton
dragging =
dragInput, dragStart, startPos
(input)
delta = input.Position - dragStart
frame.Position = .(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
frame.InputBegan:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
dragging =
dragStart = input.Position
startPos = frame.Position
input.Changed:(()
input.UserInputState == .UserInputState.End
dragging =
)
)
frame.InputChanged:((input)
input.UserInputType == .UserInputType.MouseMovement input.UserInputType == .UserInputType.Touch
dragInput = input
)
:().InputChanged:((input)
input == dragInput dragging
(input)
)
surroundToggle.MouseButton1Click:(()
config.surroundBase = config.surroundBase
config.surroundBase
surroundToggle.Text =
surroundToggle.BackgroundColor3 = .(, , )
radiusLabel.Visible =
radiusInput.Visible =
surroundToggle.Text =
surroundToggle.BackgroundColor3 = .(, , )
radiusLabel.Visible =
radiusInput.Visible =
)
radiusInput.FocusLost:(()
value = (radiusInput.Text)
value value >= value <=
config.circleRadius = value
radiusLabel.Text = .. value
radiusInput.Text = (config.circleRadius)
)
delaySlider.FocusLost:(()
value = (delaySlider.Text)
value value >= value <=
config.plantDelay = value
delayLabel.Text = .. value ..
delaySlider.Text = (config.plantDelay)
)
amountInput.FocusLost:(()
value = (amountInput.Text)
value value >= value <=
config.plantAmount = .(value)
amountLabel.Text = .. config.plantAmount
amountInput.Text = (config.plantAmount)
amountInput.Text = (config.plantAmount)
)
()
character = player.Character
character character.PrimaryPart
playerPosition = character.PrimaryPart.Position
nearestSapling =
shortestDistance = .huge
_, item (.Items:())
item.Name == item.PrimaryPart
distance = (item.PrimaryPart.Position - playerPosition).Magnitude
distance < shortestDistance
shortestDistance = distance
nearestSapling = item
nearestSapling
(position)
raycastParams = RaycastParams.()
raycastParams.FilterDescendantsInstances = {.Map.Ground, .Map:()}
raycastParams.FilterType = .RaycastFilterType.Include
raycastParams.IgnoreWater =
raycastResult = :(position, .(, -, ), raycastParams)
raycastResult
raycastResult.Position
(centerPosition, radius, count)
positions = {}
angleStep = ( * .pi) / count
i = , count -
angle = i * angleStep
x = centerPosition.X + radius * .(angle)
z = centerPosition.Z + radius * .(angle)
position = .(x, centerPosition.Y + , z)
groundPos = (position)
groundPos
.(positions, groundPos)
positions
()
.Map.Campground.MainFire.PrimaryPart
.Map.Campground.MainFire.PrimaryPart.Position
previewParts = {}
()
_, part (previewParts)
part part.Parent
part:()
previewParts = {}
()
()
campfirePos = ()
campfirePos
config.surroundBase
circlePositions = (campfirePos, config.circleRadius, config.plantAmount)
i, position (circlePositions)
previewPart = .()
previewPart.Size = .(, , )
previewPart.Position = position + .(, , )
previewPart.Anchored =
previewPart.CanCollide =
previewPart.Transparency =
previewPart.Material = .Material.Neon
previewPart.Color = .(, , )
previewPart.Parent =
.(previewParts, previewPart)
targetItem = ()
targetItem targetItem.PrimaryPart
groundPosition = (targetItem.PrimaryPart.Position)
groundPosition
centerPreview = .()
centerPreview.Size = .(, , )
centerPreview.Position = groundPosition + .(, , )
centerPreview.Anchored =
centerPreview.CanCollide =
centerPreview.Transparency =
centerPreview.Material = .Material.Neon
distance = (campfirePos - groundPosition).Magnitude
centerPreview.Color = distance < .(, , ) .(, , )
centerPreview.Parent =
.(previewParts, centerPreview)
i = , .(config.plantAmount - , )
previewPart = .()
previewPart.Size = .(, , )
previewPart.Position = groundPosition + .(, + (i * ), )
previewPart.Anchored =
previewPart.CanCollide =
previewPart.Transparency = + (i * )
previewPart.Material = .Material.Neon
previewPart.Color = distance < .(, , ) .(, , )
previewPart.Parent =
.(previewParts, previewPart)
.(, clearPreview)
capturedArgs =
capturedRemote =
originalInvokeServer = Client.Events.RequestPlantItem.InvokeServer
Client.Events.RequestPlantItem.InvokeServer = (self, ...)
args = {...}
capturedArgs = args
capturedRemote = self
(self, ...)
()
()
targetItem = ()
targetItem targetItem.PrimaryPart
campfirePos = ()
campfirePos
config.surroundBase
circlePositions = (campfirePos, config.circleRadius, config.plantAmount)
#circlePositions ==
targetItem.Parent = .ReplicatedStorage.TempStorage
originalParent = targetItem.Parent
result = Client.Events.RequestPlantItem:(targetItem, circlePositions[])
result result.Success
targetItem.Parent = originalParent
.(()
capturedArgs capturedRemote
i = , #circlePositions
.(config.plantDelay)
capturedArgs[] = circlePositions[i]
capturedRemote:((capturedArgs))
)
groundPosition = (targetItem.PrimaryPart.Position)
groundPosition
distance = (campfirePos - groundPosition).Magnitude
distance <
targetItem.Parent = .ReplicatedStorage.TempStorage
originalParent = targetItem.Parent
result = Client.Events.RequestPlantItem:(targetItem, groundPosition)
result result.Success
targetItem.Parent = originalParent
.(()
capturedArgs capturedRemote
i = , config.plantAmount -
.(config.plantDelay)
capturedRemote:((capturedArgs))
)
previewButton.MouseButton1Click:(showPreview)
plantButton.MouseButton1Click:(plantSapling)infinite saplings from just one, lots of scripts hide this behind a paywall when its so easy to make. update ---- added a surround base feature, surrounds the base with trees.

99 Nights in the Forest 🔦