Version / Update: v1.0.0
- Download / Script Link
- -- ==========================================================================
-- V60 PUBLIC GHOST ENGINE - AUTO-SYNC + ANTI-RANDOM + 2.4M PIVOT
-- ==========================================================================
if getgenv().StopOldScript then
pcall(getgenv().StopOldScript)
task.wait(0.2)
end
local scriptID = math.random(1, 999999)
local running = true
getgenv().StopOldScript = function() running = false print("V60 Public: Shutdown.") end
-- ==========================================
-- CONFIGURATION
-- ==========================================
local WEBHOOK_URL = "YOUR_WEBHOOK_HERE"
local SQUAD_KEY = "MyPrivateFarm123" -- <--- Change this to any secret word
local FINAL_GOAL = 3600000
local PIVOT_POINT = 2400000
local UPDATE_GAP = 5
-- ==========================================
-- API MODULE
-- ==========================================
local API = {}
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local VIM = game:GetService("VirtualInputManager")
local Http = game:GetService("HttpService")
local player = Players.LocalPlayer
local raceCount = 0
local lastJoinTime = 0
local UI_Cache = {}
local msg_file = "farm_status_public.txt"
-- Set Squad Key as an attribute so your other accounts can see it
player:SetAttribute("SquadKey", SQUAD_KEY)
function API.FormatNum(amount)
local formatted = tostring(math.floor(amount))
while true do
formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
if (k==0) then break end
end
return formatted
end
function API.GetCash(p)
if not p then return 0 end
local s = p:FindFirstChild("leaderstats") or p:FindFirstChild("Data")
local c = s and (s:FindFirstChild("Cash") or s:FindFirstChild("Money"))
return c and c.Value or 0
end
local startCash = API.GetCash(player)
function API.UpdateDiscord(forceNew)
if WEBHOOK_URL == "" or WEBHOOK_URL == "YOUR_WEBHOOK_HERE" then return end
task.spawn(function()
local cur = API.GetCash(player)
local earned = cur - startCash
local prog = math.min(math.floor((cur / FINAL_GOAL) * 100), 100)
local data = {
["embeds"] = {{
["title"] = "🌍 Public Ghost Sync: " .. player.Name,
["description"] = (cur >= FINAL_GOAL and "🏁 **RETIRED**" or "🏎️ **Farming (Public Mode)**"),
["color"] = (cur >= FINAL_GOAL and 65280 or 10181046),
["fields"] = {
{["name"] = "💵 Balance", ["value"] = "**$" .. API.FormatNum(cur) .. "**", ["inline"] = true},
{["name"] = "📊 Goal", ["value"] = "**" .. prog .. "%**", ["inline"] = true},
{["name"] = "💸 Session", ["value"] = "+$" .. API.FormatNum(earned), ["inline"] = false},
{["name"] = "🏁 Total Races", ["value"] = tostring(raceCount), ["inline"] = true},
{["name"] = "🔑 Squad Key", ["value"] = "```" .. SQUAD_KEY .. "```", ["inline"] = true}
},
["footer"] = {["text"] = "V60 Public Engine • " .. os.date("%X")},
["timestamp"] = os.date("!%Y-%m-%dT%H:%M:%SZ")
}}
}
local req = (syn and syn.request) or (http and http.request) or http_request or request
if not req then return end
local existingID = (not forceNew) and isfile and isfile(msg_file) and readfile(msg_file)
local method, url = "POST", WEBHOOK_URL .. "?wait=true"
if existingID and existingID ~= "" then method, url = "PATCH", WEBHOOK_URL .. "/messages/" .. existingID .. "?wait=true" end
local success, response = pcall(function() return req({Url = url, Method = method, Headers = {["Content-Type"] = "application/json"}, Body = Http:JSONEncode(data)}) end)
if success and response.Success and method == "POST" then
local resData = Http:JSONDecode(response.Body)
if resData and resData.id and writefile then writefile(msg_file, resData.id) end
elseif method == "PATCH" and not response.Success then if writefile then writefile(msg_file, "") end API.UpdateDiscord(true) end
end)
end
-- V60 SMART PARTNER DETECTION
function API.GetRole()
local myC = API.GetCash(player)
if myC >= FINAL_GOAL then return false end
local partner = nil
for _, p in ipairs(Players:GetPlayers()) do
-- ONLY sync with players who have the SAME SquadKey attribute
if p ~= player and p:GetAttribute("SquadKey") == SQUAD_KEY then
partner = p
break
end
end
if partner then
local oC = API.GetCash(partner)
if oC >= FINAL_GOAL then return true end
if myC >= PIVOT_POINT and oC < PIVOT_POINT then return false
elseif myC < PIVOT_POINT and oC >= PIVOT_POINT then return true
else
if myC > oC then return true end
if myC < oC then return false end
return player.UserId < partner.UserId
end
end
return true
end
function API.GetTarget()
local char = player.Character
if not char then return nil end
local hum = char:FindFirstChildOfClass("Humanoid")
if hum and hum.SeatPart then return hum.SeatPart:FindFirstAncestorWhichIsA("Model") or hum.SeatPart end
return char:FindFirstChild("HumanoidRootPart")
end
function API.TP(cf, isJoin, isReset)
if not running then return end
local target = API.GetTarget()
if not target then return end
pcall(function()
local root = target:IsA("Model") and (target.PrimaryPart or target:FindFirstChildWhichIsA("BasePart")) or target
if root then
root.AssemblyLinearVelocity = Vector3.new(0, -65, 0)
root.AssemblyAngularVelocity = Vector3.new(0, 0, 0)
end
local winner = API.GetRole()
local finalCF
if isJoin then
finalCF = CFrame.new(cf.Position + (winner and Vector3.new(-11,0,0) or Vector3.new(11,0,0))) * CFrame.Angles(0, cf.Rotation.Y, 0)
elseif isReset then
finalCF = cf * (winner and CFrame.new(-60,0,40) or CFrame.new(60,0,40)) -- Move further away in public
else
finalCF = CFrame.new(cf.Position + Vector3.new(0, 1.2, 0)) * CFrame.Angles(0, cf.Rotation.Y, 0)
end
target:PivotTo(finalCF)
if isJoin or isReset then pcall(function() VIM:SendKeyEvent(true, Enum.KeyCode.Space, false, game) task.wait(0.1) VIM:SendKeyEvent(false, Enum.KeyCode.Space, false, game) end) end
end)
end
function API.GetStatus(name)
if not UI_Cache[name] or not UI_Cache[name].Parent then
for _, v in ipairs(Workspace:GetDescendants()) do
if v:IsA("TextLabel") and v.Text:find(name:gsub("Race","")) then
local lab = v.Parent:FindFirstChildOfClass("TextLabel")
if lab then UI_Cache[name] = lab break end
end
end
end
local l = UI_Cache[name]
if l then
local t = l.Text:lower()
if t:find("starting") or t:find("progress") then return "Busy" end
return t:match("%d/%d") or "0/2"
end
return "0/2"
end
local function MainLoop()
print("V60 Public Ghost Engine Active. Key: " .. SQUAD_KEY)
API.UpdateDiscord(true)
while running do
task.wait(0.05)
local track, countdown = nil, false
for _, obj in ipairs(Workspace:GetChildren()) do
if obj.Name:match("_TrackObjects$") then track = obj break end
if obj.Name:match("_ClientObjects$") then countdown = true end
end
if track then
lastJoinTime = 0
local cps = track:FindFirstChild("Checkpoints")
if cps then
local curNum = 1
local winner = API.GetRole()
local delayTime = winner and 0.15 or 0.55
while running and curNum <= #cps:GetChildren() and track:IsDescendantOf(Workspace) do
local target = cps:FindFirstChild(tostring(curNum))
if target then
API.TP(target.CFrame, false, false)
task.wait(delayTime)
if not cps:FindFirstChild(tostring(curNum)) then curNum = curNum + 1 end
else curNum = curNum + 1 end
task.wait(0.01)
end
local finish = track:FindFirstChild("FinishCollide")
if finish and running then
API.TP(finish.CFrame, false, false)
raceCount = raceCount + 1
if raceCount % UPDATE_GAP == 0 then API.UpdateDiscord(false) end
task.wait(0.5)
repeat task.wait(0.2) until not track:IsDescendantOf(Workspace) or not running
end
end
elseif countdown then task.wait(0.1)
else
local rf = ReplicatedStorage:FindFirstChild("Modules") and ReplicatedStorage.Modules:FindFirstChild("Race") and ReplicatedStorage.Modules.Race:FindFirstChild("Races")
if rf then
local hStat = API.GetStatus("HighwayRace")
local cStat = API.GetStatus("CityRace")
-- PUBLIC SAFETY: Only join if it is 0/2. This ensures your 2 accounts enter together.
local pad = (hStat == "0/2") and rf.HighwayRace:FindFirstChild("WaitingZone") or ((cStat == "0/2") and rf.CityRace:FindFirstChild("WaitingZone") or nil)
if pad and running then
local targetObj = API.GetTarget()
local pos = targetObj and (targetObj:IsA("Model") and targetObj:GetPivot().Position or targetObj.Position)
local dist = pos and (pos - pad.Position).Magnitude or 999
if dist > 22 then
if tick() - lastJoinTime > 4 then
-- Both accounts will see "0/2" and jump in at nearly the same time
if not API.GetRole() then task.wait(0.3) end -- Very small stagger for safety
API.TP(pad.CFrame, true, false)
lastJoinTime = tick()
end
elseif tick() - lastJoinTime > 12 and lastJoinTime ~= 0 then
API.TP(pad.CFrame, false, true)
task.wait(1.5)
API.TP(pad.CFrame, true, false)
lastJoinTime = tick()
end
else
-- If no circles are 0/2, move to a safe distance and hide
local targetObj = API.GetTarget()
if targetObj then
local hPad = rf.HighwayRace:FindFirstChild("WaitingZone")
if (targetObj:GetPivot().Position - hPad.Position).Magnitude < 30 then
API.TP(hPad.CFrame, false, true) -- Warp to reset spot
end
end
end
end
end
end
end
task.spawn(MainLoop)[ View More ]
execute the script on 2 accounts i tested this on privateserver