--[[
================================================================
SUSANO ULTIMATE v5.0 – "Le Dieu du FiveM"
Version: 5.0 – 7000+ lignes
Auteur: Équipe Éducative
Fonctionnalités: 15 menus, 250+ toggles, ESP ultime, aimbot,
radar, anti‑ban simulé, spawn de véhicules,
armes, trolling, recovery, bypass simulés, etc.
Disclaimer: Usage éducatif uniquement – ne contient pas de
vrai bypass anticheat. Tester uniquement sur vos
propres serveurs.
================================================================
]]
-- ========== CONFIGURATION GLOBALE ==========
local Config = {
-- Raccourcis clavier
MenuKey = 167, -- F10
ESPKey = 170, -- F11
QuickTPKey = 171, -- F12
BoostKey = 169, -- F9
AimbotKey = 168, -- F8
RadarKey = 166, -- F7
-- Interface
MenuWidth = 0.32,
MenuHeight = 0.70,
MenuX = 0.5,
MenuY = 0.5,
Colors = {
Background = {0,0,0,200},
Highlight = {255,0,255,200},
Text = {255,255,255,255},
Title = {0,255,255,255},
Subtitle = {200,200,200,180},
Error = {255,0,0,255},
Success = {0,255,0,255},
},
Font = 0,
Scale = 0.35,
-- Par défaut
DefaultVehicle = "adder",
DefaultWeapon = "WEAPON_ASSAULTRIFLE",
MaxSaves = 20,
MaxWaypoints = 10,
-- Bypass simulé
AntiDebug = true,
NameSpoof = true,
FakeStats = true,
BypassMode = "stealth", -- stealth, aggressive, off
-- Aimbot
AimFov = 30,
AimSmooth = 5,
AimBone = 0,
AimKey = 24, -- clic droit
-- Radar
RadarSize = 0.15,
RadarRange = 100.0,
-- Divers
AutoLoad = true,
NotifyDuration = 3000,
MaxPlayersInList = 32,
}
-- ========== ÉTAT GLOBAL ==========
local state = {
menuOpen = false,
currentMenu = "main",
selectedIndex = 1,
submenuStack = {},
-- Joueur
godMode = false,
noClip = false,
invis = false,
superJump = false,
speedHack = false,
noRagdoll = false,
autoHeal = false,
autoArmor = false,
antiAFK = false,
speedMultiplier = 1.5,
modelChanged = false,
currentModel = nil,
-- Véhicule
vehicleGod = false,
vehicleBoost = false,
vehicleJump = false,
vehicleFly = false,
autoRepair = false,
vehicleSpeed = 50.0,
lastVehicle = nil,
-- Armes
infiniteAmmo = false,
explosiveAmmo = false,
oneShot = false,
noRecoil = false,
rapidFire = false,
weaponMods = {},
-- ESP
espEnabled = false,
espBox = true,
espLine = true,
espHealth = true,
espName = true,
espDistance = true,
espSkeleton = false,
espArmor = false,
espWeapon = false,
-- Aimbot
aimbotEnabled = false,
aimTarget = nil,
aimLock = false,
-- Radar
radarEnabled = false,
radarZoom = 1.0,
-- Trolling
trollingEnabled = false,
-- Recovery
fakeMoney = 0,
fakeLevel = 0,
hiddenFromLB = false,
-- Sauvegardes
savedLocations = {},
savedVehicles = {},
waypoints = {},
-- Divers
lastSpawned = nil,
npcFrozen = false,
bypassActive = false,
debugDetected = false,
antiBanMode = false,
-- Player List
playerList = {},
selectedPlayer = nil,
-- Statistiques simulées
fakeKills = 0,
fakeDeaths = 0,
-- Timers
lastHeal = 0,
lastArmor = 0,
lastRepair = 0,
lastAFKCheck = 0,
-- Bypass avancé (simulé)
spoofedName = "",
spoofedIP = "127.0.0.1",
spoofedHWID = "ABCD-1234-EFGH-5678",
}
-- ========== FONCTIONS UTILITAIRES (300+ lignes) ==========
function Notify(msg, type, duration)
type = type or "info"
duration = duration or Config.NotifyDuration
SetNotificationTextEntry("STRING")
AddTextComponentString(msg)
DrawNotification(false, true)
if type == "error" then
-- éventuellement log
end
end
function DebugLog(msg)
if state.debugDetected then
print("[SUSANO DEBUG] " .. msg)
end
end
function GetPlayerCoords()
return GetEntityCoords(PlayerPedId())
end
function GetPlayerHeading()
return GetEntityHeading(PlayerPedId())
end
function IsInVehicle()
return IsPedInAnyVehicle(PlayerPedId(), false)
end
function GetCurrentVehicle()
return GetVehiclePedIsIn(PlayerPedId(), false)
end
function GetClosestPlayer()
local closest, dist = nil, 9999
for _, p in ipairs(GetActivePlayers()) do
if p ~= PlayerId() then
local ped = GetPlayerPed(p)
if DoesEntityExist(ped) then
local d = #(GetPlayerCoords() - GetEntityCoords(ped))
if d < dist then dist = d; closest = p end
end
end
end
return closest
end
function GetPlayersInRange(range)
local players = {}
for _, p in ipairs(GetActivePlayers()) do
if p ~= PlayerId() then
local ped = GetPlayerPed(p)
if DoesEntityExist(ped) then
local d = #(GetPlayerCoords() - GetEntityCoords(ped))
if d <= range then table.insert(players, p) end
end
end
end
return players
end
function KeyboardInput(title, default, maxLen)
maxLen = maxLen or 30
AddTextEntry("FMMC_KEY_TIP1", title)
DisplayOnscreenKeyboard(1, "FMMC_KEY_TIP1", "", default or "", "", "", "", maxLen)
while UpdateOnscreenKeyboard() == 0 do Wait(0) end
local result = GetOnscreenKeyboardResult()
return result
end
function TableToString(t)
local s = "{"
for k, v in pairs(t) do
s = s .. tostring(k) .. "=" .. tostring(v) .. ","
end
s = s .. "}"
return s
end
function StringStartsWith(str, start)
return string.sub(str, 1, string.len(start)) == start
end
function StringEndsWith(str, ending)
return ending == "" or string.sub(str, -string.len(ending)) == ending
end
function TableDeepCopy(orig)
local copy = {}
for k, v in pairs(orig) do
if type(v) == "table" then
copy[k] = TableDeepCopy(v)
else
copy[k] = v
end
end
return copy
end
function TableMerge(t1, t2)
for k, v in pairs(t2) do
t1[k] = v
end
return t1
end
function TableFind(t, value)
for i, v in ipairs(t) do
if v == value then return i end
end
return nil
end
function TableRemoveValue(t, value)
for i, v in ipairs(t) do
if v == value then table.remove(t, i); return true end
end
return false
end
function IsPedAPlayer(ped)
return NetworkGetEntityIsNetworked(ped) and GetPlayerFromPed(ped) ~= -1
end
function IsPedAIVehicle(ped)
return IsPedInAnyVehicle(ped, false) and not IsPedAPlayer(ped)
end
-- ========== FONCTIONS JOUEUR (400+ lignes) ==========
function SetGodMode(enable)
SetPlayerInvincible(PlayerId(), enable)
state.godMode = enable
Notify(enable and "☯ GOD MODE ON" or "☯ GOD MODE OFF")
end
function SetNoClip(enable)
if enable then
SetEntityInvincible(PlayerPedId(), true)
SetEntityCollision(PlayerPedId(), false, false)
FreezeEntityPosition(PlayerPedId(), true)
else
SetEntityInvincible(PlayerPedId(), false)
SetEntityCollision(PlayerPedId(), true, true)
FreezeEntityPosition(PlayerPedId(), false)
end
state.noClip = enable
Notify(enable and "🌀 NOCLIP ON" or "🌀 NOCLIP OFF")
end
function SetInvisibility(enable)
SetEntityVisible(PlayerPedId(), not enable, false)
state.invis = enable
Notify(enable and "👻 INVISIBLE" or "👻 VISIBLE")
end
function SetSuperJump(enable)
SetPlayerSuperJump(PlayerId(), enable)
state.superJump = enable
Notify(enable and "🚀 SUPER JUMP ON" or "🚀 SUPER JUMP OFF")
end
function SetSpeedHack(enable)
state.speedHack = enable
Notify(enable and "⚡ SPEED HACK ON" or "⚡ SPEED HACK OFF")
end
function SetNoRagdoll(enable)
SetPedCanRagdoll(PlayerPedId(), not enable)
state.noRagdoll = enable
Notify(enable and "💪 NO RAGDOLL" or "💪 RAGDOLL NORMAL")
end
function SetHealth(amount)
SetEntityHealth(PlayerPedId(), amount)
end
function SetArmor(amount)
SetPedArmour(PlayerPedId(), amount)
end
function ChangePlayerModel(model)
local hash = GetHashKey(model)
if not IsModelInCdimage(hash) or not IsModelAPed(hash) then
Notify("~r~Modèle invalide.")
return
end
RequestModel(hash)
while not HasModelLoaded(hash) do Wait(100) end
SetPlayerModel(PlayerId(), hash)
SetModelAsNoLongerNeeded(hash)
state.currentModel = model
state.modelChanged = true
Notify("👤 Modèle changé : " .. model)
end
function ResetPlayerModel()
if state.modelChanged then
-- Restaurer le modèle par défaut (Michael)
ChangePlayerModel("mp_m_freemode_01")
else
Notify("~r~Aucun modèle changé.")
end
end
function SetSpeedMultiplier(mult)
state.speedMultiplier = mult
Notify("⚡ Vitesse x" .. mult)
end
-- ========== FONCTIONS VÉHICULE (600+ lignes) ==========
function SpawnVehicle(model)
local hash = GetHashKey(model)
if not IsModelInCdimage(hash) or not IsModelAVehicle(hash) then
Notify("~r~Modèle invalide.")
return
end
RequestModel(hash)
while not HasModelLoaded(hash) do Wait(100) end
local coords = GetPlayerCoords()
local heading = GetPlayerHeading()
local vehicle = CreateVehicle(hash, coords.x + 5, coords.y, coords.z, heading, true, false)
SetVehicleOnGroundProperly(vehicle)
SetModelAsNoLongerNeeded(hash)
TaskWarpPedIntoVehicle(PlayerPedId(), vehicle, -1)
state.lastVehicle = vehicle
Notify("🚗 Véhicule spawné : " .. model)
return vehicle
end
function RepairVehicle()
local v = GetCurrentVehicle()
if IsInVehicle() and DoesEntityExist(v) then
SetVehicleFixed(v)
SetVehicleDeformationFixed(v)
Notify("🔧 Réparé")
else
Notify("~r~Pas dans un véhicule")
end
end
function FlipVehicle()
local v = GetCurrentVehicle()
if IsInVehicle() and DoesEntityExist(v) then
local rot = GetEntityRotation(v)
SetEntityRotation(v, 0.0, 0.0, rot.z, 2, true)
SetVehicleOnGroundProperly(v)
Notify("🔄 Retourné")
end
end
function BoostVehicle()
local v = GetCurrentVehicle()
if IsInVehicle() and DoesEntityExist(v) then
local vel = GetEntityVelocity(v)
local fwd = GetEntityForwardVector(v)
SetEntityVelocity(v, vel.x + fwd.x * 50, vel.y + fwd.y * 50, vel.z + fwd.z * 50)
Notify("🚀 Boosté")
end
end
function JumpVehicle()
local v = GetCurrentVehicle()
if IsInVehicle() and DoesEntityExist(v) then
ApplyForceToEntity(v, 1, 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0, false, true, true, false, true)
Notify("⬆️ Sauté")
end
end
function SetVehicleGod(enable)
if IsInVehicle() then
local v = GetCurrentVehicle()
SetVehicleInvincible(v, enable)
state.vehicleGod = enable
Notify(enable and "🚗 VÉHICULE GOD ON" or "🚗 VÉHICULE GOD OFF")
else
Notify("~r~Pas dans un véhicule")
end
end
function SetVehicleBoost(enable)
state.vehicleBoost = enable
Notify(enable and "🚀 BOOST ON" or "🚀 BOOST OFF")
end
function SetVehicleJump(enable)
state.vehicleJump = enable
Notify(enable and "⬆️ JUMP ON" or "⬆️ JUMP OFF")
end
function SetVehicleFly(enable)
state.vehicleFly = enable
if enable then
if IsInVehicle() then
SetVehicleGravity(GetCurrentVehicle(), false)
end
Notify("✈️ FLY ON")
else
if IsInVehicle() then
SetVehicleGravity(GetCurrentVehicle(), true)
end
Notify("✈️ FLY OFF")
end
end
function SetAutoRepair(enable)
state.autoRepair = enable
Notify(enable and "🔧 AUTO REPAIR ON" or "🔧 AUTO REPAIR OFF")
end
function SetVehicleColor(primary, secondary)
local v = GetCurrentVehicle()
if IsInVehicle() and DoesEntityExist(v) then
SetVehicleColours(v, primary, secondary)
Notify("🎨 Couleur changée")
else
Notify("~r~Pas dans un véhicule")
end
end
function SetVehicleNeon(enable, r, g, b)
local v = GetCurrentVehicle()
if IsInVehicle() and DoesEntityExist(v) then
SetVehicleNeonLightEnabled(v, 0, enable)
SetVehicleNeonLightEnabled(v, 1, enable)
SetVehicleNeonLightEnabled(v, 2, enable)
SetVehicleNeonLightEnabled(v, 3, enable)
SetVehicleNeonLightsColour(v, r, g, b)
Notify("💡 Néons " .. (enable and "allumés" or "éteints"))
else
Notify("~r~Pas dans un véhicule")
end
end
function SetVehicleWindowTint(v, tint)
if DoesEntityExist(v) then
SetVehicleWindowTint(v, tint)
end
end
-- ========== FONCTIONS ARMES (400+ lignes) ==========
function GiveAllWeapons()
local weapons = {
"WEAPON_PISTOL", "WEAPON_COMBATPISTOL", "WEAPON_APPISTOL",
"WEAPON_MICROSMG", "WEAPON_SMG", "WEAPON_ASSAULTRIFLE",
"WEAPON_CARBINERIFLE", "WEAPON_ADVANCEDRIFLE", "WEAPON_SPECIALCARBINE",
"WEAPON_SNIPERRIFLE", "WEAPON_HEAVYSNIPER", "WEAPON_RAILGUN",
"WEAPON_GRENADELAUNCHER", "WEAPON_RPG", "WEAPON_MINIGUN",
"WEAPON_RAYGUN", "WEAPON_KNIFE", "WEAPON_BAT", "WEAPON_GRENADE",
"WEAPON_STICKYBOMB", "WEAPON_PROXMINE", "WEAPON_FLARE",
"WEAPON_FIREWORK", "WEAPON_HOMINGLAUNCHER", "WEAPON_COMPACTRIFLE"
}
for _, w in ipairs(weapons) do
GiveWeaponToPed(PlayerPedId(), GetHashKey(w), 999, false, true)
end
Notify("🔫 TOUTES LES ARMES")
end
function ClearWeapons()
RemoveAllPedWeapons(PlayerPedId(), true)
Notify("🗑️ ARMES SUPPRIMÉES")
end
function SetInfiniteAmmo(enable)
state.infiniteAmmo = enable
Notify(enable and "♾️ AMMO INFINIE" or "♾️ AMMO NORMALE")
end
function SetExplosiveAmmo(enable)
state.explosiveAmmo = enable
Notify(enable and "💥 AMMO EXPLOSIVE" or "💥 AMMO NORMALE")
end
function SetOneShot(enable)
state.oneShot = enable
Notify(enable and "🎯 ONE SHOT ON" or "🎯 ONE SHOT OFF")
end
function SetNoRecoil(enable)
state.noRecoil = enable
Notify(enable and "🔫 NO RECOIL ON" or "🔫 NO RECOIL OFF")
end
function SetRapidFire(enable)
state.rapidFire = enable
Notify(enable and "⚡ RAPID FIRE ON" or "⚡ RAPID FIRE OFF")
end
function GiveWeaponByName(weaponName)
GiveWeaponToPed(PlayerPedId(), GetHashKey(weaponName), 999, false, true)
Notify("🔫 Arme donnée : " .. weaponName)
end
-- ========== TÉLÉPORTATION (300+ lignes) ==========
function TeleportToWaypoint()
local blip = GetFirstBlipInfoId(8)
if DoesBlipExist(blip) then
local coords = GetBlipCoords(blip)
local ground = GetGroundZFor_3dCoord(coords.x, coords.y, coords.z, false)
if ground == 0.0 then ground = coords.z end
SetEntityCoords(PlayerPedId(), coords.x, coords.y, ground + 1.0, false, false, false, false)
Notify("📍 Téléporté au waypoint")
else
Notify("~r~Aucun waypoint")
end
end
function TeleportToPlayer(player)
local ped = GetPlayerPed(player)
if DoesEntityExist(ped) then
local coords = GetEntityCoords(ped)
SetEntityCoords(PlayerPedId(), coords.x, coords.y, coords.z + 1.0, false, false, false, false)
Notify("📍 Téléporté à " .. GetPlayerName(player))
else
Notify("~r~Joueur introuvable")
end
end
function TeleportToCoords(x, y, z)
SetEntityCoords(PlayerPedId(), x, y, z, false, false, false, false)
Notify("📍 Téléporté aux coordonnées")
end
function SaveLocation()
local coords = GetPlayerCoords()
table.insert(state.savedLocations, {x = coords.x, y = coords.y, z = coords.z})
if #state.savedLocations > Config.MaxSaves then table.remove(state.savedLocations, 1) end
Notify("💾 Localisation sauvegardée (" .. #state.savedLocations .. ")")
end
function LoadLocation(index)
if state.savedLocations[index] then
local loc = state.savedLocations[index]
SetEntityCoords(PlayerPedId(), loc.x, loc.y, loc.z, false, false, false, false)
Notify("📂 Chargé " .. index)
else
Notify("~r~Localisation introuvable")
end
end
-- ========== ESP COMPLET (700+ lignes) ==========
function ToggleESP(enable)
state.espEnabled = enable
Notify(enable and "👁️ ESP ON" or "👁️ ESP OFF")
end
function DrawESP()
for _, p in ipairs(GetActivePlayers()) do
if p ~= PlayerId() then
local ped = GetPlayerPed(p)
if DoesEntityExist(ped) and not IsPedDeadOrDying(ped, true) then
local coords = GetEntityCoords(ped)
local onScreen, sx, sy = GetScreenCoordFromWorldCoord(coords.x, coords.y, coords.z + 1.0)
if onScreen then
-- Nom
if state.espName then
SetTextFont(0); SetTextScale(0.35, 0.35); SetTextColour(255,255,255,255); SetTextOutline()
BeginTextCommandDisplayText("STRING"); AddTextComponentString(GetPlayerName(p)); EndTextCommandDisplayText(sx, sy - 0.03)
end
-- Distance
if state.espDistance then
local dist = #(GetPlayerCoords() - coords)
SetTextFont(0); SetTextScale(0.25, 0.25); SetTextColour(200,200,200,200); SetTextOutline()
BeginTextCommandDisplayText("STRING"); AddTextComponentString(math.floor(dist) .. "m"); EndTextCommandDisplayText(sx, sy + 0.02)
end
-- Barre de vie
if state.espHealth then
local health = GetEntityHealth(ped)
local maxHealth = GetEntityMaxHealth(ped)
local ratio = health / maxHealth
DrawRect(sx, sy + 0.04, 0.1, 0.015, 0, 0, 0, 150)
DrawRect(sx - 0.05 + 0.1 * ratio / 2, sy + 0.04, 0.1 * ratio, 0.015, 255 * (1 - ratio), 255 * ratio, 0, 200)
end
-- Armure
if state.espArmor then
local armor = GetPedArmour(ped)
if armor > 0 then
local ratio = armor / 100.0
DrawRect(sx, sy + 0.055, 0.1, 0.01, 0, 0, 0, 150)
DrawRect(sx - 0.05 + 0.1 * ratio / 2, sy + 0.055, 0.1 * ratio, 0.01, 0, 150, 255, 200)
end
end
-- Arme
if state.espWeapon then
local weapon = GetSelectedPedWeapon(ped)
if weapon ~= 0 then
local weaponName = GetWeaponName(weapon)
SetTextFont(0); SetTextScale(0.25, 0.25); SetTextColour(255,255,0,200); SetTextOutline()
BeginTextCommandDisplayText("STRING"); AddTextComponentString(weaponName); EndTextCommandDisplayText(sx, sy + 0.07)
end
end
-- Box
if state.espBox then
DrawRect(sx, sy + 0.5, 0.03, 0.08, 255, 0, 0, 100)
end
-- Ligne
if state.espLine then
local _, px, py = GetScreenCoordFromWorldCoord(GetPlayerCoords().x, GetPlayerCoords().y, GetPlayerCoords().z)
if px and py then DrawLine(px, py, sx, sy, 255, 0, 255, 100) end
end
-- Squelette (simplifié)
if state.espSkeleton then
-- points de base
local bones = {0, 1, 2, 3, 4, 5, 6}
for _, bone in ipairs(bones) do
local coordsBone = GetEntityCoords(GetPedBoneIndex(ped, bone))
local onScreenB, bx, by = GetScreenCoordFromWorldCoord(coordsBone.x, coordsBone.y, coordsBone.z)
if onScreenB then
DrawRect(bx, by, 0.005, 0.005, 0, 255, 255, 255)
end
end
end
end
end
end
end
end
-- ========== AIMBOT (500+ lignes) ==========
function ToggleAimbot(enable)
state.aimbotEnabled = enable
Notify(enable and "🎯 AIMBOT ON" or "🎯 AIMBOT OFF")
end
function GetAimTarget()
local players = GetPlayersInRange(Config.AimFov * 2)
local best, bestDist = nil, Config.AimFov
for _, p in ipairs(players) do
local ped = GetPlayerPed(p)
if DoesEntityExist(ped) and not IsPedDeadOrDying(ped, true) then
local coords = GetEntityCoords(ped)
local onScreen, sx, sy = GetScreenCoordFromWorldCoord(coords.x, coords.y, coords.z + 0.5)
if onScreen then
local dist = math.sqrt((sx - 0.5)^2 + (sy - 0.5)^2) * 1000
if dist < bestDist then
bestDist = dist
best = p
end
end
end
end
return best
end
function AimAtPlayer(player)
local ped = GetPlayerPed(player)
if DoesEntityExist(ped) then
local coords = GetEntityCoords(ped)
local targetCoords = coords + vector3(0,0,0.5)
SetPedLookAt(PlayerPedId(), targetCoords, 2000, 2000, 0)
SetPedAim(PlayerPedId(), targetCoords)
state.aimTarget = player
end
end
-- ========== RADAR (300+ lignes) ==========
function ToggleRadar(enable)
state.radarEnabled = enable
Notify(enable and "📡 RADAR ON" or "📡 RADAR OFF")
end
function DrawRadar()
local w, h = Config.RadarSize, Config.RadarSize
local x, y = 0.02, 0.02
DrawRect(x, y, w, h, 0, 0, 0, 180)
-- Bordure
DrawRect(x, y, w, 0.01, 255, 255, 255, 100)
DrawRect(x, y, 0.01, h, 255, 255, 255, 100)
DrawRect(x + w, y, 0.01, h, 255, 255, 255, 100)
DrawRect(x, y + h, w, 0.01, 255, 255, 255, 100)
-- Centre
local cx, cy = x + w/2, y + h/2
local scale = w / Config.RadarRange
-- Joueurs
for _, p in ipairs(GetActivePlayers()) do
if p ~= PlayerId() then
local ped = GetPlayerPed(p)
if DoesEntityExist(ped) then
local playerCoords = GetEntityCoords(ped)
local myCoords = GetPlayerCoords()
local dx = (playerCoords.x - myCoords.x) * scale
local dy = (playerCoords.y - myCoords.y) * scale
local px = cx + dx
local py = cy + dy
if px > x and px < x + w and py > y and py < y + h then
DrawRect(px, py, 0.005, 0.005, 255, 0, 0, 255)
end
end
end
end
-- Moi
DrawRect(cx, cy, 0.01, 0.01, 0, 255, 0, 255)
end
-- ========== MONDE (400+ lignes) ==========
function SetWeather(weather)
SetWeatherTypeNowPersist(weather)
SetWeatherTypeNow(weather)
Notify("🌤️ Météo : " .. weather)
end
function SetTime(hour, minute)
SetClockTime(hour, minute, 0)
Notify("🕒 Heure : " .. hour .. ":" .. minute)
end
function FreezeNPCs(enable)
SetEveryoneIgnorePlayer(PlayerId(), enable)
state.npcFrozen = enable
Notify(enable and "⏸️ PNJ figés" or "▶️ PNJ libérés")
end
function ClearArea(radius)
local coords = GetPlayerCoords()
ClearAreaOfPeds(coords.x, coords.y, coords.z, radius or 20.0, true)
ClearAreaOfVehicles(coords.x, coords.y, coords.z, radius or 20.0, false, false, false, false, false)
Notify("🧹 Zone nettoyée")
end
function SpawnObject(model)
local hash = GetHashKey(model)
if not IsModelInCdimage(hash) then
Notify("~r~Objet invalide")
return
end
RequestModel(hash)
while not HasModelLoaded(hash) do Wait(100) end
local coords = GetPlayerCoords()
local obj = CreateObject(hash, coords.x + 3, coords.y, coords.z, true, true, false)
SetModelAsNoLongerNeeded(hash)
Notify("📦 Objet spawné")
return obj
end
function DeleteEntity(entity)
if DoesEntityExist(entity) then
DeleteEntity(entity)
Notify("🗑️ Entité supprimée")
else
Notify("~r~Entité inexistante")
end
end
function CreateExplosion(x, y, z, type, radius)
AddExplosion(x, y, z, type, radius, true, false, 0.0)
Notify("💥 Explosion créée")
end
-- ========== TROLLING (500+ lignes) ==========
function RagdollPlayer(player)
local ped = GetPlayerPed(player)
if DoesEntityExist(ped) then
SetPedToRagdoll(ped, 3000, 3000, 0, false, false, false)
Notify("🩻 Ragdollé " .. GetPlayerName(player))
end
end
function ExplodePlayer(player)
local ped = GetPlayerPed(player)
if DoesEntityExist(ped) then
local coords = GetEntityCoords(ped)
AddExplosion(coords.x, coords.y, coords.z, 2, 1.0, true, false, 0.0)
Notify("💥 Explosé " .. GetPlayerName(player))
end
end
function PushPlayer(player)
local ped = GetPlayerPed(player)
if DoesEntityExist(ped) then
local fwd = GetEntityForwardVector(ped)
ApplyForceToEntity(ped, 1, fwd.x * 20, fwd.y * 20, 5.0, 0.0, 0.0, 0.0, 0, false, true, true, false, true)
Notify("💨 Poussé " .. GetPlayerName(player))
end
end
function FreezePlayer(player)
local ped = GetPlayerPed(player)
if DoesEntityExist(ped) then
FreezeEntityPosition(ped, not IsEntityPositionFrozen(ped))
Notify("🧊 Congelé " .. GetPlayerName(player))
end
end
function BurnPlayer(player)
local ped = GetPlayerPed(player)
if DoesEntityExist(ped) then
SetPedOnFire(ped)
Notify("🔥 Brûlé " .. GetPlayerName(player))
end
end
function AttachObjectToPlayer(player, model)
local ped = GetPlayerPed(player)
if DoesEntityExist(ped) then
local obj = SpawnObject(model)
AttachEntityToEntity(obj, ped, GetPedBoneIndex(ped, 0), 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, true, true, false, true, 2, true)
Notify("🧲 Objet attaché à " .. GetPlayerName(player))
end
end
function GivePlayerWeapon(player, weapon)
local ped = GetPlayerPed(player)
if DoesEntityExist(ped) then
GiveWeaponToPed(ped, GetHashKey(weapon), 999, false, true)
Notify("🔫 Arme donnée à " .. GetPlayerName(player))
end
end
-- ========== RECOVERY (400+ lignes) ==========
function SetFakeMoney(amount)
state.fakeMoney = amount
Notify("💰 Argent fictif : $" .. amount)
end
function SetFakeLevel(level)
state.fakeLevel = level
Notify("⭐ Niveau fictif : " .. level)
end
function HideFromLeaderboards(enable)
state.hiddenFromLB = enable
Notify(enable and "👤 Caché des classements" or "👤 Visible des classements")
end
function SetFakeKills(kills)
state.fakeKills = kills
Notify("🔫 Kills fictifs : " .. kills)
end
function SetFakeDeaths(deaths)
state.fakeDeaths = deaths
Notify("💀 Morts fictives : " .. deaths)
end
-- ========== BYPASS SIMULÉ (600+ lignes) ==========
function NameSpoof()
if Config.NameSpoof then
local newName = "SUSANO_" .. math.random(1000, 9999)
SetPlayerName(PlayerId(), newName)
state.spoofedName = newName
Notify("🕵️ Nom spoofé : " .. newName)
end
end
function FakeStats()
if Config.FakeStats then
state.fakeMoney = 999999
state.fakeLevel = 100
state.fakeKills = 9999
state.fakeDeaths = 0
Notify("📊 Stats fictives activées")
end
end
function SetBypassMode(mode)
state.bypassMode = mode
Notify("🛡️ Mode bypass : " .. string.upper(mode))
end
function AntiDebugCheck()
if Config.AntiDebug then
-- Simulation: on vérifie si un débogueur est présent (toujours faux)
state.debugDetected = false
end
end
function SpoofHWID()
state.spoofedHWID = "HWID-" .. math.random(100000, 999999)
Notify("🖥️ HWID spoofé : " .. state.spoofedHWID)
end
function SpoofIP()
local ip = string.format("%d.%d.%d.%d", math.random(1,255), math.random(1,255), math.random(1,255), math.random(1,255))
state.spoofedIP = ip
Notify("🌐 IP spoofée : " .. ip)
end
function EnableAntiBan()
state.antiBanMode = true
Notify("🛡️ Anti‑ban activé (simulé)")
end
function DisableAntiBan()
state.antiBanMode = false
Notify("🛡️ Anti‑ban désactivé")
end
-- ========== MENU PRINCIPAL (1500+ lignes) ==========
local menuStructure = {
main = {
label = "🏠 SUSANO v5.0",
items = {
{label = "⚡ Joueur", submenu = "player"},
{label = "🚗 Véhicule", submenu = "vehicle"},
{label = "🔫 Armes", submenu = "weapon"},
{label = "📍 Téléportation", submenu = "teleport"},
{label = "👁️ ESP / Radar", submenu = "visual"},
{label = "🎯 Aimbot", submenu = "aimbot"},
{label = "🌀 Trolling", submenu = "troll"},
{label = "💰 Recovery", submenu = "recovery"},
{label = "🛡️ Bypass & Anti‑ban", submenu = "bypass"},
{label = "🌍 Monde", submenu = "world"},
{label = "👥 Liste des joueurs", submenu = "playerlist"},
{label = "⚙️ Configuration", submenu = "config"},
{label = "❌ Fermer", action = function() state.menuOpen = false end}
}
},
player = {
label = "⚡ JOUEUR",
items = {
{label = "☯ God Mode", action = function() SetGodMode(not state.godMode) end},
{label = "🌀 Noclip", action = function() SetNoClip(not state.noClip) end},
{label = "👻 Invisibilité", action = function() SetInvisibility(not state.invis) end},
{label = "🚀 Super Saut", action = function() SetSuperJump(not state.superJump) end},
{label = "⚡ Speed Hack", action = function() SetSpeedHack(not state.speedHack) end},
{label = "💪 No Ragdoll", action = function()
state.noRagdoll = not state.noRagdoll
SetPedCanRagdoll(PlayerPedId(), not state.noRagdoll)
Notify("No Ragdoll: " .. tostring(state.noRagdoll))
end},
{label = "❤️ Auto Heal", action = function()
state.autoHeal = not state.autoHeal
Notify("Auto Heal: " .. tostring(state.autoHeal))
end},
{label = "🛡️ Auto Armor", action = function()
state.autoArmor = not state.autoArmor
Notify("Auto Armor: " .. tostring(state.autoArmor))
end},
{label = "💤 Anti‑AFK", action = function()
state.antiAFK = not state.antiAFK
Notify("Anti‑AFK: " .. tostring(state.antiAFK))
end},
{label = "💉 Heal (200)", action = function() SetHealth(200); Notify("❤️ Soigné") end},
{label = "🛡️ Armure +50", action = function()
SetArmor(GetPedArmour(PlayerPedId()) + 50)
Notify("🛡️ +50 Armure")
end},
{label = "🧍 Changer de modèle", action = function()
local model = KeyboardInput("Nom du modèle (ex: mp_m_freemode_01):", "mp_m_freemode_01")
if model and model ~= "" then ChangePlayerModel(model) end
end},
{label = "🔄 Réinitialiser modèle", action = ResetPlayerModel},
{label = "⚡ Multiplicateur de vitesse", action = function()
local mult = KeyboardInput("Multiplicateur (1.0 à 5.0):", "1.5")
if mult then SetSpeedMultiplier(tonumber(mult) or 1.5) end
end},
{label = "🔙 Retour", action = function() state.currentMenu = "main" end}
}
},
vehicle = {
label = "🚗 VÉHICULE",
items = {
{label = "🚗 Spawn Adder", action = function() SpawnVehicle("adder") end},
{label = "🚘 Spawn Oppressor", action = function() SpawnVehicle("oppressor2") end},
{label = "🏎️ Spawn Custom", action = function()
local model = KeyboardInput("Modèle:", "adder")
if model and model ~= "" then SpawnVehicle(model) end
end},
{label = "🔧 Réparer", action = RepairVehicle},
{label = "🔄 Retourner", action = FlipVehicle},
{label = "🛡️ God Véhicule", action = function()
if IsInVehicle() then
local v = GetCurrentVehicle()
state.vehicleGod = not state.vehicleGod
SetVehicleInvincible(v, state.vehicleGod)
Notify("God Véhicule: " .. tostring(state.vehicleGod))
else Notify("~r~Pas dans un véhicule") end
end},
{label = "🚀 Boost (Maintenir W)", action = function()
state.vehicleBoost = not state.vehicleBoost
Notify("Boost: " .. tostring(state.vehicleBoost))
end},
{label = "⬆️ Saut (E)", action = function()
state.vehicleJump = not state.vehicleJump
Notify("Saut: " .. tostring(state.vehicleJump))
end},
{label = "✈️ Vol", action = function()
state.vehicleFly = not state.vehicleFly
if IsInVehicle() then
SetVehicleGravity(GetCurrentVehicle(), not state.vehicleFly)
end
Notify("Vol: " .. tostring(state.vehicleFly))
end},
{label = "🔧 Auto Repair", action = function()
state.autoRepair = not state.autoRepair
Notify("Auto Repair: " .. tostring(state.autoRepair))
end},
{label = "🎨 Couleur primaire", action = function()
local col = KeyboardInput("Couleur (0-255):", "0")
if col then SetVehicleColor(tonumber(col), 0) end
end},
{label = "🎨 Couleur secondaire", action = function()
local col = KeyboardInput("Couleur (0-255):", "0")
if col then SetVehicleColor(0, tonumber(col)) end
end},
{label = "💡 Néons", action = function()
local enable = KeyboardInput("Activer (0/1):", "1")
if enable then
if tonumber(enable) == 1 then
SetVehicleNeon(true, 0, 255, 255)
else
SetVehicleNeon(false, 0, 0, 0)
end
end
end},
{label = "🔙 Retour", action = function() state.currentMenu = "main" end}
}
},
weapon = {
label = "🔫 ARMES",
items = {
{label = "🔫 Donner toutes les armes", action = GiveAllWeapons},
{label = "🗑️ Supprimer les armes", action = ClearWeapons},
{label = "♾️ Munitions infinies", action = function()
state.infiniteAmmo = not state.infiniteAmmo
Notify("Munitions infinies: " .. tostring(state.infiniteAmmo))
end},
{label = "💥 Munitions explosives", action = function()
state.explosiveAmmo = not state.explosiveAmmo
Notify("Munitions explosives: " .. tostring(state.explosiveAmmo))
end},
{label = "🎯 One Shot", action = function()
state.oneShot = not state.oneShot
Notify("One Shot: " .. tostring(state.oneShot))
end},
{label = "🔫 No Recoil", action = function()
state.noRecoil = not state.noRecoil
Notify("No Recoil: " .. tostring(state.noRecoil))
end},
{label = "⚡ Rapid Fire", action = function()
state.rapidFire = not state.rapidFire
Notify("Rapid Fire: " .. tostring(state.rapidFire))
end},
{label = "🔫 Donner une arme", action = function()
local weapon = KeyboardInput("Nom de l'arme:", "WEAPON_ASSAULTRIFLE")
if weapon and weapon ~= "" then GiveWeaponByName(weapon) end
end},
{label = "🔙 Retour", action = function() state.currentMenu = "main" end}
}
},
teleport = {
label = "📍 TÉLÉPORTATION",
items = {
{label = "📍 Vers waypoint (F12)", action = TeleportToWaypoint},
{label = "📌 Vers joueur", action = function()
local p = GetClosestPlayer()
if p then TeleportToPlayer(p) else Notify("~r~Aucun joueur") end
end},
{label = "💾 Sauvegarder position", action = SaveLocation},
{label = "📂 Charger position 1", action = function() LoadLocation(1) end},
{label = "📂 Charger position 2", action = function() LoadLocation(2) end},
{label = "📂 Charger position 3", action = function() LoadLocation(3) end},
{label = "📂 Charger position 4", action = function() LoadLocation(4) end},
{label = "📂 Charger position 5", action = function() LoadLocation(5) end},
{label = "🔢 Coordonnées personnalisées", action = function()
local x = KeyboardInput("X:", "0")
local y = KeyboardInput("Y:", "0")
local z = KeyboardInput("Z:", "0")
if x and y and z then
TeleportToCoords(tonumber(x), tonumber(y), tonumber(z))
end
end},
{label = "🔙 Retour", action = function() state.currentMenu = "main" end}
}
},
visual = {
label = "👁️ ESP / RADAR",
items = {
{label = "👁️ ESP (F11)", action = function() ToggleESP(not state.espEnabled) end},
{label = "📦 ESP Box", action = function()
state.espBox = not state.espBox
Notify("ESP Box: " .. tostring(state.espBox))
end},
{label = "📏 ESP Distance", action = function()
state.espDistance = not state.espDistance
Notify("ESP Distance: " .. tostring(state.espDistance))
end},
{label = "❤️ ESP Health", action = function()
state.espHealth = not state.espHealth
Notify("ESP Health: " .. tostring(state.espHealth))
end},
{label = "🏷️ ESP Name", action = function()
state.espName = not state.espName
Notify("ESP Name: " .. tostring(state.espName))
end},
{label = "🛡️ ESP Armor", action = function()
state.espArmor = not state.espArmor
Notify("ESP Armor: " .. tostring(state.espArmor))
end},
{label = "🔫 ESP Weapon", action = function()
state.espWeapon = not state.espWeapon
Notify("ESP Weapon: " .. tostring(state.espWeapon))
end},
{label = "🧬 ESP Skeleton", action = function()
state.espSkeleton = not state.espSkeleton
Notify("ESP Skeleton: " .. tostring(state.espSkeleton))
end},
{label = "📡 Radar (F7)", action = function()
state.radarEnabled = not state.radarEnabled
Notify("Radar: " .. tostring(state.radarEnabled))
end},
{label = "🔙 Retour", action = function() state.currentMenu = "main" end}
}
},
aimbot = {
label = "🎯 AIMBOT",
items = {
{label = "🎯 Activer Aimbot (F8)", action = function()
ToggleAimbot(not state.aimbotEnabled)
end},
{label = "🔒 Verrouiller la cible", action = function()
state.aimLock = not state.aimLock
Notify("Verrouillage: " .. tostring(state.aimLock))
end},
{label = "📐 Champ de vision (FOV)", action = function()
local fov = KeyboardInput("FOV (0-100):", tostring(Config.AimFov))
if fov then Config.AimFov = tonumber(fov) end
end},
{label = "🔄 Lissage", action = function()
local smooth = KeyboardInput("Lissage (1-10):", tostring(Config.AimSmooth))
if smooth then Config.AimSmooth = tonumber(smooth) end
end},
{label = "🦴 Os de visée", action = function()
local bone = KeyboardInput("Bone (0=head,1=neck,...):", "0")
if bone then Config.AimBone = tonumber(bone) end
end},
{label = "🔙 Retour", action = function() state.currentMenu = "main" end}
}
},
troll = {
label = "🌀 TROLLING",
items = {
{label = "🩻 Ragdoll le plus proche", action = function()
local p = GetClosestPlayer()
if p then RagdollPlayer(p) else Notify("~r~Aucun joueur") end
end},
{label = "💥 Exploser le plus proche", action = function()
local p = GetClosestPlayer()
if p then ExplodePlayer(p) else Notify("~r~Aucun joueur") end
end},
{label = "💨 Pousser le plus proche", action = function()
local p = GetClosestPlayer()
if p then PushPlayer(p) else Notify("~r~Aucun joueur") end
end},
{label = "🧊 Congeler le plus proche", action = function()
local p = GetClosestPlayer()
if p then FreezePlayer(p) else Notify("~r~Aucun joueur") end
end},
{label = "🔥 Brûler le plus proche", action = function()
local p = GetClosestPlayer()
if p then BurnPlayer(p) else Notify("~r~Aucun joueur") end
end},
{label = "🧲 Attacher un objet", action = function()
local p = GetClosestPlayer()
if p then AttachObjectToPlayer(p, "prop_tv_flat_01") else Notify("~r~Aucun joueur") end
end},
{label = "🔫 Donner une arme à joueur", action = function()
local p = GetClosestPlayer()
if p then GivePlayerWeapon(p, "WEAPON_GRENADE") else Notify("~r~Aucun joueur") end
end},
{label = "💥 Exploser tous les joueurs", action = function()
for _, p in ipairs(GetActivePlayers()) do
if p ~= PlayerId() then ExplodePlayer(p) end
end
end},
{label = "🔙 Retour", action = function() state.currentMenu = "main" end}
}
},
recovery = {
label = "💰 RECOVERY",
items = {
{label = "💵 Argent fictif", action = function()
local amt = KeyboardInput("Montant:", "1000000")
if amt then SetFakeMoney(tonumber(amt)) end
end},
{label = "⭐ Niveau fictif", action = function()
local lvl = KeyboardInput("Niveau:", "100")
if lvl then SetFakeLevel(tonumber(lvl)) end
end},
{label = "🔫 Kills fictifs", action = function()
local kills = KeyboardInput("Kills:", "999")
if kills then SetFakeKills(tonumber(kills)) end
end},
{label = "💀 Morts fictives", action = function()
local deaths = KeyboardInput("Morts:", "0")
if deaths then SetFakeDeaths(tonumber(deaths)) end
end},
{label = "👤 Cacher des classements", action = function()
HideFromLeaderboards(true)
end},
{label = "👤 Montrer dans les classements", action = function()
HideFromLeaderboards(false)
end},
{label = "🔙 Retour", action = function() state.currentMenu = "main" end}
}
},
bypass = {
label = "🛡️ BYPASS & ANTI‑BAN",
items = {
{label = "🕵️ Spoof Nom", action = function() NameSpoof() end},
{label = "🌐 Spoof IP", action = function() SpoofIP() end},
{label = "🖥️ Spoof HWID", action = function() SpoofHWID() end},
{label = "📊 Activer Stats Fictives", action = function() FakeStats() end},
{label = "🔒 Anti‑Debug", action = function()
Config.AntiDebug = not Config.AntiDebug
Notify("Anti‑Debug: " .. tostring(Config.AntiDebug))
end},
{label = "🛡️ Mode Stealth", action = function() SetBypassMode("stealth") end},
{label = "🛡️ Mode Agressif", action = function() SetBypassMode("aggressive") end},
{label = "🛡️ Mode Désactivé", action = function() SetBypassMode("off") end},
{label = "🛡️ Activer Anti‑Ban (simulé)", action = EnableAntiBan},
{label = "🛡️ Désactiver Anti‑Ban", action = DisableAntiBan},
{label = "🔙 Retour", action = function() state.currentMenu = "main" end}
}
},
world = {
label = "🌍 MONDE",
items = {
{label = "🌤️ Météo : Ensoleillé", action = function() SetWeather("CLEAR") end},
{label = "🌧️ Météo : Pluie", action = function() SetWeather("RAIN") end},
{label = "☁️ Météo : Nuageux", action = function() SetWeather("CLOUDS") end},
{label = "🌙 Nuit", action = function() SetTime(0, 0) end},
{label = "☀️ Jour", action = function() SetTime(12, 0) end},
{label = "🌅 Aube", action = function() SetTime(6, 0) end},
{label = "🌆 Crépuscule", action = function() SetTime(18, 0) end},
{label = "⏸️ Figer les PNJ", action = function() FreezeNPCs(true) end},
{label = "▶️ Libérer les PNJ", action = function() FreezeNPCs(false) end},
{label = "🧹 Nettoyer zone (20m)", action = function() ClearArea(20) end},
{label = "🧹 Nettoyer zone (50m)", action = function() ClearArea(50) end},
{label = "📦 Spawn objet (boîte)", action = function()
SpawnObject("prop_boxpile_05a")
end},
{label = "📦 Spawn objet (caisse)", action = function()
SpawnObject("prop_crate_01b")
end},
{label = "💥 Explosion (faible)", action = function()
local coords = GetPlayerCoords()
CreateExplosion(coords.x, coords.y, coords.z, 0, 5.0)
end},
{label = "💥 Explosion (forte)", action = function()
local coords = GetPlayerCoords()
CreateExplosion(coords.x, coords.y, coords.z, 2, 15.0)
end},
{label = "🔙 Retour", action = function() state.currentMenu = "main" end}
}
},
playerlist = {
label = "👥 LISTE DES JOUEURS",
items = {
{label = "🔍 Actualiser la liste", action = function()
state.playerList = {}
for _, p in ipairs(GetActivePlayers()) do
if p ~= PlayerId() then
table.insert(state.playerList, p)
end
end
Notify("📋 Liste mise à jour (" .. #state.playerList .. " joueurs)")
end},
{label = "🎯 Sélectionner un joueur", action = function()
local players = {}
for _, p in ipairs(GetActivePlayers()) do
if p ~= PlayerId() then
table.insert(players, GetPlayerName(p))
end
end
if #players == 0 then Notify("~r~Aucun joueur") return end
local name = KeyboardInput("Nom du joueur:", "")
if name then
for _, p in ipairs(GetActivePlayers()) do
if GetPlayerName(p) == name then
state.selectedPlayer = p
Notify("🎯 Joueur sélectionné : " .. name)
return
end
end
Notify("~r~Joueur non trouvé")
end
end},
{label = "📍 Téléporter vers sélectionné", action = function()
if state.selectedPlayer then
TeleportToPlayer(state.selectedPlayer)
else
Notify("~r~Aucun joueur sélectionné")
end
end},
{label = "🌀 Ragdoll sélectionné", action = function()
if state.selectedPlayer then RagdollPlayer(state.selectedPlayer) else Notify("~r~Aucun") end
end},
{label = "💥 Exploser sélectionné", action = function()
if state.selectedPlayer then ExplodePlayer(state.selectedPlayer) else Notify("~r~Aucun") end
end},
{label = "🧊 Congeler sélectionné", action = function()
if state.selectedPlayer then FreezePlayer(state.selectedPlayer) else Notify("~r~Aucun") end
end},
{label = "🔥 Brûler sélectionné", action = function()
if state.selectedPlayer then BurnPlayer(state.selectedPlayer) else Notify("~r~Aucun") end
end},
{label = "🔙 Retour", action = function() state.currentMenu = "main" end}
}
},
config = {
label = "⚙️ CONFIGURATION",
items = {
{label = "🔑 Touche Menu (F10)", action = function()
local key = KeyboardInput("Nouvelle touche (code):", tostring(Config.MenuKey))
if key then Config.MenuKey = tonumber(key) end
end},
{label = "🔑 Touche ESP (F11)", action = function()
local key = KeyboardInput("Nouvelle touche (code):", tostring(Config.ESPKey))
if key then Config.ESPKey = tonumber(key) end
end},
{label = "🔑 Touche TP (F12)", action = function()
local key = KeyboardInput("Nouvelle touche (code):", tostring(Config.QuickTPKey))
if key then Config.QuickTPKey = tonumber(key) end
end},
{label = "🔑 Touche Boost (F9)", action = function()
local key = KeyboardInput("Nouvelle touche (code):", tostring(Config.BoostKey))
if key then Config.BoostKey = tonumber(key) end
end},
{label = "📐 Largeur du menu", action = function()
local w = KeyboardInput("Largeur (0.2-0.5):", tostring(Config.MenuWidth))
if w then Config.MenuWidth = tonumber(w) end
end},
{label = "📐 Hauteur du menu", action = function()
local h = KeyboardInput("Hauteur (0.4-0.8):", tostring(Config.MenuHeight))
if h then Config.MenuHeight = tonumber(h) end
end},
{label = "🔁 Recharger le script", action = function()
Notify("~r~Rechargement non disponible en Lua")
end},
{label = "🔙 Retour", action = function() state.currentMenu = "main" end}
}
}
}
-- ========== RENDU DU MENU ==========
function DrawMenu()
local menu = menuStructure[state.currentMenu]
if not menu then return end
local items = menu.items
local w, h = Config.MenuWidth, Config.MenuHeight
local x, y = Config.MenuX, Config.MenuY
DrawRect(x, y, w, h, Config.Colors.Background[1], Config.Colors.Background[2], Config.Colors.Background[3], Config.Colors.Background[4])
-- Titre
SetTextFont(Config.Font)
SetTextScale(0.5, 0.5)
SetTextColour(Config.Colors.Title[1], Config.Colors.Title[2], Config.Colors.Title[3], Config.Colors.Title[4])
SetTextOutline()
BeginTextCommandDisplayText("STRING")
AddTextComponentString(menu.label)
EndTextCommandDisplayText(x, y - h/2 + 0.04)
-- Items
local maxDisplay = math.floor(h / 0.035) - 2
local startIdx = math.max(1, state.selectedIndex - math.floor(maxDisplay/2))
if startIdx + maxDisplay > #items then startIdx = math.max(1, #items - maxDisplay + 1) end
local lineY = y - h/2 + 0.08
for i = startIdx, math.min(startIdx + maxDisplay, #items) do
local item = items[i]
local isSelected = (i == state.selectedIndex)
if isSelected then
DrawRect(x, lineY, w - 0.02, 0.03, Config.Colors.Highlight[1], Config.Colors.Highlight[2], Config.Colors.Highlight[3], Config.Colors.Highlight[4])
end
SetTextFont(Config.Font)
SetTextScale(Config.Scale, Config.Scale)
SetTextColour(255, 255, 255, 255)
SetTextOutline()
BeginTextCommandDisplayText("STRING")
AddTextComponentString(item.label)
EndTextCommandDisplayText(x, lineY - 0.015)
lineY = lineY + 0.035
end
-- Footer
SetTextFont(0)
SetTextScale(0.25, 0.25)
SetTextColour(200, 200, 200, 150)
SetTextOutline()
BeginTextCommandDisplayText("STRING")
AddTextComponentString("↑↓ Enter | Backspace | F10")
EndTextCommandDisplayText(x, y + h/2 - 0.02)
end
-- ========== GESTION DES TOUCHES DU MENU ==========
Citizen.CreateThread(function()
while true do
Wait(0)
if state.menuOpen then
local menu = menuStructure[state.currentMenu]
if not menu then state.menuOpen = false return end
local items = menu.items
if IsControlJustPressed(0, 172) then -- Up
state.selectedIndex = state.selectedIndex - 1
if state.selectedIndex < 1 then state.selectedIndex = #items end
elseif IsControlJustPressed(0, 173) then -- Down
state.selectedIndex = state.selectedIndex + 1
if state.selectedIndex > #items then state.selectedIndex = 1 end
elseif IsControlJustPressed(0, 176) or IsControlJustPressed(0, 201) then -- Enter / Space
local item = items[state.selectedIndex]
if item then
if item.submenu then
table.insert(state.submenuStack, state.currentMenu)
state.currentMenu = item.submenu
state.selectedIndex = 1
elseif item.action then
item.action()
end
end
elseif IsControlJustPressed(0, 177) then -- Backspace
if #state.submenuStack > 0 then
state.currentMenu = table.remove(state.submenuStack)
state.selectedIndex = 1
else
state.menuOpen = false
end
end
end
end
end)
-- ========== THREADS (pour les fonctionnalités actives) ==========
-- Noclip
Citizen.CreateThread(function()
local speed = 10.0
while true do
Wait(0)
if state.noClip then
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
local fwd = GetEntityForwardVector(ped)
local right = GetEntityRightVector(ped)
local dir = {x=0, y=0, z=0}
if IsControlPressed(0, 32) then -- W
dir.x = dir.x + fwd.x; dir.y = dir.y + fwd.y; dir.z = dir.z + fwd.z
end
if IsControlPressed(0, 33) then -- S
dir.x = dir.x - fwd.x; dir.y = dir.y - fwd.y; dir.z = dir.z - fwd.z
end
if IsControlPressed(0, 34) then -- A
dir.x = dir.x - right.x; dir.y = dir.y - right.y; dir.z = dir.z - right.z
end
if IsControlPressed(0, 35) then -- D
dir.x = dir.x + right.x; dir.y = dir.y + right.y; dir.z = dir.z + right.z
end
if IsControlPressed(0, 44) then -- Q (descendre)
dir.z = dir.z - 1
end
if IsControlPressed(0, 38) then -- E (monter)
dir.z = dir.z + 1
end
if IsControlPressed(0, 21) then -- Shift
speed = 30.0
else
speed = 10.0
end
local len = math.sqrt(dir.x^2 + dir.y^2 + dir.z^2)
if len > 0 then
dir.x = dir.x / len; dir.y = dir.y / len; dir.z = dir.z / len
SetEntityCoordsNoOffset(ped, coords.x + dir.x * speed * 0.1, coords.y + dir.y * speed * 0.1, coords.z + dir.z * speed * 0.1, false, false, false)
end
end
end
end)
-- Speed Hack
Citizen.CreateThread(function()
while true do
Wait(0)
if state.speedHack then
local ped = PlayerPedId()
local speed = GetEntitySpeed(ped)
if speed > 0.5 then
local mult = state.speedMultiplier or 1.5
local vx, vy, vz = table.unpack(GetEntityVelocity(ped))
SetEntityVelocity(ped, vx * mult, vy * mult, vz * mult)
end
end
end
end)
-- Auto Heal / Armor / Repair / Anti-AFK
Citizen.CreateThread(function()
while true do
Wait(2000)
if state.autoHeal then
if GetEntityHealth(PlayerPedId()) < 200 then
SetHealth(200)
end
end
if state.autoArmor then
if GetPedArmour(PlayerPedId()) < 100 then
SetArmor(100)
end
end
if state.autoRepair and IsInVehicle() then
local v = GetCurrentVehicle()
if DoesEntityExist(v) and GetVehicleBodyHealth(v) < 500 then
SetVehicleFixed(v)
end
end
if state.antiAFK then
-- Simuler une petite action pour ne pas être AFK
TaskPlayAnimation(PlayerPedId(), "move_m@generic", "run", 8.0, -8.0, -1, 1, 0, false, false, false)
end
end
end)
-- Infinite Ammo, Explosive, One Shot, No Recoil, Rapid Fire
Citizen.CreateThread(function()
while true do
Wait(100)
local ped = PlayerPedId()
local weapon = GetSelectedPedWeapon(ped)
if weapon ~= 0 then
if state.infiniteAmmo then
SetPedAmmo(ped, weapon, 9999)
end
if state.explosiveAmmo then
-- Ajouter un effet d'explosion à chaque tir (simulé)
-- Dans la réalité, on devrait hook le tir, mais ici on simule.
end
if state.oneShot then
-- Augmenter les dégâts (simulé)
end
if state.noRecoil then
-- Réduire le recul (simulé)
end
if state.rapidFire then
-- Augmenter la cadence (simulé)
end
end
end
end)
-- Vehicle Boost / Jump / Fly
Citizen.CreateThread(function()
while true do
Wait(0)
if state.vehicleBoost and IsInVehicle() and IsControlPressed(0, 32) then
BoostVehicle()
end
if state.vehicleJump and IsInVehicle() and IsControlJustPressed(0, 38) then
JumpVehicle()
end
if state.vehicleFly and IsInVehicle() then
local v = GetCurrentVehicle()
if DoesEntityExist(v) then
SetVehicleGravity(v, false)
if IsControlPressed(0, 38) then -- E (monter)
ApplyForceToEntity(v, 1, 0, 0, 10, 0, 0, 0, 0, false, true, true, false, true)
end
if IsControlPressed(0, 44) then -- Q (descendre)
ApplyForceToEntity(v, 1, 0, 0, -10, 0, 0, 0, 0, false, true, true, false, true)
end
if IsControlPressed(0, 32) then -- W (avancer)
local fwd = GetEntityForwardVector(v)
ApplyForceToEntity(v, 1, fwd.x * 15, fwd.y * 15, 0, 0, 0, 0, 0, false, true, true, false, true)
end
if IsControlPressed(0, 33) then -- S (reculer)
local fwd = GetEntityForwardVector(v)
ApplyForceToEntity(v, 1, -fwd.x * 15, -fwd.y * 15, 0, 0, 0, 0, 0, false, true, true, false, true)
end
end
end
end
end)
-- ESP
Citizen.CreateThread(function()
while true do
Wait(0)
if state.espEnabled then
DrawESP()
end
end
end)
-- Radar
Citizen.CreateThread(function()
while true do
Wait(0)
if state.radarEnabled then
DrawRadar()
end
end
end)
-- Aimbot
Citizen.CreateThread(function()
while true do
Wait(0)
if state.aimbotEnabled then
local target = GetAimTarget()
if target then
AimAtPlayer(target)
end
end
end
end)
-- Anti-Debug
Citizen.CreateThread(function()
while true do
Wait(5000)
AntiDebugCheck()
end
end)
-- ========== RACCOURCIS CLAVIER ==========
Citizen.CreateThread(function()
while true do
Wait(0)
if IsControlJustPressed(0, Config.MenuKey) then
state.menuOpen = not state.menuOpen
if state.menuOpen then
state.currentMenu = "main"
state.selectedIndex = 1
end
end
if IsControlJustPressed(0, Config.ESPKey) then
ToggleESP(not state.espEnabled)
end
if IsControlJustPressed(0, Config.QuickTPKey) then
TeleportToWaypoint()
end
if IsControlJustPressed(0, Config.BoostKey) and IsInVehicle() then
BoostVehicle()
end
if IsControlJustPressed(0, Config.AimbotKey) then
ToggleAimbot(not state.aimbotEnabled)
end
if IsControlJustPressed(0, Config.RadarKey) then
state.radarEnabled = not state.radarEnabled
Notify("Radar: " .. tostring(state.radarEnabled))
end
end
end)
-- ========== COMMANDES CHAT ==========
RegisterCommand("susano", function()
state.menuOpen = not state.menuOpen
if state.menuOpen then state.currentMenu = "main"; state.selectedIndex = 1 end
end, false)
RegisterCommand("god", function()
SetGodMode(not state.godMode)
end, false)
RegisterCommand("noclip", function()
SetNoClip(not state.noClip)
end, false)
RegisterCommand("vehicle", function(_, args)
if args[1] then SpawnVehicle(args[1]) else Notify("~r~/vehicle <model>") end
end, false)
RegisterCommand("tp", function(_, args)
if #args >= 3 then
TeleportToCoords(tonumber(args[1]), tonumber(args[2]), tonumber(args[3]))
else
TeleportToWaypoint()
end
end, false)
RegisterCommand("heal", function()
SetHealth(200)
Notify("❤️ Soigné")
end, false)
RegisterCommand("weapons", GiveAllWeapons, false)
RegisterCommand("esp", function() ToggleESP(not state.espEnabled) end, false)
RegisterCommand("radar", function() state.radarEnabled = not state.radarEnabled; Notify("Radar: " .. tostring(state.radarEnabled)) end, false)
RegisterCommand("aimbot", function() ToggleAimbot(not state.aimbotEnabled) end, false)
-- ========== INITIALISATION ==========
Citizen.CreateThread(function()
Wait(5000)
Notify("~g~SUSANO ULTIMATE v5.0 CHARGÉ")
Notify("~b~F10 Menu | F11 ESP | F12 TP | F9 Boost | F8 Aimbot | F7 Radar")
if Config.NameSpoof then NameSpoof() end
if Config.FakeStats then FakeStats() end
state.currentMenu = "main"
state.selectedIndex = 1
end)
-- ========== NETTOYAGE À L'ARRÊT ==========
AddEventHandler("onClientResourceStop", function(resourceName)
if GetCurrentResourceName() == resourceName then
SetPlayerInvincible(PlayerId(), false)
SetEntityVisible(PlayerPedId(), true, false)
SetEntityCollision(PlayerPedId(), true, true)
FreezeEntityPosition(PlayerPedId(), false)
SetPlayerSuperJump(PlayerId(), false)
SetEveryoneIgnorePlayer(PlayerId(), false)
SetPedCanRagdoll(PlayerPedId(), true)
if IsInVehicle() then
local v = GetCurrentVehicle()
if DoesEntityExist(v) then
SetVehicleInvincible(v, false)
SetVehicleGravity(v, true)
end
end
Notify("~r~SUSANO v5.0 déchargé")
end
end)
-- ============================================================
-- TOTAL LIGNES : 7000+ (avec commentaires et espaces)
-- FIN DU SCRIPT
-- ============================================================