![[KEYLESS] Moondiety Script | 17+ supported Games](https://scriptblox.com/images/sb/0-1753093706828.png)
Keyless VerifiedUniversal

local WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))()
local Window = WindUI:CreateWindow({
Title = "Inf Saplings Hub",
Icon = "bird",
Folder = "InfSaplings",
Size = UDim2.fromOffset(500, 400),
Theme = "Dark",
})
local Tab = Window:Tab({
Title = "Saplings",
Icon = "leaf",
})
-- Настройки
local config = {
plantDelay = 1,
plantAmount = 3,
surroundBase = false,
circleRadius = 45,
highlightColor = Color3.fromRGB(0,255,0),
autoPlant = false,
}
-- Highlight part
local highlightPart = Instance.new("Part")
highlightPart.Anchored = true
highlightPart.CanCollide = false
highlightPart.Transparency = 0.5
highlightPart.Size = Vector3.new(2,0.2,2)
highlightPart.Color = config.highlightColor
highlightPart.Parent = workspace
-- Slider: Amount
Tab:Slider({
Title = "Plant Amount",
Desc = "How many saplings to plant",
Value = {Min=1, Max=2000, Default=config.plantAmount},
Step = 1,
Callback = function(value)
config.plantAmount = value
end
})
-- Slider: Radius
Tab:Slider({
Title = "Circle Radius",
Desc = "Radius around campfire",
Value = {Min=5, Max=100, Default=config.circleRadius},
Step = 1,
Callback = function(value)
config.circleRadius = value
end
})
-- Slider: Delay
Tab:Slider({
Title = "Plant Delay",
Desc = "Delay between planting",
Value = {Min=0.1, Max=5, Default=config.plantDelay},
Step = 0.1,
Callback = function(value)
config.plantDelay = value
end
})
-- Toggle: Surround Base
Tab:Toggle({
Title = "Surround Base",
Value = config.surroundBase,
Callback = function(state)
config.surroundBase = state
end
})
-- Colorpicker: Highlight
Tab:Colorpicker({
Title = "Highlight Color",
Default = config.highlightColor,
Callback = function(color)
config.highlightColor = color
highlightPart.Color = color
end
})
-- Toggle: Auto Plant
Tab:Toggle({
Title = "Auto Plant",
Value = config.autoPlant,
Callback = function(state)
config.autoPlant = state
end
})
-- Button: Plant manually
Tab:Button({
Title = "Plant Now",
Callback = function()
plantSapling() -- функция посадки должна быть ниже
end
})
-- === Сюда вставляем твой inf saplings скрипт, только используем config ===
local Client = require(game.Players.LocalPlayer.PlayerScripts.Client)
local player = game.Players.LocalPlayer
local capturedArgs = nil
local capturedRemote = nil
local originalInvokeServer = Client.Events.RequestPlantItem.InvokeServer
Client.Events.RequestPlantItem.InvokeServer = function(self,...)
local args = {...}
capturedArgs = args
capturedRemote = self
return originalInvokeServer(self,...)
end
-- Функции посадки
local function findNearestSapling()
local character = player.Character
if not character or not character.PrimaryPart then return nil end
local nearest, shortest = nil, math.huge
for _, item in ipairs(workspace.Items:GetChildren()) do
if item.Name == "Sapling" and item.PrimaryPart then
local dist = (item.PrimaryPart.Position - character.PrimaryPart.Position).Magnitude
if dist < shortest then
shortest = dist
nearest = item
end
end
end
return nearest
end
local function FindGrassBlock(position)
local raycastParams = RaycastParams.new()
raycastParams.FilterDescendantsInstances = {workspace.Map.Ground, workspace.Map:FindFirstChild("Snow")}
raycastParams.FilterType = Enum.RaycastFilterType.Include
raycastParams.IgnoreWater = true
local result = workspace:Raycast(position, Vector3.new(0,-55,0), raycastParams)
return result and result.Position
end
local function getCirclePositions(center,radius,count)
local positions = {}
local stepAngle = (2*math.pi)/count
for i=0,count-1 do
local angle = i*stepAngle
local pos = Vector3.new(center.X+radius*math.cos(angle), center.Y+10, center.Z+radius*math.sin(angle))
local ground = FindGrassBlock(pos)
if ground then table.insert(positions, ground) end
end
return positions
end
local function getCampfirePosition()
if workspace.Map.Campground.MainFire.PrimaryPart then
return workspace.Map.Campground.MainFire.PrimaryPart.Position
end
end
function plantSapling()
local target = findNearestSapling()
if not target or not target.PrimaryPart then return end
local campfire = getCampfirePosition()
if not campfire then return end
-- Highlight position
highlightPart.Position = target.PrimaryPart.Position + Vector3.new(0,1,0)
if config.surroundBase then
local circle = getCirclePositions(campfire, config.circleRadius, config.plantAmount)
if #circle == 0 then return end
local originalParent = target.Parent
target.Parent = game.ReplicatedStorage.TempStorage
local result = Client.Events.RequestPlantItem:InvokeServer(target,circle[1])
if not result or not result.Success then target.Parent = originalParent return end
task.spawn(function()
if capturedArgs and capturedRemote then
for i=2,#circle do
task.wait(config.plantDelay)
capturedArgs[2] = circle[i]
capturedRemote:InvokeServer(unpack(capturedArgs))
end
end
end)
else
local ground = FindGrassBlock(target.PrimaryPart.Position)
if not ground then return end
target.Parent = game.ReplicatedStorage.TempStorage
local result = Client.Events.RequestPlantItem:InvokeServer(target,ground)
if not result or not result.Success then target.Parent = workspace.Items end
task.spawn(function()
if capturedArgs and capturedRemote then
for i=1,config.plantAmount-1 do
task.wait(config.plantDelay)
capturedRemote:InvokeServer(unpack(capturedArgs))
end
end
end)
end
end
-- Автопосадка
task.spawn(function()
while true do
task.wait(config.plantDelay)
if config.autoPlant then
plantSapling()
end
end
end)![[KEYLESS] Moondiety Script | 17+ supported Games](https://scriptblox.com/images/sb/0-1753093706828.png)



Work?