Roblox-Bot-Lua/Main/GaG/SimpleAutoFarm.lua
2025-07-21 10:41:54 +07:00

630 lines
19 KiB
Lua

-- Simple GaG Auto Farm (Based on working AutoFarm.lua)
-- ปรับจากไฟล์ที่ทำงานได้จริงแล้ว
print("🌱 Loading Simple GaG Auto Farm...")
-- Services
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer.PlayerGui
-- ป้องกันการรันซ้ำ
if _G.SimpleAutoFarmLoaded then
print("⚠️ Simple Auto Farm already loaded!")
if _G.SimpleAutoFarmUI then
_G.SimpleAutoFarmUI:Destroy()
end
end
_G.SimpleAutoFarmLoaded = true
-- Settings
local Settings = {
AutoPlant = false,
AutoHarvest = false,
AutoSell = false,
AutoBuy = false,
SelectedSeed = "Carrot",
SellThreshold = 15,
PlantRandom = false
}
-- Game Objects (From AutoFarm.lua)
local GameEvents = ReplicatedStorage.GameEvents
local Farms = workspace.Farm
-- Get player's farm
local function GetFarmOwner(Farm)
local Important = Farm.Important
local Data = Important.Data
local Owner = Data.Owner
return Owner.Value
end
local function GetFarm(PlayerName)
local AllFarms = Farms:GetChildren()
for _, Farm in pairs(AllFarms) do
local Owner = GetFarmOwner(Farm)
if Owner == PlayerName then
return Farm
end
end
return nil
end
local MyFarm = GetFarm(LocalPlayer.Name)
if not MyFarm then
warn("❌ Cannot find player's farm!")
return
end
local MyImportant = MyFarm.Important
local PlantLocations = MyImportant.Plant_Locations
local PlantsPhysical = MyImportant.Plants_Physical
local Dirt = PlantLocations:FindFirstChildOfClass("Part")
-- Helper Functions (From AutoFarm.lua)
local function GetArea(Base)
local Center = Base:GetPivot()
local Size = Base.Size
local X1 = math.ceil(Center.X - (Size.X/2))
local Z1 = math.ceil(Center.Z - (Size.Z/2))
local X2 = math.floor(Center.X + (Size.X/2))
local Z2 = math.floor(Center.Z + (Size.Z/2))
return X1, Z1, X2, Z2
end
local X1, Z1, X2, Z2 = GetArea(Dirt)
local function GetRandomFarmPoint()
local FarmLands = PlantLocations:GetChildren()
local FarmLand = FarmLands[math.random(1, #FarmLands)]
local X1, Z1, X2, Z2 = GetArea(FarmLand)
local X = math.random(X1, X2)
local Z = math.random(Z1, Z2)
return Vector3.new(X, 4, Z)
end
local function Plant(Position, Seed)
GameEvents.Plant_RE:FireServer(Position, Seed)
wait(0.3)
end
local function HarvestPlant(Plant)
local Prompt = Plant:FindFirstChild("ProximityPrompt", true)
if not Prompt then return end
fireproximityprompt(Prompt)
end
local function CanHarvest(Plant)
local Prompt = Plant:FindFirstChild("ProximityPrompt", true)
if not Prompt then return false end
if not Prompt.Enabled then return false
return true
end
local function GetHarvestablePlants()
local Plants = {}
local function CollectHarvestable(Parent)
for _, Plant in pairs(Parent:GetChildren()) do
-- Check for fruits
local Fruits = Plant:FindFirstChild("Fruits")
if Fruits then
CollectHarvestable(Fruits)
end
-- Check if can harvest
if CanHarvest(Plant) then
table.insert(Plants, Plant)
end
end
end
CollectHarvestable(PlantsPhysical)
return Plants
end
local function GetOwnedSeeds()
local Seeds = {}
local Character = LocalPlayer.Character
local Backpack = LocalPlayer.Backpack
local function CollectFromParent(Parent)
for _, Tool in pairs(Parent:GetChildren()) do
local PlantName = Tool:FindFirstChild("Plant_Name")
local Count = Tool:FindFirstChild("Numbers")
if PlantName and Count then
Seeds[PlantName.Value] = {
Count = Count.Value,
Tool = Tool
}
end
end
end
CollectFromParent(Backpack)
if Character then
CollectFromParent(Character)
end
return Seeds
end
local function GetInvCrops()
local Crops = {}
local Character = LocalPlayer.Character
local Backpack = LocalPlayer.Backpack
local function CollectFromParent(Parent)
for _, Tool in pairs(Parent:GetChildren()) do
local ItemString = Tool:FindFirstChild("Item_String")
if ItemString then
table.insert(Crops, Tool)
end
end
end
CollectFromParent(Backpack)
if Character then
CollectFromParent(Character)
end
return Crops
end
local IsSelling = false
local function SellInventory()
if IsSelling then return end
IsSelling = true
local Character = LocalPlayer.Character
if not Character then
IsSelling = false
return
end
local Previous = Character:GetPivot()
local Leaderstats = LocalPlayer.leaderstats
local ShecklesCount = Leaderstats and Leaderstats:FindFirstChild("Sheckles")
if ShecklesCount then
local PreviousSheckles = ShecklesCount.Value
-- Teleport to sell area
Character:PivotTo(CFrame.new(62, 4, -26))
-- Keep trying to sell until money changes
local attempts = 0
while attempts < 20 do
if ShecklesCount.Value ~= PreviousSheckles then break end
GameEvents.Sell_Inventory:FireServer()
wait(0.1)
attempts = attempts + 1
end
-- Return to previous position
Character:PivotTo(Previous)
else
-- Just fire the sell event if no leaderstats
GameEvents.Sell_Inventory:FireServer()
end
wait(0.2)
IsSelling = false
end
local function BuySeed(Seed)
GameEvents.BuySeedStock:FireServer(Seed)
end
local function EquipTool(Tool)
local Character = LocalPlayer.Character
if not Character then return end
local Humanoid = Character:FindFirstChild("Humanoid")
if Tool.Parent == LocalPlayer.Backpack and Humanoid then
Humanoid:EquipTool(Tool)
end
end
-- Auto Functions
local function AutoPlantLoop()
if not Settings.AutoPlant then return end
local OwnedSeeds = GetOwnedSeeds()
local SeedData = OwnedSeeds[Settings.SelectedSeed]
if not SeedData or SeedData.Count <= 0 then
print("🌱 No seeds to plant: " .. Settings.SelectedSeed)
return
end
local Count = SeedData.Count
local Tool = SeedData.Tool
print("🌱 Planting " .. Count .. "x " .. Settings.SelectedSeed)
-- Equip the tool
EquipTool(Tool)
local Planted = 0
if Settings.PlantRandom then
-- Plant at random points
for i = 1, Count do
if not Settings.AutoPlant then break end
local Point = GetRandomFarmPoint()
Plant(Point, Settings.SelectedSeed)
Planted = Planted + 1
end
else
-- Plant in grid pattern
for X = X1, X2 do
for Z = Z1, Z2 do
if Planted >= Count or not Settings.AutoPlant then break end
local Point = Vector3.new(X, 0.13, Z)
Plant(Point, Settings.SelectedSeed)
Planted = Planted + 1
end
if Planted >= Count or not Settings.AutoPlant then break end
end
end
print("🌱 Planted " .. Planted .. " seeds")
end
local function AutoHarvestLoop()
if not Settings.AutoHarvest then return end
local Plants = GetHarvestablePlants()
if #Plants == 0 then return end
print("🚜 Harvesting " .. #Plants .. " plants")
for _, Plant in pairs(Plants) do
if not Settings.AutoHarvest then break end
HarvestPlant(Plant)
wait(0.1)
end
end
local function AutoSellLoop()
if not Settings.AutoSell then return end
local Crops = GetInvCrops()
if #Crops < Settings.SellThreshold then return end
print("💰 Selling " .. #Crops .. " crops")
SellInventory()
end
local function AutoBuyLoop()
if not Settings.AutoBuy then return end
local OwnedSeeds = GetOwnedSeeds()
local SeedData = OwnedSeeds[Settings.SelectedSeed]
if SeedData and SeedData.Count > 0 then return end
print("🛒 Buying seeds: " .. Settings.SelectedSeed)
-- Buy multiple seeds
for i = 1, 10 do
BuySeed(Settings.SelectedSeed)
wait(0.1)
end
end
-- Create Simple UI
local function CreateSimpleUI()
-- Remove old UI
local oldUI = PlayerGui:FindFirstChild("SimpleAutoFarmUI")
if oldUI then oldUI:Destroy() end
-- ScreenGui
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "SimpleAutoFarmUI"
ScreenGui.Parent = PlayerGui
ScreenGui.ResetOnSpawn = false
_G.SimpleAutoFarmUI = ScreenGui
-- Main Frame
local MainFrame = Instance.new("Frame")
MainFrame.Name = "MainFrame"
MainFrame.Parent = ScreenGui
MainFrame.BackgroundColor3 = Color3.fromRGB(26, 20, 8) -- Brown theme
MainFrame.BorderColor3 = Color3.fromRGB(69, 142, 40) -- Green border
MainFrame.BorderSizePixel = 2
MainFrame.Position = UDim2.new(0, 50, 0, 50)
MainFrame.Size = UDim2.new(0, 320, 0, 450)
MainFrame.Active = true
MainFrame.Draggable = true
-- Title Bar
local TitleBar = Instance.new("Frame")
TitleBar.Name = "TitleBar"
TitleBar.Parent = MainFrame
TitleBar.BackgroundColor3 = Color3.fromRGB(45, 95, 25) -- Dark green
TitleBar.BorderSizePixel = 0
TitleBar.Size = UDim2.new(1, 0, 0, 30)
local Title = Instance.new("TextLabel")
Title.Parent = TitleBar
Title.BackgroundTransparency = 1
Title.Position = UDim2.new(0, 10, 0, 0)
Title.Size = UDim2.new(1, -40, 1, 0)
Title.Font = Enum.Font.SourceSansBold
Title.Text = "🌱 Simple GaG Auto Farm"
Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Title.TextSize = 14
Title.TextXAlignment = Enum.TextXAlignment.Left
-- Close Button
local CloseButton = Instance.new("TextButton")
CloseButton.Parent = TitleBar
CloseButton.BackgroundColor3 = Color3.fromRGB(255, 60, 60)
CloseButton.BorderSizePixel = 0
CloseButton.Position = UDim2.new(1, -30, 0, 0)
CloseButton.Size = UDim2.new(0, 30, 0, 30)
CloseButton.Font = Enum.Font.SourceSansBold
CloseButton.Text = "X"
CloseButton.TextColor3 = Color3.fromRGB(255, 255, 255)
CloseButton.TextSize = 14
-- Content Frame
local ContentFrame = Instance.new("ScrollingFrame")
ContentFrame.Parent = MainFrame
ContentFrame.BackgroundTransparency = 1
ContentFrame.Position = UDim2.new(0, 10, 0, 40)
ContentFrame.Size = UDim2.new(1, -20, 1, -50)
ContentFrame.CanvasSize = UDim2.new(0, 0, 0, 500)
ContentFrame.ScrollBarThickness = 8
local function CreateSection(name, yPos)
local Section = Instance.new("Frame")
Section.Parent = ContentFrame
Section.BackgroundColor3 = Color3.fromRGB(45, 95, 25)
Section.BorderColor3 = Color3.fromRGB(69, 142, 40)
Section.BorderSizePixel = 1
Section.Position = UDim2.new(0, 0, 0, yPos)
Section.Size = UDim2.new(1, -10, 0, 100)
local SectionTitle = Instance.new("TextLabel")
SectionTitle.Parent = Section
SectionTitle.BackgroundColor3 = Color3.fromRGB(69, 142, 40)
SectionTitle.BorderSizePixel = 0
SectionTitle.Size = UDim2.new(1, 0, 0, 25)
SectionTitle.Font = Enum.Font.SourceSansBold
SectionTitle.Text = name
SectionTitle.TextColor3 = Color3.fromRGB(255, 255, 255)
SectionTitle.TextSize = 12
return Section
end
local function CreateToggle(parent, text, yPos, callback)
local ToggleFrame = Instance.new("Frame")
ToggleFrame.Parent = parent
ToggleFrame.BackgroundTransparency = 1
ToggleFrame.Position = UDim2.new(0, 10, 0, yPos)
ToggleFrame.Size = UDim2.new(1, -20, 0, 25)
local Label = Instance.new("TextLabel")
Label.Parent = ToggleFrame
Label.BackgroundTransparency = 1
Label.Position = UDim2.new(0, 0, 0, 0)
Label.Size = UDim2.new(1, -60, 1, 0)
Label.Font = Enum.Font.SourceSans
Label.Text = text
Label.TextColor3 = Color3.fromRGB(255, 255, 255)
Label.TextSize = 11
Label.TextXAlignment = Enum.TextXAlignment.Left
local Toggle = Instance.new("TextButton")
Toggle.Parent = ToggleFrame
Toggle.BackgroundColor3 = Color3.fromRGB(255, 80, 80)
Toggle.BorderSizePixel = 0
Toggle.Position = UDim2.new(1, -50, 0, 2)
Toggle.Size = UDim2.new(0, 45, 0, 20)
Toggle.Font = Enum.Font.SourceSansBold
Toggle.Text = "OFF"
Toggle.TextColor3 = Color3.fromRGB(255, 255, 255)
Toggle.TextSize = 10
Toggle.MouseButton1Click:Connect(function()
local newValue = Toggle.Text == "OFF"
Toggle.Text = newValue and "ON" or "OFF"
Toggle.BackgroundColor3 = newValue and Color3.fromRGB(80, 255, 80) or Color3.fromRGB(255, 80, 80)
if callback then callback(newValue) end
end)
return Toggle
end
-- Auto Plant Section
local PlantSection = CreateSection("🌱 Auto Plant", 0)
local PlantToggle = CreateToggle(PlantSection, "Auto Plant", 30, function(value)
Settings.AutoPlant = value
print("Auto Plant: " .. (value and "ON" or "OFF"))
end)
local RandomToggle = CreateToggle(PlantSection, "Random Points", 55, function(value)
Settings.PlantRandom = value
print("Random Plant: " .. (value and "ON" or "OFF"))
end)
-- Seed Selection
local SeedLabel = Instance.new("TextLabel")
SeedLabel.Parent = PlantSection
SeedLabel.BackgroundTransparency = 1
SeedLabel.Position = UDim2.new(0, 10, 0, 80)
SeedLabel.Size = UDim2.new(1, -20, 0, 15)
SeedLabel.Font = Enum.Font.SourceSans
SeedLabel.Text = "Seed: " .. Settings.SelectedSeed
SeedLabel.TextColor3 = Color3.fromRGB(200, 255, 200)
SeedLabel.TextSize = 10
SeedLabel.TextXAlignment = Enum.TextXAlignment.Left
-- Auto Harvest Section
local HarvestSection = CreateSection("🚜 Auto Harvest", 110)
local HarvestToggle = CreateToggle(HarvestSection, "Auto Harvest", 30, function(value)
Settings.AutoHarvest = value
print("Auto Harvest: " .. (value and "ON" or "OFF"))
end)
-- Auto Sell Section
local SellSection = CreateSection("💰 Auto Sell", 220)
local SellToggle = CreateToggle(SellSection, "Auto Sell", 30, function(value)
Settings.AutoSell = value
print("Auto Sell: " .. (value and "ON" or "OFF"))
end)
local ThresholdLabel = Instance.new("TextLabel")
ThresholdLabel.Parent = SellSection
ThresholdLabel.BackgroundTransparency = 1
ThresholdLabel.Position = UDim2.new(0, 10, 0, 55)
ThresholdLabel.Size = UDim2.new(1, -20, 0, 15)
ThresholdLabel.Font = Enum.Font.SourceSans
ThresholdLabel.Text = "Sell at: " .. Settings.SellThreshold .. " crops"
ThresholdLabel.TextColor3 = Color3.fromRGB(200, 255, 200)
ThresholdLabel.TextSize = 10
ThresholdLabel.TextXAlignment = Enum.TextXAlignment.Left
-- Auto Buy Section
local BuySection = CreateSection("🛒 Auto Buy", 330)
local BuyToggle = CreateToggle(BuySection, "Auto Buy Seeds", 30, function(value)
Settings.AutoBuy = value
print("Auto Buy: " .. (value and "ON" or "OFF"))
end)
-- Status Display
local StatusLabel = Instance.new("TextLabel")
StatusLabel.Parent = ContentFrame
StatusLabel.BackgroundColor3 = Color3.fromRGB(26, 20, 8)
StatusLabel.BorderColor3 = Color3.fromRGB(69, 142, 40)
StatusLabel.BorderSizePixel = 1
StatusLabel.Position = UDim2.new(0, 0, 0, 440)
StatusLabel.Size = UDim2.new(1, -10, 0, 50)
StatusLabel.Font = Enum.Font.SourceSans
StatusLabel.Text = "Status: Ready"
StatusLabel.TextColor3 = Color3.fromRGB(200, 255, 200)
StatusLabel.TextSize = 10
StatusLabel.TextYAlignment = Enum.TextYAlignment.Top
-- Event Handlers
CloseButton.MouseButton1Click:Connect(function()
-- Stop all loops
Settings.AutoPlant = false
Settings.AutoHarvest = false
Settings.AutoSell = false
Settings.AutoBuy = false
ScreenGui:Destroy()
_G.SimpleAutoFarmLoaded = false
_G.SimpleAutoFarmUI = nil
print("🌱 Simple Auto Farm closed")
end)
-- Update status
spawn(function()
while ScreenGui.Parent do
local OwnedSeeds = GetOwnedSeeds()
local Crops = GetInvCrops()
local Plants = GetHarvestablePlants()
local seedCount = OwnedSeeds[Settings.SelectedSeed] and OwnedSeeds[Settings.SelectedSeed].Count or 0
StatusLabel.Text = string.format(
"Seeds: %d | Crops: %d | Ready: %d\nPlant: %s | Harvest: %s | Sell: %s",
seedCount,
#Crops,
#Plants,
Settings.AutoPlant and "ON" or "OFF",
Settings.AutoHarvest and "ON" or "OFF",
Settings.AutoSell and "ON" or "OFF"
)
wait(2)
end
end)
print("✅ Simple Auto Farm UI created successfully!")
return ScreenGui
end
-- Main Loops
local function StartAutoLoops()
-- Auto Plant Loop
spawn(function()
while _G.SimpleAutoFarmLoaded do
if Settings.AutoPlant then
pcall(AutoPlantLoop)
end
wait(5) -- Check every 5 seconds
end
end)
-- Auto Harvest Loop
spawn(function()
while _G.SimpleAutoFarmLoaded do
if Settings.AutoHarvest then
pcall(AutoHarvestLoop)
end
wait(1) -- Check every second
end
end)
-- Auto Sell Loop
spawn(function()
while _G.SimpleAutoFarmLoaded do
if Settings.AutoSell then
pcall(AutoSellLoop)
end
wait(3) -- Check every 3 seconds
end
end)
-- Auto Buy Loop
spawn(function()
while _G.SimpleAutoFarmLoaded do
if Settings.AutoBuy then
pcall(AutoBuyLoop)
end
wait(10) -- Check every 10 seconds
end
end)
end
-- Initialize
print("🌱 Farm found: " .. MyFarm.Name)
print("🌱 Farm area: " .. X1 .. "," .. Z1 .. " to " .. X2 .. "," .. Z2)
CreateSimpleUI()
StartAutoLoops()
-- Notification
game:GetService("StarterGui"):SetCore("SendNotification", {
Title = "Simple GaG Auto Farm",
Text = "Loaded successfully! 🌱",
Duration = 3
})
print("✅ Simple GaG Auto Farm loaded successfully!")
return {
Settings = Settings,
UI = _G.SimpleAutoFarmUI
}