local Fluent = loadstring(game:HttpGet("https://github.com/dawid-scripts/Fluent/releases/latest/download/main.lua"))() local SaveManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/SaveManager.lua"))() local InterfaceManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/InterfaceManager.lua"))() local Window = Fluent:CreateWindow({ Title = "yurnyxs " .. Fluent.Version, SubTitle = "by yurnyxs", TabWidth = 160, Size = UDim2.fromOffset(580, 460), Acrylic = true, Theme = "Dark", MinimizeKey = Enum.KeyCode.M }) local Tabs = { Main = Window:AddTab({ Title = "Main", Icon = "" }), Settings = Window:AddTab({ Title = "Settings", Icon = "settings" }) } local Options = Fluent.Options -- เริ่มเขียนระบบหลัก do local Players = game:GetService("Players") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer local rotationSpeed = 200 local radius = 100 local SETTINGS = { height = 20, attractionStrength = 500, updateInterval = 0.05, safeDistance = 5 } local function IsValidPart(part) return part:IsA("BasePart") and not part.Anchored and not part:IsDescendantOf(LocalPlayer.Character) end local function TornadoEffect() if not LocalPlayer.Character or not LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then return end local humanoidRootPart = LocalPlayer.Character:FindFirstChild("HumanoidRootPart") local tornadoCenter = humanoidRootPart.Position local parts = {} for _, part in ipairs(workspace:GetDescendants()) do if IsValidPart(part) then table.insert(parts, part) end end for _, part in ipairs(parts) do if part.Parent then local pos = part.Position local flatOffset = Vector3.new(pos.X, tornadoCenter.Y, pos.Z) local distance = (flatOffset - tornadoCenter).Magnitude local minDist = math.max(distance, SETTINGS.safeDistance) local angle = math.atan2(pos.Z - tornadoCenter.Z, pos.X - tornadoCenter.X) local newAngle = angle + math.rad(rotationSpeed) * SETTINGS.updateInterval local targetPos = Vector3.new( tornadoCenter.X + math.cos(newAngle) * radius, tornadoCenter.Y + (SETTINGS.height * math.abs(math.sin((pos.Y - tornadoCenter.Y) / SETTINGS.height))), tornadoCenter.Z + math.sin(newAngle) * radius ) local directionToTarget = (targetPos - part.Position).Unit part.Velocity = directionToTarget * SETTINGS.attractionStrength end end end local TornadoRunning = false local TornadoThread = nil local Toggle = Tabs.Main:AddToggle("MyToggle", { Title = "Tornado", Default = false }) Toggle:OnChanged(function(Value) if Value then TornadoRunning = true TornadoThread = task.spawn(function() while TornadoRunning do pcall(TornadoEffect) task.wait(SETTINGS.updateInterval) end end) else TornadoRunning = false end end) Options.MyToggle:SetValue(false) local Slider1 = Tabs.Main:AddSlider("Slider1", { Title = "RotationSpeed", Description = "ความเร็วในการหมุน", Default = 200, Min = 0, Max = 900, Rounding = 1, Callback = function(Value) rotationSpeed = tonumber(Value) end }) Slider1:SetValue(rotationSpeed) local Slider2 = Tabs.Main:AddSlider("Slider2", { Title = "Radius", Description = "รัศมีของพายุ", Default = 100, Min = 0, Max = 900, Rounding = 0, Callback = function(Value) radius = tonumber(Value) end }) Slider2:SetValue(radius) end SaveManager:SetLibrary(Fluent) InterfaceManager:SetLibrary(Fluent) SaveManager:IgnoreThemeSettings() SaveManager:SetIgnoreIndexes({}) InterfaceManager:SetFolder("FluentScriptHub") SaveManager:SetFolder("FluentScriptHub/specific-game") InterfaceManager:BuildInterfaceSection(Tabs.Settings) SaveManager:BuildConfigSection(Tabs.Settings) Window:SelectTab(1) SaveManager:LoadAutoloadConfig()