ScriptKeyless
Realistic Morocco script
[🇲🇦مايك المغرب العربي🇲🇦 ]Realistic MoroccoDesktop & mobile readyWave · Codex · Delta · Synapse Z · Volt · Potassium · Seliware · OpiumWare · Real
Description
auto steal money hit wlad l9ham makaric s . server hop . anti detection (not tested yet ) 10k/day 3la hssab li f server xeno - delta- all executors esp roles . please use the script by b00k _546 lah yn3al l9ahba dyal mkom a Realistic Morocco admins . kamlin zwaml
GAME[🇲🇦مايك المغرب العربي🇲🇦 ]Realistic Morocco
UPDATEDOct 10, 2026
ACCESSKeyless
PLATFORMDesktop & Mobile
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
--[[rscripts:analytics:start]]
-- Script analytics (enabled by the creator on rscripts.net).
-- Runs in its own thread and cannot affect the script below.
task.spawn(function()
pcall(function()
loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6ab0662f67ec7f8ad4d71468"))()
end)
end)
--[[rscripts:analytics:end]]
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TeleportService = game:GetService("TeleportService")
local HttpService = game:GetService("HttpService")
local VirtualUser = game:GetService("VirtualUser")
local lp = Players.LocalPlayer
local __f04 = ReplicatedStorage:WaitForChild("__f04", 10)
local __r26 = __f04 and __f04:WaitForChild("__r26", 10)
local rewardNotify = __f04 and __f04:WaitForChild("RewardNotify", 10)
-- ==========================================
-- STATE VARIABLES & CONFIG (ALL OFF BY DEFAULT)
-- ==========================================
local autoCollectCash = false -- Priority 1 (Default OFF)
local minCashToTP = 1 -- Minimum cash amount to trigger TP (default 1)
local tpUnderFloor = true -- Teleport under floor for stealth (Default ON)
local underFloorDepth = 8.5 -- Depth beneath cash in studs (default 8.5)
local autoNoclipOnTP = true -- Activate noclip during cash TP and turn off after return
local autoTicTacToe = false -- Priority 2 (Default OFF)
local autoTP = false -- Priority 3 TP (Default OFF)
local autoSweep = false -- Priority 3 Sweep (Default OFF)
local rankESP = false -- Master Rank & Admin ESP (Default OFF)
-- Staff Avoidance Configuration
local staffAvoidRadius = 30 -- Configurable radius in studs from CASH to staff (default 30 studs)
local staffFreezeRadius = 50 -- Configurable radius in studs from YOU to staff to freeze TP (default 50 studs)
local staffFreezeEnabled = true -- Master toggle: Auto-pause all TP & farming when staff is near YOU
local ignoreStaffDroppedForever = false -- If false: collects cash once staff walks outside avoid radius. If true: never touches staff drops.
local avoidRanks = {
[5] = true, -- Owner
[4.5] = true, -- Boss / Co-Owner
[4] = true, -- Head Admin
[3] = true, -- Admin
[2.5] = true, -- Support
[2] = false, -- Moderator (optional)
[1] = false, -- VIP (optional)
}
-- Utility & Protection Toggles
local antiAfk = true -- 24/7 Anti-AFK (Default ON)
local antiRagdoll = false -- Anti-Ragdoll & No Fall Damage (Default OFF)
local highCashAlert = true -- Alert on high cash drops >= 100 DH (Default ON)
local scriptKilled = false
local isCollectingCash = false
local lastCleanTick = 0
local SERVER_COOLDOWN = 6.1
local currentActivity = "Idle"
-- Selected player for TP
local selectedPlayerName = nil
-- Connections
local antiAfkConn = nil
local antiRagdollConn = nilwd
local descendantConn = nil
local rewardConn = nil
local coinsConn = nil
-- ==========================================
-- RANK & ADMIN ESP SYSTEM (HD ADMIN INTEGRATED)
-- ==========================================
local RANK_DATA = {
[0] = {name = "PLAYER", color = Color3.fromRGB(200, 200, 200), isStaff = false},
[1] = {name = "VIP", color = Color3.fromRGB(85, 255, 127), isStaff = false},
[2] = {name = "MOD", color = Color3.fromRGB(85, 170, 255), isStaff = true},
[2.5] = {name = "SUPPORT", color = Color3.fromRGB(255, 170, 0), isStaff = true},
[3] = {name = "ADMIN", color = Color3.fromRGB(255, 85, 85), isStaff = true},
[4] = {name = "HEAD ADMIN", color = Color3.fromRGB(255, 30, 30), isStaff = true},
[4.5] = {name = "BOSS", color = Color3.fromRGB(180, 50, 255), isStaff = true},
[5] = {name = "OWNER", color = Color3.fromRGB(255, 215, 0), isStaff = true},
}
-- Individual toggles for each rank
local espFilters = {
[5] = true, -- Owner
[4.5] = true, -- Boss
[4] = true, -- Head Admin
[3] = true, -- Admin
[2.5] = true, -- Support
[2] = true, -- Mod
[1] = true, -- VIP
[0] = false, -- Regular Players (default OFF to avoid clutter)
}
local serverRanks = {} -- [Player.Name] = rankNumber
local function fetchServerRanks()
local sig = ReplicatedStorage:FindFirstChild("HDAdminHDClient") and ReplicatedStorage.HDAdminHDClient:FindFirstChild("Signals")
local rf = sig and sig:FindFirstChild("RetrieveServerRanks")
if rf and rf:IsA("RemoteFunction") then
local s, res = pcall(function() return rf:InvokeServer() end)
if s and type(res) == "table" then
local newRanks = {}
for _, entry in ipairs(res) do
if entry.Player and entry.RankId then
local numRank = tonumber(entry.RankId) or entry.RankId
newRanks[entry.Player.Name] = numRank
end
end
serverRanks = newRanks
end
end
end
-- Initialize server ranks immediately
task.spawn(function()
pcall(fetchServerRanks)
end)
-- Continuous server ranks updater loop (runs independently of ESP to ensure auto-farm always has fresh ranks)
task.spawn(function()
while not scriptKilled do
pcall(fetchServerRanks)
task.wait(3)
end
end)
-- Refresh on player join
Players.PlayerAdded:Connect(function()
task.delay(1, function()
if not scriptKilled then
pcall(fetchServerRanks)
end
end)
end)
-- Helper: Returns list of High Staff only (Support 2.5 and above, excluding Mods, VIPs, Players)
local function getHighStaffList()
fetchServerRanks()
local list = {}
for name, rId in pairs(serverRanks) do
if rId >= 2.5 then
local info = RANK_DATA[rId] or {name = "RANK " .. rId}
table.insert(list, string.format("[%s] %s", info.name, name))
end
end
return list
end
local function clearAllESP()
for _, p in ipairs(Players:GetPlayers()) do
if p.Character then
local bg = p.Character:FindFirstChild("RankESP_Tag", true)
if bg then bg:Destroy() end
local hl = p.Character:FindFirstChild("RankESP_HL")
if hl then hl:Destroy() end
end
end
end
local function updatePlayerESP(p)
if p == lp or not p.Character then return end
local head = p.Character:FindFirstChild("Head")
local hrp = p.Character:FindFirstChild("HumanoidRootPart")
if not head or not hrp then return end
local rankId = serverRanks[p.Name] or 0
if not espFilters[rankId] then
local bg = p.Character:FindFirstChild("RankESP_Tag", true)
if bg then bg:Destroy() end
local hl = p.Character:FindFirstChild("RankESP_HL")
if hl then hl:Destroy() end
return
end
local myHrp = lp.Character and lp.Character:FindFirstChild("HumanoidRootPart")
local dist = myHrp and (hrp.Position - myHrp.Position).Magnitude or 0
local info = RANK_DATA[rankId] or {name = "RANK " .. rankId, color = Color3.fromRGB(255, 255, 255), isStaff = false}
-- Overhead BillboardGui
local bg = head:FindFirstChild("RankESP_Tag")
if not bg then
bg = Instance.new("BillboardGui")
bg.Name = "RankESP_Tag"
bg.Adornee = head
bg.Size = UDim2.new(0, 180, 0, 42)
bg.StudsOffset = Vector3.new(0, 2.5, 0)
bg.AlwaysOnTop = true
local lbl = Instance.new("TextLabel")
lbl.Name = "Label"
lbl.Size = UDim2.new(1, 0, 1, 0)
lbl.BackgroundTransparency = 1
lbl.TextScaled = false
lbl.TextSize = 13
lbl.Font = Enum.Font.GothamBold
lbl.TextStrokeTransparency = 0
lbl.TextStrokeColor3 = Color3.new(0, 0, 0)
lbl.Parent = bg
bg.Parent = head
end
local label = bg:FindFirstChild("Label")
if label then
label.TextColor3 = info.color
label.Text = string.format("[%s] %s\n%dm away", info.name, p.DisplayName, math.floor(dist))
end
-- Full-body Highlight visible through walls
local hl = p.Character:FindFirstChild("RankESP_HL")
if not hl then
hl = Instance.new("Highlight")
hl.Name = "RankESP_HL"
hl.Adornee = p.Character
hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
hl.Parent = p.Character
end
hl.FillColor = info.color
hl.OutlineColor = Color3.fromRGB(255, 255, 255)
hl.FillTransparency = info.isStaff and 0.45 or 0.75
hl.OutlineTransparency = 0
end
-- ESP Updater Thread
task.spawn(function()
local lastFetch = 0
while not scriptKilled do
if rankESP then
if tick() - lastFetch > 4 then
lastFetch = tick()
fetchServerRanks()
end
for _, p in ipairs(Players:GetPlayers()) do
if p ~= lp then
pcall(function() updatePlayerESP(p) end)
end
end
end
task.wait(0.2)
end
end)
-- ==========================================
-- SMART DROPPER & CUSTOM STAFF RADIUS FILTER
-- Configurable Avoid Ranks & Radius Slider (default 30 studs)
-- ==========================================
-- Helper: Checks if any avoided staff member is within a given radius of the local player
local function getNearbyStaff(radius)
local myChar = lp.Character
local myHrp = myChar and myChar:FindFirstChild("HumanoidRootPart")
if not myHrp then return nil, 0, 0 end
local myPos = myHrp.Position
for _, p in ipairs(Players:GetPlayers()) do
if p ~= lp and p.Character then
local hrp = p.Character:FindFirstChild("HumanoidRootPart")
if hrp then
local dist = (hrp.Position - myPos).Magnitude
if dist <= radius then
local r = serverRanks[p.Name] or 0
if avoidRanks[r] then
return p, dist, r
end
end
end
end
end
return nil, 0, 0
end
local function isCashSafeFromHighStaff(cashPart)
if not cashPart or not cashPart.Parent then return false end
local cashPos = cashPart.Position
-- Check 1: Is anyone with an avoided rank currently within staffAvoidRadius studs of the cash?
for _, p in ipairs(Players:GetPlayers()) do
if p ~= lp and p.Character then
local hrp = p.Character:FindFirstChild("HumanoidRootPart")
if hrp then
local dist = (hrp.Position - cashPos).Magnitude
if dist <= staffAvoidRadius then
local r = serverRanks[p.Name] or 0
if avoidRanks[r] then
return false -- Player with an avoided rank is actively within radius! Skip TP!
end
end
end
end
end
-- Check 2: Dropper Analysis (Bait check vs Walked Away)
local dropperName = cashPart:GetAttribute("DropperName")
if dropperName then
local dropperRank = serverRanks[dropperName] or 0
if avoidRanks[dropperRank] then
if ignoreStaffDroppedForever then
-- Strict mode: permanently blacklist any cash dropped by staff (never touch even if they leave)
return false
end
-- Dynamic mode: check if the staff dropper is still near the cash or left
local dropperPlayer = Players:FindFirstChild(dropperName)
if dropperPlayer and dropperPlayer.Character then
local dropperHrp = dropperPlayer.Character:FindFirstChild("HumanoidRootPart")
if dropperHrp then
local distFromCash = (dropperHrp.Position - cashPos).Magnitude
if distFromCash <= staffAvoidRadius then
return false -- Staff dropper is still within radius! Skip TP!
end
end
end
-- If the staff dropper left the server or walked further than staffAvoidRadius, it is SAFE to collect!
end
end
return true -- Safe!
end
-- ==========================================
-- TIER 1: INSTANT DROPPED CASH COLLECTOR
-- ==========================================
-- Helper: reads cash value from BillboardGui amountOfCash or amount label
local function getCashAmount(cashPart)
if not cashPart or not cashPart.Parent then return 0 end
local bg = cashPart:FindFirstChild("BillboardGui")
if bg then
local numVal = bg:FindFirstChild("amountOfCash")
if numVal and numVal:IsA("NumberValue") and numVal.Value > 0 then
return numVal.Value
end
local label = bg:FindFirstChild("amount")
if label and label:IsA("TextLabel") and label.Text ~= "" then
local num = tonumber(label.Text:match("%d+"))
if num then return num end
end
end
local directNum = cashPart:FindFirstChild("amountOfCash") or cashPart:FindFirstChild("Amount") or cashPart:FindFirstChild("Value")
if directNum and (directNum:IsA("NumberValue") or directNum:IsA("IntValue")) and directNum.Value > 0 then
return directNum.Value
end
return 1
end
-- Helper to find all dropped cash matching filters
local function findCashDrops()
if staffFreezeEnabled and getNearbyStaff(staffFreezeRadius) then
return {}
end
local drops = {}
local char = lp.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
local function checkDrop(child)
if child.Name == "Cash" and child:IsA("BasePart") and child.Parent then
-- Staff Avoidance Check
if not isCashSafeFromHighStaff(child) then
return
end
local dist = hrp and (child.Position - hrp.Position).Magnitude or 9999
if dist <= 7 then
table.insert(drops, child)
else
local amt = getCashAmount(child)
if amt >= minCashToTP then
table.insert(drops, child)
end
end
end
end
for _, child in ipairs(workspace:GetChildren()) do
checkDrop(child)
end
local dropsFolder = workspace:FindFirstChild("Drops") or workspace:FindFirstChild("Debris")
if dropsFolder then
for _, child in ipairs(dropsFolder:GetChildren()) do
checkDrop(child)
end
end
return drops
end
-- Helper: temporarily disables collision on character parts
local function enableNoclip(character)
local conn = RunService.Stepped:Connect(function()
if character and character.Parent then
for _, part in ipairs(character:GetDescendants()) do
if part:IsA("BasePart") and part.CanCollide then
part.CanCollide = false
end
end
end
end)
return conn
end
-- Helper: properly restores collision on character parts according to Roblox avatar physics
local function disableNoclip(character)
if not character or not character.Parent then return end
for _, part in ipairs(character:GetDescendants()) do
if part:IsA("BasePart") then
local name = part.Name
-- In Roblox physics, ONLY Torso / UpperTorso / LowerTorso and Head have collision.
-- Limbs (arms, legs) and accessories MUST have CanCollide = false, otherwise the avatar gets stuck/frozen!
if name == "Torso" or name == "UpperTorso" or name == "LowerTorso" or name == "Head" then
part.CanCollide = true
else
part.CanCollide = false
end
end
end
end
-- Helper: un-jams character collision and physics state anytime
local function unstuckCharacter()
local char = lp.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChildOfClass("Humanoid")
if hrp then
hrp.AssemblyLinearVelocity = Vector3.zero
hrp.AssemblyAngularVelocity = Vector3.zero
hrp.CFrame = hrp.CFrame + Vector3.new(0, 0.5, 0)
end
disableNoclip(char)
if hum then
hum.PlatformStand = false
hum.Sit = false
hum:ChangeState(Enum.HumanoidStateType.GettingUp)
task.wait(0.04)
hum:ChangeState(Enum.HumanoidStateType.Running)
end
end
-- Teleports to cash, claims via prompt/touch until server destroys it, then returns
local function collectCashPart(cashPart)
if not cashPart or not cashPart.Parent or isCollectingCash or scriptKilled then return end
local char = lp.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
local hum = char and char:FindFirstChildOfClass("Humanoid")
if not hrp or not hum then return end
if staffFreezeEnabled and getNearbyStaff(staffFreezeRadius) then
return
end
if not isCashSafeFromHighStaff(cashPart) then
return
end
isCollectingCash = true
local success, err = pcall(function()
local wasSitting = hum.Sit
local initialCFrame = hrp.CFrame
local returnSeat = hum.SeatPart
local returnCFrame = initialCFrame
if wasSitting and returnSeat and returnSeat.Parent then
returnCFrame = returnSeat.CFrame + Vector3.new(0, 2.0, 0)
else
returnCFrame = initialCFrame + Vector3.new(0, 0.2, 0)
end
task.wait(0.04)
if not cashPart or not cashPart.Parent then
return
end
local prompt = cashPart:FindFirstChildOfClass("ProximityPrompt")
local dist = (cashPart.Position - hrp.Position).Magnitude
if dist <= 7 then
-- Close proximity grab
local start = tick()
while cashPart and cashPart.Parent and (tick() - start < 0.6) and not scriptKilled do
if prompt and prompt.Parent then
fireproximityprompt(prompt)
end
firetouchinterest(hrp, cashPart, 0)
task.wait(0.04)
firetouchinterest(hrp, cashPart, 1)
task.wait(0.04)
end
else
-- Distant grab
local amt = getCashAmount(cashPart)
if amt < minCashToTP then
return
end
if wasSitting then
hum.Sit = false
task.wait(0.04)
end
local noclipConn = nil
if autoNoclipOnTP then
noclipConn = enableNoclip(char)
end
local targetCFrame
if tpUnderFloor then
targetCFrame = cashPart.CFrame - Vector3.new(0, underFloorDepth, 0)
else
targetCFrame = cashPart.CFrame + Vector3.new(0, 1.5, 0)
end
local start = tick()
while cashPart and cashPart.Parent and (tick() - start < 1.0) and not scriptKilled do
hrp.AssemblyLinearVelocity = Vector3.zero
hrp.AssemblyAngularVelocity = Vector3.zero
hrp.CFrame = targetCFrame
if prompt and prompt.Parent then
fireproximityprompt(prompt)
end
firetouchinterest(hrp, cashPart, 0)
task.wait(0.04)
firetouchinterest(hrp, cashPart, 1)
task.wait(0.04)
end
if not scriptKilled then
-- 1. Stop noclip and restore proper collision
if noclipConn then
noclipConn:Disconnect()
noclipConn = nil
end
disableNoclip(char)
-- 2. Return to position with zero velocity
hrp.AssemblyLinearVelocity = Vector3.zero
hrp.AssemblyAngularVelocity = Vector3.zero
hrp.CFrame = returnCFrame
-- 3. Restore running state and clear platform stand
if hum and hum.Parent then
hum.PlatformStand = false
hum:ChangeState(Enum.HumanoidStateType.Running)
end
-- 4. If was sitting, re-seat cleanly
if wasSitting and returnSeat and returnSeat.Parent then
task.wait(0.06)
local chairPrompt = returnSeat.Parent:FindFirstChildOfClass("ProximityPrompt") or returnSeat:FindFirstChildOfClass("ProximityPrompt")
local pillow = returnSeat.Parent:FindFirstChild("pillow")
local pillowPrompt = pillow and pillow:FindFirstChildOfClass("ProximityPrompt")
local p = chairPrompt or pillowPrompt
if p then
fireproximityprompt(p)
end
end
else
if noclipConn then
noclipConn:Disconnect()
noclipConn = nil
end
disableNoclip(char)
end
end
end)
if not success then
warn("[MoroccoHub] Error collecting cash:", err)
pcall(function() disableNoclip(char) end)
end
isCollectingCash = false
end
local function collectAllCashDrops(drops)
for _, cashPart in ipairs(drops) do
if scriptKilled or not autoCollectCash then break end
if cashPart and cashPart.Parent and isCashSafeFromHighStaff(cashPart) then
collectCashPart(cashPart)
task.wait(0.12)
end
end
end
-- Monitor newly spawned cash instantly via DescendantAdded
descendantConn = workspace.DescendantAdded:Connect(function(desc)
if scriptKilled then return end
if desc.Name == "Cash" and desc:IsA("BasePart") then
-- Identify dropper by nearest player within 3.5 studs at spawn time
task.spawn(function()
local spawnPos = desc.Position
local nearestPlayer = nil
local nearestDist = 3.5
for _, player in ipairs(Players:GetPlayers()) do
if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
local d = (player.Character.HumanoidRootPart.Position - spawnPos).Magnitude
if d < nearestDist then
nearestDist = d
nearestPlayer = player
end
end
end
if nearestPlayer then
desc:SetAttribute("DropperName", nearestPlayer.Name)
end
local amt = getCashAmount(desc)
if highCashAlert and amt >= 100 then
pcall(function()
Rayfield:Notify({
title = "High Cash Drop Alert!",
content = string.format("%d DH dropped near %s!", amt, nearestPlayer and nearestPlayer.DisplayName or "someone"),
})
end)
end
end)
if autoCollectCash and not isCollectingCash then
task.spawn(function()
task.wait(0.05)
if staffFreezeEnabled and getNearbyStaff(staffFreezeRadius) then return end
if desc and desc.Parent and isCashSafeFromHighStaff(desc) then
local char = lp.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
local dist = hrp and (desc.Position - hrp.Position).Magnitude or 9999
local amt = getCashAmount(desc)
if dist <= 7 or amt >= minCashToTP then
collectCashPart(desc)
end
end
end)
end
end
end)
-- ==========================================
-- TIER 2: TIC-TAC-TOE (XO) AUTO-FARMER
-- ==========================================
local WIN_LINES = {
{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, -- Rows
{1, 4, 7}, {2, 5, 8}, {3, 6, 9}, -- Columns
{1, 5, 9}, {3, 5, 7} -- Diagonals
}
local function getBoardState(ttt)
local cells = {}
for i = 1, 9 do
local x = ttt:FindFirstChild("X" .. i)
local o = ttt:FindFirstChild("O" .. i)
if x and x.Transparency < 0.5 then
cells[i] = "X"
elseif o and o.Transparency < 0.5 then
cells[i] = "O"
else
cells[i] = nil
end
end
return cells
end
local function isRoundOver(ttt)
for i = 1, 8 do
local w = ttt:FindFirstChild("Win" .. i)
if w and w.Transparency < 0.5 then
return true
end
end
local cat = ttt:FindFirstChild("Cat")
if cat and cat.Transparency < 0.5 then
return true
end
return false
end
local function getBestMove(cells, mySym, oppSym)
for _, line in ipairs(WIN_LINES) do
local a, b, c = line[1], line[2], line[3]
if cells[a] == mySym and cells[b] == mySym and not cells[c] then return c end
if cells[a] == mySym and cells[c] == mySym and not cells[b] then return b end
if cells[b] == mySym and cells[c] == mySym and not cells[a] then return a end
end
for _, line in ipairs(WIN_LINES) do
local a, b, c = line[1], line[2], line[3]
if cells[a] == oppSym and cells[b] == oppSym and not cells[c] then return c end
if cells[a] == oppSym and cells[c] == oppSym and not cells[b] then return b end
if cells[b] == oppSym and cells[c] == oppSym and not cells[a] then return a end
end
if not cells[5] then return 5 end
local corners = {1, 3, 7, 9}
for _, idx in ipairs(corners) do
if not cells[idx] then return idx end
end
local sides = {2, 4, 6, 8}
for _, idx in ipairs(sides) do
if not cells[idx] then return idx end
end
return nil
end
local function getMySymbol(board)
local sf = board:FindFirstChild("scoreFrame")
local frame = sf and sf:FindFirstChild("interior") and sf.interior:FindFirstChild("SurfaceGui") and sf.interior.SurfaceGui:FindFirstChild("Frame")
if not frame then return nil, nil, 0 end
local p1 = frame:FindFirstChild("player1Name") and frame.player1Name.Text or ""
local p2 = frame:FindFirstChild("player2Name") and frame.player2Name.Text or ""
local myName = lp.Name:lower()
local myDisplay = lp.DisplayName:lower()
if p1:lower() == myName or p1:lower() == myDisplay then
return "X", "O", 1
elseif p2:lower() == myName or p2:lower() == myDisplay then
return "O", "X", 2
end
return nil, nil, 0
end
local function sitAtChair(chair)
if staffFreezeEnabled and getNearbyStaff(staffFreezeRadius) then return false end
local char = lp.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
local hum = char and char:FindFirstChildOfClass("Humanoid")
if not hrp or not hum then return false end
if hum.Sit then return true end
local pillow = chair:FindFirstChild("pillow")
if not pillow then return false end
local prompt = pillow:FindFirstChildOfClass("ProximityPrompt")
hrp.AssemblyLinearVelocity = Vector3.zero
hrp.CFrame = pillow.CFrame + Vector3.new(0, 2, 0)
task.wait(0.1)
if prompt then
fireproximityprompt(prompt)
end
local sitStart = tick()
while not hum.Sit and (tick() - sitStart < 1.0) and not scriptKilled and not isCollectingCash do
if prompt then fireproximityprompt(prompt) end
task.wait(0.1)
end
return hum.Sit
end
local function findBestTicTacToeBoard()
local boardsFolder = workspace:FindFirstChild("TICTACTOE")
if not boardsFolder then return nil, nil, false end
local hotBoard, hotChair = nil, nil
local emptyBoard, emptyChair = nil, nil
for _, board in ipairs(boardsFolder:GetChildren()) do
if board.Name == "TICTACTOE_BOARD" then
local sf = board:FindFirstChild("scoreFrame")
local frame = sf and sf:FindFirstChild("interior") and sf.interior:FindFirstChild("SurfaceGui") and sf.interior.SurfaceGui:FindFirstChild("Frame")
local p1 = frame and frame:FindFirstChild("player1Name") and frame.player1Name.Text or "Unknown"
local p2 = frame and frame:FindFirstChild("player2Name") and frame.player2Name.Text or "Unknown"
local c1 = board:FindFirstChild("ticTacToeChair1")
local c2 = board:FindFirstChild("ticTacToeChair2")
local myName = lp.Name:lower()
local myDisplay = lp.DisplayName:lower()
local imP1 = (p1:lower() == myName or p1:lower() == myDisplay)
local imP2 = (p2:lower() == myName or p2:lower() == myDisplay)
if imP1 or imP2 then
local myChair = imP1 and c1 or c2
local hasOpponent = (imP1 and p2 ~= "Unknown") or (imP2 and p1 ~= "Unknown")
return board, myChair, hasOpponent
end
if p1 ~= "Unknown" and p2 == "Unknown" and c2 then
hotBoard = board
hotChair = c2
elseif p2 ~= "Unknown" and p1 == "Unknown" and c1 then
hotBoard = board
hotChair = c1
end
if p1 == "Unknown" and p2 == "Unknown" and not emptyBoard and c1 then
emptyBoard = board
emptyChair = c1
end
end
end
if hotBoard then
return hotBoard, hotChair, true
end
return emptyBoard, emptyChair, false
end
local function playTicTacToeStep(board, chair)
if isCollectingCash or scriptKilled then return end
local char = lp.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
if not hum then return end
if not hum.Sit then
sitAtChair(chair)
task.wait(0.3)
end
local ttt = board:FindFirstChild("tic tac toe table") and board["tic tac toe table"]:FindFirstChild("Tic Tac Toe")
if not ttt then return end
local mySym, oppSym, playerNum = getMySymbol(board)
if not mySym then return end
if isRoundOver(ttt) then
task.wait(0.3)
return
end
local cells = getBoardState(ttt)
local bestMove = getBestMove(cells, mySym, oppSym)
if bestMove then
local det = ttt:FindFirstChild("Detector" .. bestMove)
local cd = det and det:FindFirstChildOfClass("ClickDetector")
if cd then
fireclickdetector(cd)
end
end
task.wait(0.25)
end
-- ==========================================
-- TIER 3: CLEANING JOB (AUTO-TP & SWEEP)
-- ==========================================
local function getActiveDirtFolder()
local cj = workspace:FindFirstChild("CleaningJob")
if not cj and workspace:FindFirstChild("GenericModels") then
cj = workspace.GenericModels:FindFirstChild("CleaningJob")
end
if cj then
return cj:FindFirstChild("ActiveDirt")
end
return nil
end
local function getDirtSpots()
local folder = getActiveDirtFolder()
if not folder then return {} end
local spots = {}
for _, child in ipairs(folder:GetChildren()) do
if child:IsA("BasePart") and child.Name:match("^DirtSpot_%d+$") then
table.insert(spots, child)
end
end
return spots
end
local function equipBroom()
local char = lp.Character
if not char then return false end
if char:FindFirstChild("Broom") then return true end
local broom = lp.Backpack:FindFirstChild("Broom")
if broom and char:FindFirstChildOfClass("Humanoid") then
char.Humanoid:EquipTool(broom)
return true
end
return false
end
local function getClosestDirtSpot()
local spots = getDirtSpots()
local char = lp.Character
if not char then return nil end
local hrp = char:FindFirstChild("HumanoidRootPart")
if not hrp then return nil end
local closest = nil
local minDist = math.huge
for _, spot in ipairs(spots) do
if spot and spot.Parent then
local dist = (spot.Position - hrp.Position).Magnitude
if dist < minDist then
minDist = dist
closest = spot
end
end
end
return closest, minDist
end
if rewardNotify then
rewardConn = rewardNotify.OnClientEvent:Connect(function()
lastCleanTick = tick()
end)
end
local coins = lp:FindFirstChild("leaderstats") and lp.leaderstats:FindFirstChild("Coins")
if coins then
coinsConn = coins.Changed:Connect(function()
lastCleanTick = tick()
end)
end
local function runSweepingStep()
if isCollectingCash or scriptKilled then return end
if staffFreezeEnabled and getNearbyStaff(staffFreezeRadius) then return end
local char = lp.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
local hum = char and char:FindFirstChildOfClass("Humanoid")
if not hrp or not hum then return end
if hum.Sit then
hum.Sit = false
task.wait(0.1)
end
if autoSweep then
equipBroom()
end
if autoTP then
local spot = getClosestDirtSpot()
if spot and spot.Parent and not scriptKilled and not isCollectingCash then
hrp.CFrame = CFrame.new(spot.Position + Vector3.new(0, 2.5, 0))
local spotStartTime = tick()
while spot and spot.Parent and autoTP and not scriptKilled and not isCollectingCash do
if staffFreezeEnabled and getNearbyStaff(staffFreezeRadius) then
break
end
if autoCollectCash and #findCashDrops() > 0 then
break
end
if autoTicTacToe then
local _, _, hasOpp = findBestTicTacToeBoard()
if hasOpp then
break
end
end
local timeSinceLast = tick() - lastCleanTick
if timeSinceLast >= SERVER_COOLDOWN and autoSweep and __r26 then
__r26:FireServer(spot.Name)
task.wait(0.3)
else
task.wait(0.1)
end
if tick() - spotStartTime > 12 then
break
end
end
task.wait(0.15)
else
task.wait(0.5)
end
else
local spot, dist = getClosestDirtSpot()
if spot and spot.Parent and dist <= 10 and autoSweep then
local timeSinceLast = tick() - lastCleanTick
if timeSinceLast >= SERVER_COOLDOWN and __r26 then
__r26:FireServer(spot.Name)
lastCleanTick = tick()
task.wait(0.4)
end
end
end
end
-- ==========================================
-- MASTER PRIORITY CONTROLLER
-- Priority: Dropped Cash > Tic-Tac-Toe > Sweeping
-- ==========================================
task.spawn(function()
local lastFreezeNotify = 0
while not scriptKilled do
-- Staff Proximity Freeze: If staff is within staffFreezeRadius of YOU, freeze all TP and farming
if staffFreezeEnabled then
local staffMember, dist, rank = getNearbyStaff(staffFreezeRadius)
if staffMember then
local rankInfo = RANK_DATA[rank] or {name = "STAFF"}
currentActivity = string.format("FROZEN: [%s] %s (%dm)", rankInfo.name, staffMember.DisplayName, math.floor(dist))
if tick() - lastFreezeNotify > 15 then
lastFreezeNotify = tick()
pcall(function()
Window:Notify({
title = "Staff Proximity Freeze Active",
content = string.format("[%s] %s is %d studs away! TP & farming frozen.", rankInfo.name, staffMember.DisplayName, math.floor(dist)),
})
end)
end
task.wait(0.4)
continue
end
end
local cashDrops = findCashDrops()
if autoCollectCash and #cashDrops > 0 then
currentActivity = "Collecting Cash"
collectAllCashDrops(cashDrops)
task.wait(0.1)
continue
end
if autoTicTacToe then
local board, chair, hasOpponent = findBestTicTacToeBoard()
if hasOpponent and board and chair then
currentActivity = "Tic-Tac-Toe Match"
playTicTacToeStep(board, chair)
task.wait(0.1)
continue
end
if not autoSweep and not autoTP and board and chair then
currentActivity = "Waiting at XO Table"
sitAtChair(chair)
task.wait(0.5)
continue
end
end
if autoTP or autoSweep then
currentActivity = "Sweeping Dirt"
runSweepingStep()
task.wait(0.1)
continue
end
currentActivity = "Idle"
task.wait(0.3)
end
end)
-- ==========================================
-- UTILITY FUNCTIONS: WAYPOINTS, PLAYERS, AFK, RAGDOLL
-- ==========================================
local WAYPOINTS = {
["Spawn"] = Vector3.new(597.6, 9.5, 170.4),
["7anota (Shop)"] = Vector3.new(576.8, 24.6, 92.5),
["Bank NPC"] = Vector3.new(535.2, 14.0, -133.4),
["XO Arena"] = Vector3.new(520.2, 20.6, 95.7),
["Theatre"] = Vector3.new(191.8, 14.3, 81.1),
["Sports Field (Soccer)"] = Vector3.new(18.0, 12.6, 232.9),
["Safe Rooftop"] = Vector3.new(-221.0, 42.7, -19.9),
}
local function teleportTo(pos)
local char = lp.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
local hum = char and char:FindFirstChildOfClass("Humanoid")
if hrp and hum then
if hum.Sit then hum.Sit = false task.wait(0.05) end
hrp.AssemblyLinearVelocity = Vector3.zero
hrp.AssemblyAngularVelocity = Vector3.zero
hrp.CFrame = CFrame.new(pos + Vector3.new(0, 3, 0))
end
end
local function getPlayerList()
local names = {}
for _, p in ipairs(Players:GetPlayers()) do
if p ~= lp then
table.insert(names, p.Name)
end
end
table.sort(names)
if #names == 0 then table.insert(names, "No other players") end
return names
end
-- Anti-AFK Setup
local function setupAntiAfk()
if antiAfkConn then antiAfkConn:Disconnect() end
antiAfkConn = lp.Idled:Connect(function()
if antiAfk and not scriptKilled then
pcall(function()
VirtualUser:CaptureController()
VirtualUser:ClickButton2(Vector2.zero)
print("[MoroccoHub] Anti-AFK simulated input successfully.")
end)
end
end)
end
-- Anti-Ragdoll & No Fall Damage Setup
local function setupAntiRagdoll(val)
antiRagdoll = val
if antiRagdollConn then antiRagdollConn:Disconnect() antiRagdollConn = nil end
if val then
antiRagdollConn = RunService.Stepped:Connect(function()
local char = lp.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
if hum then
hum:SetStateEnabled(Enum.HumanoidStateType.Ragdoll, false)
hum:SetStateEnabled(Enum.HumanoidStateType.FallingDown, false)
if hum:GetState() == Enum.HumanoidStateType.Ragdoll or hum:GetState() == Enum.HumanoidStateType.FallingDown then
hum:ChangeState(Enum.HumanoidStateType.GettingUp)
end
end
end)
end
end
-- Server Rejoin
local function serverRejoin(notifyWindow)
if notifyWindow then
notifyWindow:Notify({ title = "Rejoining...", content = "Reconnecting to the same server..." })
end
task.wait(0.3)
if #Players:GetPlayers() <= 1 then
TeleportService:Teleport(game.PlaceId, lp)
else
TeleportService:TeleportToPlaceInstance(game.PlaceId, game.JobId, lp)
end
end
-- Server Hop
local function serverHop(notifyWindow)
if notifyWindow then
notifyWindow:Notify({ title = "Server Hop", content = "Searching for active public servers..." })
end
task.spawn(function()
local placeId = game.PlaceId
local url = string.format("https://games.roblox.com/v1/games/%d/servers/Public?sortOrder=Asc&limit=100", placeId)
local success, res = pcall(function()
return game:HttpGet(url)
end)
if not success or not res then
if notifyWindow then
notifyWindow:Notify({ title = "Server Hop Error", content = "Failed to fetch servers from Roblox API." })
end
return
end
local ok, data = pcall(function() return HttpService:JSONDecode(res) end)
if not ok or not data or not data.data then
if notifyWindow then
notifyWindow:Notify({ title = "Server Hop Error", content = "Invalid server data response." })
end
return
end
local validServers = {}
for _, server in ipairs(data.data) do
if server.id ~= game.JobId and server.playing < server.maxPlayers then
table.insert(validServers, server.id)
end
end
if #validServers > 0 then
local targetId = validServers[math.random(1, #validServers)]
if notifyWindow then
notifyWindow:Notify({ title = "Teleporting...", content = "Connecting to new server: " .. targetId:sub(1, 8) .. "..." })
end
TeleportService:TeleportToPlaceInstance(placeId, targetId, lp)
else
if notifyWindow then
notifyWindow:Notify({ title = "Server Hop", content = "No suitable alternate servers found." })
end
end
end)
end
-- ==========================================
-- CLEANUP HELPER
-- ==========================================
local function cleanupAll()
scriptKilled = true
autoCollectCash = false
autoTicTacToe = false
autoTP = false
autoSweep = false
rankESP = false
antiRagdoll = false
clearAllESP()
if descendantConn then descendantConn:Disconnect() end
if rewardConn then rewardConn:Disconnect() end
if coinsConn then coinsConn:Disconnect() end
if antiAfkConn then antiAfkConn:Disconnect() end
if antiRagdollConn then antiRagdollConn:Disconnect() end
local hum = lp.Character and lp.Character:FindFirstChildOfClass("Humanoid")
if hum and hum.Sit then
hum.Sit = false
end
end
-- ==========================================
-- RAYFIELD GEN2 GUI INTERFACE
-- ==========================================
local Rayfield = loadstring(game:HttpGet("https://sirius.menu/gen2"))()
local Window = Rayfield:CreateWindow({
name = "Morocco Money Hub",
subtitle = "Cash • XO • Cleaner • Ranks",
theme = "cobalt",
})
-- ------------------------------------------
-- TAB 1: AUTO FARM (WITH STAFF AVOIDANCE & RADIUS FILTER)
-- ------------------------------------------
local MainTab = Window:CreateTab({
name = "Auto Farm",
icon = 93364949241311,
})
MainTab:CreateText({
name = "Priority Queue Active",
description = "1. Dropped Cash (Blink) > 2. Tic-Tac-Toe (1 DH) > 3. Sweeping Dirt",
})
MainTab:CreateToggle({
name = "Auto-Collect Dropped Cash [P1]",
description = "Instantly blinks to cash, claims it, and returns immediately",
value = false,
callback = function(val)
autoCollectCash = val
Window:Notify({
title = "Cash Collector",
content = val and "Auto-Collect Cash enabled!" or "Auto-Collect Cash disabled."
})
end,
})
MainTab:CreateInput({
name = "Min Cash Amount to TP",
description = "Only teleports if the cash drop is at or above this number (e.g. 1 or 50)",
placeholder = "1",
value = "1",
numeric = true,
clearOnFocus = false,
callback = function(val)
local num = tonumber(val)
if num and num >= 0 then
minCashToTP = num
Window:Notify({
title = "Cash Filter Updated",
content = "Now only TPing for cash >= " .. num .. " DH!",
})
print("[MoroccoHub] Minimum cash to TP set to:", num)
end
end,
})
MainTab:CreateSection("Staff Avoidance & Anti-Detection")
MainTab:CreateToggle({
name = "Staff Proximity Freeze",
description = "Completely pauses all teleports and farming if selected staff is near YOU",
value = true,
callback = function(val)
staffFreezeEnabled = val
Window:Notify({
title = "Proximity Freeze",
content = val and "Freeze when staff near YOU: Enabled!" or "Freeze when staff near YOU: Disabled."
})
end,
})
MainTab:CreateSlider({
name = "Freeze Radius Around YOU (Studs)",
description = "Do NOT teleport or farm if staff is within this distance of YOUR character (e.g. 50 studs)",
range = {10, 150},
increment = 5,
suffix = " studs",
currentValue = 50,
flag = "StaffFreezeDistanceSlider",
callback = function(val)
staffFreezeRadius = val
print("[MoroccoHub] Staff freeze distance set to:", val)
end,
})
MainTab:CreateSlider({
name = "Avoid Staff Near Cash (Studs)",
description = "Do NOT teleport to cash if staff is within this distance of the cash drop (e.g. 30 studs)",
range = {5, 60},
increment = 1,
suffix = " studs",
currentValue = 30,
flag = "StaffAvoidRadiusSlider",
callback = function(val)
staffAvoidRadius = val
print("[MoroccoHub] Staff avoid radius near cash set to:", val)
end,
})
MainTab:CreateToggle({
name = "Strict Anti-Bait (Ignore Staff Drops Forever)",
description = "If ON: Never touches staff drops even if they walk away. If OFF: Collects cash once staff walks past Avoid Radius.",
value = false,
callback = function(val)
ignoreStaffDroppedForever = val
Window:Notify({
title = "Anti-Bait Mode",
content = val and "Strict Anti-Bait: Permanent staff drop block." or "Dynamic: Cash can be collected once staff walks away."
})
end,
})
MainTab:CreateToggle({
name = "Avoid Owner [Rank 5]",
description = "Do not TP to cash near Owner",
value = true,
callback = function(val)
avoidRanks[5] = val
end,
})
MainTab:CreateToggle({
name = "Avoid Boss / Co-Owner [Rank 4.5]",
description = "Do not TP to cash near Boss / Co-Owner",
value = true,
callback = function(val)
avoidRanks[4.5] = val
end,
})
MainTab:CreateToggle({
name = "Avoid Head Admin [Rank 4]",
description = "Do not TP to cash near Head Admin",
value = true,
callback = function(val)
avoidRanks[4] = val
end,
})
MainTab:CreateToggle({
name = "Avoid Admin [Rank 3]",
description = "Do not TP to cash near Admin",
value = true,
callback = function(val)
avoidRanks[3] = val
end,
})
MainTab:CreateToggle({
name = "Avoid Support [Rank 2.5]",
description = "Do not TP to cash near Support",
value = true,
callback = function(val)
avoidRanks[2.5] = val
end,
})
MainTab:CreateToggle({
name = "Avoid Moderator [Rank 2]",
description = "Do not TP to cash near Moderator (optional)",
value = false,
callback = function(val)
avoidRanks[2] = val
end,
})
MainTab:CreateToggle({
name = "Avoid VIP [Rank 1]",
description = "Do not TP to cash near VIP gamepass owners (optional)",
value = false,
callback = function(val)
avoidRanks[1] = val
end,
})
MainTab:CreateSection("Cash Stealth Controls")
MainTab:CreateToggle({
name = "TP Under Floor (Stealth)",
description = "Teleports deeply beneath the floor so other players cannot see you picking up cash",
value = true,
callback = function(val)
tpUnderFloor = val
Window:Notify({
title = "Stealth TP",
content = val and "Under-floor TP enabled!" or "Surface TP enabled."
})
end,
})
MainTab:CreateSlider({
name = "Under Floor Depth (Studs)",
description = "How far beneath the floor to teleport (8.5 studs is completely invisible)",
range = {5, 9.5},
increment = 0.5,
suffix = " studs",
currentValue = 8.5,
flag = "UnderFloorDepthSlider",
callback = function(val)
underFloorDepth = val
print("[MoroccoHub] Underfloor depth set to:", val)
end,
})
MainTab:CreateToggle({
name = "Auto-Noclip on Cash TP",
description = "Disables collision while teleporting underground, then turns it off upon return",
value = true,
callback = function(val)
autoNoclipOnTP = val
Window:Notify({
title = "Noclip on TP",
content = val and "Noclip during TP enabled!" or "Noclip during TP disabled."
})
end,
})
MainTab:CreateSection("Mini-Games & Cleaning")
MainTab:CreateToggle({
name = "Auto-Play Tic-Tac-Toe [P2]",
description = "Auto-joins boards with players, plays optimal XO moves, wins 1 DH every round",
value = false,
callback = function(val)
autoTicTacToe = val
Window:Notify({
title = "Tic-Tac-Toe",
content = val and "Auto Tic-Tac-Toe enabled!" or "Auto Tic-Tac-Toe disabled."
})
end,
})
MainTab:CreateToggle({
name = "Auto-Farm Dirt Spots [P3]",
description = "Teleports to dirt spots and cleans with Broom when idle",
value = false,
callback = function(val)
autoTP = val
Window:Notify({
title = "Auto-Dirt",
content = val and "Auto-TP Dirt enabled!" or "Auto-TP Dirt disabled."
})
end,
})
MainTab:CreateToggle({
name = "Auto-Equip Broom",
description = "Automatically equips Broom tool when farming dirt",
value = false,
callback = function(val)
autoSweep = val
if val then equipBroom() end
end,
})
MainTab:CreateButton({
name = "Collect Cash Now",
description = "Scans map and immediately micro-blinks to any eligible cash",
callback = function()
local drops = findCashDrops()
if #drops > 0 then
task.spawn(function()
collectAllCashDrops(drops)
end)
Window:Notify({ title = "Cash Collector", content = "Collecting " .. #drops .. " safe cash drop(s)!" })
else
Window:Notify({ title = "Cash Collector", content = "No safe cash >= " .. minCashToTP .. " DH found." })
end
end,
})
MainTab:CreateButton({
name = "Camp Tic-Tac-Toe Table",
description = "Immediately teleports and sits at Board 1 to wait for challengers",
callback = function()
local boardsFolder = workspace:FindFirstChild("TICTACTOE")
if boardsFolder and boardsFolder:GetChildren()[1] then
local b = boardsFolder:GetChildren()[1]
local c1 = b:FindFirstChild("ticTacToeChair1")
if c1 then
task.spawn(function()
sitAtChair(c1)
Window:Notify({ title = "Tic-Tac-Toe", content = "Seated at Board 1! Waiting for player." })
end)
end
end
end,
})
MainTab:CreateButton({
name = "Unstuck Character / Fix Collisions",
description = "Restores standard body collision, zeroes stuck momentum, and resets humanoid state",
callback = function()
unstuckCharacter()
Window:Notify({ title = "Unstuck", content = "Collisions reset and character unstuck!" })
end,
})
MainTab:CreateButton({
name = "Kill Script & Close GUI",
description = "Completely stops all tasks, unbinds events, and unloads GUI",
callback = function()
cleanupAll()
Window:Unload()
print("[MoroccoHub] Script killed and unloaded.")
end,
})
-- ------------------------------------------
-- TAB 2: TELEPORT (TP TO PLAYER ON TOP + WAYPOINTS)
-- ------------------------------------------
local TeleportTab = Window:CreateTab({
name = "Teleport",
icon = 93364949241311,
})
-- TP TO PLAYER AT THE VERY TOP
TeleportTab:CreateSection("Teleport to Player")
local currentPlayers = getPlayerList()
selectedPlayerName = currentPlayers[1]
local PlayerDropdown = TeleportTab:CreateDropdown({
name = "Select Target Player",
options = currentPlayers,
currentOption = currentPlayers[1] or "No other players",
flag = "TargetPlayerDropdown",
callback = function(val)
selectedPlayerName = type(val) == "table" and val[1] or val
print("[MoroccoHub] Target player selected:", selectedPlayerName)
end,
})
TeleportTab:CreateButton({
name = "Teleport to Selected Player",
description = "Instantly blinks directly to the chosen player's location",
callback = function()
if not selectedPlayerName or selectedPlayerName == "No other players" then
Window:Notify({ title = "Teleport Error", content = "No valid player selected." })
return
end
local target = Players:FindFirstChild(selectedPlayerName)
if target and target.Character and target.Character:FindFirstChild("HumanoidRootPart") then
teleportTo(target.Character.HumanoidRootPart.Position)
Window:Notify({ title = "Teleported", content = "Teleported to " .. target.DisplayName .. "!" })
else
Window:Notify({ title = "Teleport Error", content = "Player character not loaded or player left." })
end
end,
})
TeleportTab:CreateButton({
name = "Refresh Players Dropdown",
description = "Scans server and updates the player list",
callback = function()
currentPlayers = getPlayerList()
selectedPlayerName = currentPlayers[1]
pcall(function()
if PlayerDropdown.Set then
PlayerDropdown:Set(currentPlayers[1])
end
end)
Window:Notify({ title = "Players Refreshed", content = "Found " .. #currentPlayers .. " player(s)." })
end,
})
TeleportTab:CreateSection("Instant Map Waypoints")
TeleportTab:CreateButton({
name = "🚩 Spawn",
description = "Teleports to main spawn point",
callback = function()
teleportTo(WAYPOINTS["Spawn"])
Window:Notify({ title = "Teleport", content = "Teleported to Spawn!" })
end,
})
TeleportTab:CreateButton({
name = "🏪 7anota (Shop)",
description = "Teleports to the main grocery / item shop",
callback = function()
teleportTo(WAYPOINTS["7anota (Shop)"])
Window:Notify({ title = "Teleport", content = "Teleported to 7anota!" })
end,
})
TeleportTab:CreateButton({
name = "🏦 Bank NPC",
description = "Teleports to the Bank building and NPC",
callback = function()
teleportTo(WAYPOINTS["Bank NPC"])
Window:Notify({ title = "Teleport", content = "Teleported to Bank NPC!" })
end,
})
TeleportTab:CreateButton({
name = "❌ XO / Tic-Tac-Toe Arena",
description = "Teleports directly to the Tic-Tac-Toe boards",
callback = function()
teleportTo(WAYPOINTS["XO Arena"])
Window:Notify({ title = "Teleport", content = "Teleported to XO Arena!" })
end,
})
TeleportTab:CreateButton({
name = "🎭 Theatre & Cultural Stage",
description = "Teleports to the amphitheatre / stage area",
callback = function()
teleportTo(WAYPOINTS["Theatre"])
Window:Notify({ title = "Teleport", content = "Teleported to Theatre!" })
end,
})
TeleportTab:CreateButton({
name = "⚽ Football Pitch (Sports Field)",
description = "Teleports to the football pitch / sports area",
callback = function()
teleportTo(WAYPOINTS["Sports Field (Soccer)"])
Window:Notify({ title = "Teleport", content = "Teleported to Football Pitch!" })
end,
})
TeleportTab:CreateButton({
name = "🏰 Safe Rooftop Perch",
description = "Teleports high above the map where nobody can touch you",
callback = function()
teleportTo(WAYPOINTS["Safe Rooftop"])
Window:Notify({ title = "Teleport", content = "Teleported to Safe Rooftop!" })
end,
})
-- ------------------------------------------
-- TAB 3: STAFF & CONFIG (FIXED HIGH STAFF LIST + SERVER HOP + REJOIN)
-- ------------------------------------------
local StaffTab = Window:CreateTab({
name = "Staff & Config",
icon = 93364949241311,
})
StaffTab:CreateSection("High Staff Watcher (Support & Above)")
local HighStaffText = StaffTab:CreateText({
name = "Active High Staff (Support+)",
description = "Click 'Refresh High Staff List' below to scan.",
})
local function refreshHighStaffDisplay()
local staffList = getHighStaffList()
if #staffList > 0 then
local formattedText = table.concat(staffList, "\n")
pcall(function()
if HighStaffText.title then
HighStaffText.title.Text = "Active High Staff (" .. #staffList .. ")"
end
if HighStaffText.body then
HighStaffText.body.Text = formattedText
else
HighStaffText:Set(formattedText)
end
end)
Window:Notify({
title = "High Staff Alert (" .. #staffList .. ")",
content = formattedText,
})
else
local emptyText = "None in server (Mods/VIPs hidden)."
pcall(function()
if HighStaffText.title then
HighStaffText.title.Text = "Active High Staff (0)"
end
if HighStaffText.body then
HighStaffText.body.Text = emptyText
else
HighStaffText:Set(emptyText)
end
end)
Window:Notify({
title = "High Staff Check",
content = "Clear! No Support, Admin, Boss, or Owner detected.",
})
end
end
StaffTab:CreateButton({
name = "Refresh High Staff List",
description = "Scans server for Support [2.5], Admin [3], Head Admin [4], Boss [4.5], Owner [5]",
callback = refreshHighStaffDisplay,
})
StaffTab:CreateSection("ESP Filter by Rank")
StaffTab:CreateToggle({
name = "Master Rank ESP",
description = "Master switch to enable/disable player & staff visual ESP",
value = false,
callback = function(val)
rankESP = val
if not val then
clearAllESP()
Window:Notify({ title = "Rank ESP", content = "Rank ESP disabled." })
else
fetchServerRanks()
Window:Notify({ title = "Rank ESP", content = "Rank ESP enabled!" })
end
end,
})
StaffTab:CreateToggle({
name = "Show Owner & High Staff [3 - 5]",
description = "Displays Owner, Boss, Head Admin, Admin",
value = true,
callback = function(val)
espFilters[5] = val
espFilters[4.5] = val
espFilters[4] = val
espFilters[3] = val
end,
})
StaffTab:CreateToggle({
name = "Show Moderators & Support [2 - 2.5]",
description = "Displays Mod and Support",
value = true,
callback = function(val)
espFilters[2] = val
espFilters[2.5] = val
end,
})
StaffTab:CreateToggle({
name = "Show VIPs [1]",
description = "Displays players with VIP rank",
value = true,
callback = function(val)
espFilters[1] = val
end,
})
StaffTab:CreateToggle({
name = "Show Regular Players [0]",
description = "Displays standard players (non-admins)",
value = false,
callback = function(val)
espFilters[0] = val
end,
})
StaffTab:CreateSection("Server Controls")
StaffTab:CreateButton({
name = "Server Hop",
description = "Finds another active public server with space and teleports",
callback = function()
serverHop(Window)
end,
})
StaffTab:CreateButton({
name = "Server Rejoin",
description = "Rejoins the exact same server instance",
callback = function()
serverRejoin(Window)
end,
})
StaffTab:CreateSection("Protections")
StaffTab:CreateToggle({
name = "24/7 Anti-AFK",
description = "Prevents Roblox 20-minute idle disconnection by simulating input",
value = true,
callback = function(val)
antiAfk = val
if val then setupAntiAfk() end
Window:Notify({
title = "Anti-AFK",
content = val and "24/7 Anti-AFK enabled!" or "Anti-AFK disabled."
})
end,
})
StaffTab:CreateToggle({
name = "Anti-Ragdoll & No Fall Damage",
description = "Prevents falling down, tripping, or ragdolling when jumping off roofs",
value = false,
callback = function(val)
setupAntiRagdoll(val)
Window:Notify({
title = "Anti-Ragdoll",
content = val and "Anti-Ragdoll & No Fall Damage enabled!" or "Anti-Ragdoll disabled."
})
end,
})
StaffTab:CreateToggle({
name = "High Cash Drop Alert",
description = "Shows an on-screen alert whenever someone drops >= 100 DH",
value = true,
callback = function(val)
highCashAlert = val
end,
})
-- ==========================================
-- HORIZONTAL MOUSE WHEEL SCROLL FOR TABS BAR
-- ==========================================
task.spawn(function()
task.wait(0.6)
local hui = gethui and gethui() or game:GetService("CoreGui")
local hub = hui:FindFirstChild("Morocco Money Hub", true) or game:GetService("CoreGui"):FindFirstChild("Morocco Money Hub", true)
local tabs = hub and hub:FindFirstChild("Tabs", true)
if tabs and tabs:IsA("ScrollingFrame") then
tabs.AutomaticCanvasSize = Enum.AutomaticSize.X
tabs.ScrollBarThickness = 3
tabs.ScrollBarImageColor3 = Color3.fromRGB(150, 150, 150)
tabs.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseWheel then
tabs.CanvasPosition = Vector2.new(
math.clamp(tabs.CanvasPosition.X - (input.Position.Z * 50), 0, math.max(0, tabs.AbsoluteCanvasSize.X - tabs.AbsoluteWindowSize.X)),
0
)
end
end)
end
end)
-- ==========================================
-- INITIALIZATION & CLEANUP HOOK
-- ==========================================
setupAntiAfk()
unstuckCharacter()
-- Auto-refresh high staff on start
task.spawn(function()
task.wait(1.2)
refreshHighStaffDisplay()
end)
-- Reload-safe teardown hook: safely guarded against nil when running in normal executors
if typeof(STATE) == "table" and type(STATE.onCleanup) == "function" then
STATE.onCleanup(function()
cleanupAll()
pcall(function() Window:Unload() end)
print("[MoroccoHub] Cleaned up previous instance safely via STATE.")
end)
end
print("[MoroccoHub] Version 3.6 Loaded with Anti-Stuck & Proper Physics Collision Restoration!")
Window:Notify({
title = "Morocco Money Hub 3.6",
content = "Loaded! Avatar physics unstuck & collisions fully calibrated.",
})
return "Morocco Money Hub 3.6 deployed successfully!"
Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place