-- [[ 👁️ SYSTEM CODE: UNTITLED B4 SPIRIT V9.4 - FINAL FREEZE ]] -- -- [[ FIX: BENERAN HAPUS SEMUA task.spawn ]] -- -- [[ PROPS GERAK BERSAMAAN 100% ]] -- print("[B4 SPIRIT] Memulai Engine V9.4 - Final Freeze...") local Players = game:GetService("Players") local LP = Players.LocalPlayer local RS = game:GetService("RunService") local WS = workspace local UIS = game:GetService("UserInputService") -- Control States local B4Active = false local SonicActive = false local WeaponActive = false local GlobalTimer = 0 local BaseProps = {} local AmmoProps = {} local Target1 = nil local Target2 = nil local LastTargetSwitch = 0 local targetPos = Vector3.new(0, 50, 0) local currentPos = targetPos local targetRotY = 0 local currentRotY = 0 local targetRoll = 0 local currentRoll = 0 local pitchAngle = 0 local baseSpeed = 40 local sonicSpeed = 160 local smoothFactor = 0.12 local mobileInputs = {Forward = 0, Backward = 0, TurnLeft = 0, TurnRight = 0, Up = 0, Down = 0} local keyboardKeys = {W = false, S = false, A = false, D = false, Space = false, LeftControl = false} local CameraPart = Instance.new("Part") CameraPart.Anchored = true CameraPart.Transparency = 1 CameraPart.CanCollide = false CameraPart.Size = Vector3.new(1,1,1) CameraPart.Name = "B4_SleekPivot" CameraPart.Parent = workspace -- ========================================================== -- WARNA UNGU HITAM (TANPA task.spawn) -- ========================================================== local COLORS = { Abyss = Color3.fromRGB(30, 0, 60), Toxic = Color3.fromRGB(150, 0, 255), Deep = Color3.fromRGB(10, 0, 30) } local function getAbyssColor(t, offset) local cycle = (t * 0.3 + (offset * 0.1)) % 1 if cycle < 0.5 then return COLORS.Abyss:Lerp(COLORS.Toxic, cycle * 2) else return COLORS.Toxic:Lerp(COLORS.Deep, (cycle - 0.5) * 2) end end -- ========================================================== -- 🔒 SCANNER (TANPA task.spawn) -- ========================================================== local function LockB4Props() local wsCom = WS:FindFirstChild("WorkspaceCom") if not wsCom then return end table.clear(BaseProps) table.clear(AmmoProps) local currentRemotes = {} for _, cat in pairs(wsCom:GetChildren()) do for _, prop in pairs(cat:GetChildren()) do if prop:IsA("Model") and prop.Name:find(LP.Name) then local remote = prop:FindFirstChild("SetCurrentCFrame") or prop:FindFirstChild("SetCFrame") if remote then table.insert(currentRemotes, remote) end end end end for i, remote in ipairs(currentRemotes) do if i <= 13 then table.insert(BaseProps, remote) else table.insert(AmmoProps, remote) end end end -- ========================================================== -- 🎯 TARGET SWAPPER -- ========================================================== local function UpdateDualTargets() if os.clock() - LastTargetSwitch < 3 then return end LastTargetSwitch = os.clock() local pool = {} for _, p in ipairs(Players:GetPlayers()) do if p ~= LP and p.Character and p.Character:FindFirstChild("HumanoidRootPart") then local dist = (currentPos - p.Character.HumanoidRootPart.Position).Magnitude if dist < 350 then table.insert(pool, p.Character) end end end if #pool == 0 then Target1 = nil Target2 = nil elseif #pool == 1 then Target1 = pool[1] Target2 = pool[1] else local idx1 = math.random(1, #pool) Target1 = pool[idx1] table.remove(pool, idx1) local idx2 = math.random(1, #pool) Target2 = pool[idx2] end end -- ========================================================== -- 🚀 FIRE REMOTE (LANGSUNG, TANPA task.spawn) -- ========================================================== local function FireRemote(remote, cf) if remote:IsA("RemoteEvent") then remote:FireServer(cf) elseif remote:IsA("RemoteFunction") then pcall(function() remote:InvokeServer(cf) end) end end local function SetColor(remote, index) pcall(function() local model = remote.Parent if model and model:IsA("Model") then local colorRemote = model:FindFirstChild("ChangePropsColor") or model:FindFirstChild("ChangePropColor") if colorRemote then colorRemote:InvokeServer(getAbyssColor(tick(), index)) end end end) end -- ========================================================== -- ✈️ MAIN ENGINE (TANPA task.spawn SAMA SEKALI) -- ========================================================== RS.Heartbeat:Connect(function(dt) if B4Active and LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") then LP.Character.HumanoidRootPart.Velocity = Vector3.new(0, 0, 0) LP.Character.HumanoidRootPart.RotVelocity = Vector3.new(0, 0, 0) end LockB4Props() if not B4Active or #BaseProps == 0 then return end GlobalTimer = GlobalTimer + dt local currentFlightSpeed = SonicActive and sonicSpeed or baseSpeed local moveForward = (keyboardKeys.W and 1 or 0) + mobileInputs.Forward local moveBackward = (keyboardKeys.S and 1 or 0) + mobileInputs.Backward local moveLeft = (keyboardKeys.A and 1 or 0) + mobileInputs.TurnLeft local moveRight = (keyboardKeys.D and 1 or 0) + mobileInputs.TurnRight local moveUp = (keyboardKeys.Space and 1 or 0) + mobileInputs.Up local moveDown = (keyboardKeys.LeftControl and 1 or 0) + mobileInputs.Down local lookVector = Vector3.new(math.sin(math.rad(targetRotY)), 0, math.cos(math.rad(targetRotY))) if moveForward > 0 then targetPos = targetPos - (lookVector * currentFlightSpeed * dt) end if moveBackward > 0 then targetPos = targetPos + (lookVector * currentFlightSpeed * dt) end if moveUp > 0 then targetPos = targetPos + Vector3.new(0, currentFlightSpeed * dt, 0) end if moveDown > 0 then targetPos = targetPos - Vector3.new(0, currentFlightSpeed * dt, 0) end targetRoll = 0 local turnSpeedMod = SonicActive and 120 or 95 if moveLeft > 0 then targetRotY = targetRotY + (turnSpeedMod * dt) targetRoll = math.rad(-32) elseif moveRight > 0 then targetRotY = targetRotY - (turnSpeedMod * dt) targetRoll = math.rad(32) end currentPos = currentPos:Lerp(targetPos, smoothFactor) currentRotY = currentRotY + (targetRotY - currentRotY) * smoothFactor currentRoll = currentRoll + (targetRoll - currentRoll) * smoothFactor local targetPitch = (moveForward > 0 and math.rad(-5) or 0) + (moveBackward > 0 and math.rad(5) or 0) pitchAngle = pitchAngle + (targetPitch - pitchAngle) * 0.12 local centerCFrame = CFrame.new(currentPos) * CFrame.Angles(pitchAngle, math.rad(currentRotY), currentRoll) CameraPart.CFrame = centerCFrame workspace.CurrentCamera.CameraSubject = CameraPart local baseCF = centerCFrame -- 🔥 BODY PROPS (FIRING LANGSUNG DALAM 1 LOOP, TANPA task.spawn) for i, remote in ipairs(BaseProps) do if remote then local finalCF if i == 1 then finalCF = baseCF * CFrame.new(0, 0, -2.5) else local row = math.floor(i / 2) local isLeft = (i % 2 == 0) local offsetX = isLeft and (-row * 3.8) or (row * 3.8) local wingVibe = math.sin(GlobalTimer * 14 + row) * 0.04 finalCF = baseCF * CFrame.new(offsetX, wingVibe, row * 2.4) end FireRemote(remote, finalCF) SetColor(remote, i) end end -- 🔥 AMMO PROPS (FIRING LANGSUNG DALAM 1 LOOP, TANPA task.spawn) UpdateDualTargets() for idx, ammoRemote in ipairs(AmmoProps) do if ammoRemote then local currentTarget = (idx == 1) and Target1 or Target2 local ammoCFrame = baseCF * CFrame.new(idx == 1 and -2 or 2, -2.5, 0.5) if WeaponActive and currentTarget and currentTarget:FindFirstChild("HumanoidRootPart") then local targetPart = currentTarget.HumanoidRootPart local shootCycle = math.sin(GlobalTimer * 42 + (idx * math.pi)) if shootCycle > 0.2 then ammoCFrame = CFrame.lookAt(targetPart.Position, targetPart.Position + targetPart.Velocity) * CFrame.Angles(math.random(-8,8), math.random(-8,8), math.random(-8,8)) else ammoCFrame = baseCF * CFrame.new(idx == 1 and -1.8 or 1.8, -2.3, -1) end else local hoverVibe = math.sin(GlobalTimer * 8 + idx) * 0.03 ammoCFrame = baseCF * CFrame.new(idx == 1 and -1.5 or 1.5, -2.0 + hoverVibe, 0) * CFrame.Angles(math.rad(90), 0, 0) end FireRemote(ammoRemote, ammoCFrame) SetColor(ammoRemote, idx + 13) end end end) -- ========================================================== -- 🎨 UI -- ========================================================== local function BuatBisaDidrag(frame, handle) handle = handle or frame local dragging, dragInput, dragStart, startPos handle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = frame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) handle.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UIS.InputChanged:Connect(function(input) if input == dragInput and dragging then local delta = input.Position - dragStart frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) end local UI = Instance.new("ScreenGui") UI.Name = "B4_SplitTarget_V94_Final" UI.ResetOnSpawn = false local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.Size = UDim2.new(0, 220, 0, 235) MainFrame.Position = UDim2.new(0.5, -110, 0.25, 0) MainFrame.BackgroundColor3 = Color3.fromRGB(24, 24, 28) MainFrame.BorderSizePixel = 0 MainFrame.Active = true local MainCorner = Instance.new("UICorner") MainCorner.CornerRadius = UDim.new(0, 10) MainCorner.Parent = MainFrame local MainStroke = Instance.new("UIStroke") MainStroke.Thickness = 1.5 MainStroke.Color = Color3.fromRGB(150, 0, 255) MainStroke.Parent = MainFrame MainFrame.Parent = UI local Header = Instance.new("Frame") Header.Size = UDim2.new(1, 0, 0, 35) Header.BackgroundColor3 = Color3.fromRGB(32, 32, 38) Header.BorderSizePixel = 0 local HeadCorner = Instance.new("UICorner") HeadCorner.CornerRadius = UDim.new(0, 10) HeadCorner.Parent = Header Header.Parent = MainFrame local Title = Instance.new("TextLabel") Title.Size = UDim2.new(0.7, 0, 1, 0) Title.Position = UDim2.new(0, 12, 0, 0) Title.BackgroundTransparency = 1 Title.Text = "B4 SPIRIT // V9.4" Title.TextColor3 = Color3.fromRGB(200, 100, 255) Title.Font = Enum.Font.GothamBold Title.TextSize = 12 Title.TextXAlignment = Enum.TextXAlignment.Left Title.Parent = Header local BtnMin = Instance.new("TextButton") BtnMin.Size = UDim2.new(0, 30, 0, 35) BtnMin.Position = UDim2.new(1, -35, 0, 0) BtnMin.BackgroundTransparency = 1 BtnMin.Text = "—" BtnMin.TextColor3 = Color3.fromRGB(200, 200, 200) BtnMin.Font = Enum.Font.GothamBold BtnMin.TextSize = 14 BtnMin.Parent = Header BuatBisaDidrag(MainFrame, Header) local function createMenuBtn(text, yPos) local b = Instance.new("TextButton") b.Size = UDim2.new(0.9, 0, 0, 35) b.Position = UDim2.new(0.05, 0, 0, yPos) b.BackgroundColor3 = Color3.fromRGB(36, 36, 44) b.Text = text b.TextColor3 = Color3.fromRGB(220, 220, 220) b.Font = Enum.Font.GothamMedium b.TextSize = 11 local bc = Instance.new("UICorner") bc.CornerRadius = UDim.new(0, 6) bc.Parent = b local bs = Instance.new("UIStroke") bs.Thickness = 1 bs.Color = Color3.fromRGB(55, 55, 65) bs.Parent = b b.Parent = MainFrame return b, bs end local BtnFlight, StrokeFlight = createMenuBtn("Flight Engine: OFF", 45) local BtnSonic, StrokeSonic = createMenuBtn("Sonic Overdrive: OFF", 90) local BtnWeapon, StrokeWeapon = createMenuBtn("Auto Lock Weapon: SAFE", 135) local BtnReset, StrokeReset = createMenuBtn("Wipe/Reset Base Cache", 180) BtnReset.BackgroundColor3 = Color3.fromRGB(44, 28, 28) StrokeReset.Color = Color3.fromRGB(80, 40, 40) BtnReset.TextColor3 = Color3.fromRGB(255, 120, 120) local LblStatus = Instance.new("TextLabel") LblStatus.Size = UDim2.new(1, 0, 0, 25) LblStatus.Position = UDim2.new(0, 0, 1, -25) LblStatus.BackgroundTransparency = 1 LblStatus.Text = "Base: 0/13 | Targets: Active" LblStatus.TextColor3 = Color3.fromRGB(120, 120, 130) LblStatus.Font = Enum.Font.Code LblStatus.TextSize = 10 LblStatus.Parent = MainFrame -- MOBILE CONTROLS local MobileControls = Instance.new("ScreenGui") MobileControls.Name = "B4_Jumbo_Controls" MobileControls.ResetOnSpawn = false MobileControls.Enabled = false local function createJumboBtn(text, pos, stateName, color) local b = Instance.new("TextButton") b.Size = UDim2.new(0, 75, 0, 50) b.Position = pos b.BackgroundColor3 = Color3.fromRGB(28, 28, 34) b.BackgroundTransparency = 0.1 b.Text = text b.TextColor3 = Color3.fromRGB(255, 255, 255) b.Font = Enum.Font.GothamBold b.TextSize = 14 local bc = Instance.new("UICorner") bc.CornerRadius = UDim.new(0, 8) bc.Parent = b local bs = Instance.new("UIStroke") bs.Thickness = 1.5 bs.Color = Color3.fromRGB(65, 65, 75) bs.Parent = b b.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then mobileInputs[stateName] = 1 b.BackgroundColor3 = color bs.Color = Color3.fromRGB(200, 100, 255) end end) b.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then mobileInputs[stateName] = 0 b.BackgroundColor3 = Color3.fromRGB(28, 28, 34) bs.Color = Color3.fromRGB(65, 65, 75) end end) b.Parent = MobileControls end local cPurple = Color3.fromRGB(150, 0, 255) local cGreenPurple = Color3.fromRGB(100, 0, 200) createJumboBtn("▲", UDim2.new(0.08, 0, 0.58, 0), "Forward", cPurple) createJumboBtn("▼", UDim2.new(0.08, 0, 0.78, 0), "Backward", cPurple) createJumboBtn("◄", UDim2.new(0.01, 0, 0.68, 0), "TurnLeft", cPurple) createJumboBtn("►", UDim2.new(0.15, 0, 0.68, 0), "TurnRight", cPurple) createJumboBtn("NAIK", UDim2.new(0.85, 0, 0.60, 0), "Up", cGreenPurple) createJumboBtn("TURUN", UDim2.new(0.85, 0, 0.75, 0), "Down", cGreenPurple) -- UI INTERACTIONS local isMinimized = false BtnMin.MouseButton1Click:Connect(function() isMinimized = not isMinimized MainFrame.Size = isMinimized and UDim2.new(0, 220, 0, 35) or UDim2.new(0, 220, 0, 235) BtnFlight.Visible = not isMinimized BtnSonic.Visible = not isMinimized BtnWeapon.Visible = not isMinimized BtnReset.Visible = not isMinimized LblStatus.Visible = not isMinimized BtnMin.Text = isMinimized and "+" or "—" end) BtnFlight.MouseButton1Click:Connect(function() B4Active = not B4Active if B4Active then local myChar = LP.Character if myChar and myChar:FindFirstChild("HumanoidRootPart") then targetPos = myChar.HumanoidRootPart.Position + Vector3.new(0, 25, 0) currentPos = targetPos targetRotY = myChar.HumanoidRootPart.Orientation.Y + 180 currentRotY = targetRotY myChar.HumanoidRootPart.Anchored = true end LockB4Props() MobileControls.Enabled = true BtnFlight.Text = "Flight Engine: ACTIVE" BtnFlight.BackgroundColor3 = Color3.fromRGB(80, 0, 130) StrokeFlight.Color = Color3.fromRGB(200, 100, 255) else B4Active = false SonicActive = false WeaponActive = false MobileControls.Enabled = false BtnFlight.Text = "Flight Engine: OFF" BtnFlight.BackgroundColor3 = Color3.fromRGB(36, 36, 44) StrokeFlight.Color = Color3.fromRGB(55, 55, 65) BtnSonic.Text = "Sonic Overdrive: OFF" BtnSonic.BackgroundColor3 = Color3.fromRGB(36, 36, 44) StrokeSonic.Color = Color3.fromRGB(55, 55, 65) BtnWeapon.Text = "Auto Lock Weapon: SAFE" BtnWeapon.BackgroundColor3 = Color3.fromRGB(36, 36, 44) StrokeWeapon.Color = Color3.fromRGB(55, 55, 65) if LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") then LP.Character.HumanoidRootPart.Anchored = false end workspace.CurrentCamera.CameraSubject = LP.Character:FindFirstChild("Humanoid") end end) BtnSonic.MouseButton1Click:Connect(function() if not B4Active then return end SonicActive = not SonicActive if SonicActive then BtnSonic.Text = "Sonic Overdrive: ON (MACH 2)" BtnSonic.BackgroundColor3 = Color3.fromRGB(190, 85, 0) StrokeSonic.Color = Color3.fromRGB(255, 160, 0) else BtnSonic.Text = "Sonic Overdrive: OFF" BtnSonic.BackgroundColor3 = Color3.fromRGB(36, 36, 44) StrokeSonic.Color = Color3.fromRGB(55, 55, 65) end end) BtnWeapon.MouseButton1Click:Connect(function() if not B4Active then return end WeaponActive = not WeaponActive if WeaponActive then BtnWeapon.Text = "Auto Lock Weapon: ARMED 💥" BtnWeapon.BackgroundColor3 = Color3.fromRGB(160, 0, 35) StrokeWeapon.Color = Color3.fromRGB(255, 60, 60) else BtnWeapon.Text = "Auto Lock Weapon: SAFE" BtnWeapon.BackgroundColor3 = Color3.fromRGB(36, 36, 44) StrokeWeapon.Color = Color3.fromRGB(55, 55, 65) end end) BtnReset.MouseButton1Click:Connect(function() table.clear(BaseProps) table.clear(AmmoProps) Target1 = nil Target2 = nil print("[B4 SYSTEM] Memori bodi dikosongkan!") end) -- Keyboard UIS.InputBegan:Connect(function(input, gpe) if gpe then return end local name = input.KeyCode.Name if keyboardKeys[name] ~= nil then keyboardKeys[name] = true end end) UIS.InputEnded:Connect(function(input) local name = input.KeyCode.Name if keyboardKeys[name] ~= nil then keyboardKeys[name] = false end end) -- Status task.spawn(function() while task.wait(0.2) do local name1 = Target1 and Target1.Name or "None" local name2 = Target2 and Target2.Name or "None" LblStatus.Text = "P1: " .. name1 .. " | P2: " .. name2 LblStatus.TextColor3 = WeaponActive and Color3.fromRGB(255, 60, 60) or Color3.fromRGB(150, 0, 255) end end) local targetParent = LP:FindFirstChildOfClass("PlayerGui") or game:GetService("CoreGui") if targetParent then UI.Parent = targetParent MobileControls.Parent = targetParent end print("[B4 SPIRIT] V9.4 Final Freeze Sukses Di-inject!")-- [[ 👁️ SYSTEM CODE: UNTITLED B4 SPIRIT REWORK V9.4 DUAL-TARGET ]] -- -- [[ FEATURE: DUAL MULTI-TARGET (3s SWAP) + PERMANENT BASE LOCK + DRAGGABLE ]] -- print("[B4 SPIRIT] Memulai Engine V9.4 - Dual-Target Splitter...") local Players = game:GetService("Players") local LP = Players.LocalPlayer local RS = game:GetService("RunService") local WS = workspace local UIS = game:GetService("UserInputService") -- Control States local B4Active = false local SonicActive = false local WeaponActive = false local GlobalTimer = 0 -- Memori Persisten Bodi & Peluru local BaseProps = {} -- Maksimal 13 untuk bodi pesawat local AmmoProps = {} -- Sisa prop otomatis murni jadi peluru (2 peluru) -- Multi-Targeting States local Target1 = nil local Target2 = nil local LastTargetSwitch = 0 -- Engine Flight Variables local targetPos = Vector3.new(0, 50, 0) local currentPos = targetPos local targetRotY = 0 local currentRotY = 0 local targetRoll = 0 local currentRoll = 0 local pitchAngle = 0 local baseSpeed = 40 local sonicSpeed = 160 local smoothFactor = 0.12 local mobileInputs = {Forward = 0, Backward = 0, TurnLeft = 0, TurnRight = 0, Up = 0, Down = 0} local keyboardKeys = {W = false, S = false, A = false, D = false, Space = false, LeftControl = false} -- Invisible Camera Pivot local CameraPart = Instance.new("Part") CameraPart.Anchored = true CameraPart.Transparency = 1 CameraPart.CanCollide = false CameraPart.Size = Vector3.new(1,1,1) CameraPart.Name = "B4_SleekPivot" CameraPart.Parent = WS -- ========================================================== -- 🔒 HARD-LOCK SCANNER SYSTEM -- ========================================================== local function LockB4Props() local wsCom = WS:FindFirstChild("WorkspaceCom") if not wsCom then return end for i = #BaseProps, 1, -1 do if not BaseProps[i] or not BaseProps[i].Parent then table.remove(BaseProps, i) end end for i = #AmmoProps, 1, -1 do if not AmmoProps[i] or not AmmoProps[i].Parent then table.remove(AmmoProps, i) end end local currentRemotes = {} for _, cat in pairs(wsCom:GetChildren()) do for _, prop in pairs(cat:GetChildren()) do if prop:IsA("Model") and prop.Name:find(LP.Name) then local remote = prop:FindFirstChild("SetCurrentCFrame") or prop:FindFirstChild("SetCFrame") if remote then table.insert(currentRemotes, remote) end end end end for _, remote in ipairs(currentRemotes) do local isAlreadyBase = false for _, b in ipairs(BaseProps) do if b == remote then isAlreadyBase = true; break end end local isAlreadyAmmo = false for _, a in ipairs(AmmoProps) do if a == remote then isAlreadyAmmo = true; break end end if not isAlreadyBase and not isAlreadyAmmo then if #BaseProps < 13 then table.insert(BaseProps, remote) else table.insert(AmmoProps, remote) end end end end -- ========================================================== -- 🎯 DUAL TARGET SWAPPER SYSTEM (3 DETIK SEKALI) -- ========================================================== local function UpdateDualTargets() if os.clock() - LastTargetSwitch < 3 then return end LastTargetSwitch = os.clock() local pool = {} for _, p in ipairs(Players:GetPlayers()) do if p ~= LP and p.Character and p.Character:FindFirstChild("HumanoidRootPart") then local dist = (currentPos - p.Character.HumanoidRootPart.Position).Magnitude if dist < 350 then -- Radius Target Max 350 Studs table.insert(pool, p.Character) end end end if #pool == 0 then Target1 = nil Target2 = nil elseif #pool == 1 then Target1 = pool[1] Target2 = pool[1] -- Kalau cuma ada 1 orang, diserang barengan else -- Ambil 2 target berbeda secara acak dari area sekitar local idx1 = math.random(1, #pool) Target1 = pool[idx1] table.remove(pool, idx1) local idx2 = math.random(1, #pool) Target2 = pool[idx2] end end local function FireRemote(remote, cf) if remote:IsA("RemoteEvent") then remote:FireServer(cf) elseif remote:IsA("RemoteFunction") then pcall(function() remote:InvokeServer(cf) end) end end -- ========================================================== -- ✈️ MAIN FLIGHT ENGINE LOOP -- ========================================================== RS.Heartbeat:Connect(function(dt) if B4Active and LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") then LP.Character.HumanoidRootPart.Velocity = Vector3.new(0, 0, 0) LP.Character.HumanoidRootPart.RotVelocity = Vector3.new(0, 0, 0) end LockB4Props() if not B4Active or #BaseProps == 0 then return end GlobalTimer = GlobalTimer + dt local currentFlightSpeed = SonicActive and sonicSpeed or baseSpeed local moveForward = (keyboardKeys.W and 1 or 0) + mobileInputs.Forward local moveBackward = (keyboardKeys.S and 1 or 0) + mobileInputs.Backward local moveLeft = (keyboardKeys.A and 1 or 0) + mobileInputs.TurnLeft local moveRight = (keyboardKeys.D and 1 or 0) + mobileInputs.TurnRight local moveUp = (keyboardKeys.Space and 1 or 0) + mobileInputs.Up local moveDown = (keyboardKeys.LeftControl and 1 or 0) + mobileInputs.Down local lookVector = Vector3.new(math.sin(math.rad(targetRotY)), 0, math.cos(math.rad(targetRotY))) if moveForward > 0 then targetPos = targetPos - (lookVector * currentFlightSpeed * dt) end if moveBackward > 0 then targetPos = targetPos + (lookVector * currentFlightSpeed * dt) end if moveUp > 0 then targetPos = targetPos + Vector3.new(0, currentFlightSpeed * dt, 0) end if moveDown > 0 then targetPos = targetPos - Vector3.new(0, currentFlightSpeed * dt, 0) end targetRoll = 0 local turnSpeedMod = SonicActive and 120 or 95 if moveLeft > 0 then targetRotY = targetRotY + (turnSpeedMod * dt) targetRoll = math.rad(-32) elseif moveRight > 0 then targetRotY = targetRotY - (turnSpeedMod * dt) targetRoll = math.rad(32) end currentPos = currentPos:Lerp(targetPos, smoothFactor) currentRotY = currentRotY + (targetRotY - currentRotY) * smoothFactor currentRoll = currentRoll + (targetRoll - currentRoll) * smoothFactor local targetPitch = (moveForward > 0 and math.rad(-5) or 0) + (moveBackward > 0 and math.rad(5) or 0) pitchAngle = pitchAngle + (targetPitch - pitchAngle) * 0.12 local centerCFrame = CFrame.new(currentPos) * CFrame.Angles(pitchAngle, math.rad(currentRotY), currentRoll) CameraPart.CFrame = centerCFrame workspace.CurrentCamera.CameraSubject = CameraPart -- 🛠️ Render Base Pesawat (1 - 13) for i, remote in ipairs(BaseProps) do if remote then local finalCF = centerCFrame if i == 1 then finalCF = centerCFrame * CFrame.new(0, 0, -2.5) else local row = math.floor(i / 2) local isLeft = (i % 2 == 0) local offsetX = isLeft and (-row * 3.8) or (row * 3.8) local wingVibe = math.sin(GlobalTimer * 14 + row) * 0.04 finalCF = centerCFrame * CFrame.new(offsetX, wingVibe, row * 2.4) end task.spawn(FireRemote, remote, finalCF) end end -- 💥 Render Sistem Peluru Split-Target (Setiap peluru serang 1 orang berbeda) UpdateDualTargets() for idx, ammoRemote in ipairs(AmmoProps) do if ammoRemote then -- Pilih target berdasarkan urutan peluru (Peluru 1 -> Target 1, Peluru 2 -> Target 2) local currentTarget = (idx == 1) and Target1 or Target2 local ammoCFrame = centerCFrame * CFrame.new(idx == 1 and -2 or 2, -2.5, 0.5) if WeaponActive and currentTarget and currentTarget:FindFirstChild("HumanoidRootPart") then local targetPart = currentTarget.HumanoidRootPart local shootCycle = math.sin(GlobalTimer * 42 + (idx * math.pi)) if shootCycle > 0.2 then -- Aiming & Prediction LookAt Target masing-masing ammoCFrame = CFrame.lookAt(targetPart.Position, targetPart.Position + targetPart.Velocity) * CFrame.Angles(math.random(-8,8), math.random(-8,8), math.random(-8,8)) else ammoCFrame = centerCFrame * CFrame.new(idx == 1 and -1.8 or 1.8, -2.3, -1) end else -- Mode Hover pas lagi gak nge-lock / safe mode local hoverVibe = math.sin(GlobalTimer * 8 + idx) * 0.03 ammoCFrame = centerCFrame * CFrame.new(idx == 1 and -1.5 or 1.5, -2.0 + hoverVibe, 0) * CFrame.Angles(math.rad(90), 0, 0) end task.spawn(FireRemote, ammoRemote, ammoCFrame) end end end) -- ========================================================== -- 🛠️ SMOOTH DRAGGING LOGIC SYSTEM -- ========================================================== local function BuatBisaDidrag(frame, handle) handle = handle or frame local dragging, dragInput, dragStart, startPos handle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = frame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) handle.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UIS.InputChanged:Connect(function(input) if input == dragInput and dragging then local delta = input.Position - dragStart frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) end -- ========================================================== -- 🎨 UI PREMIUM GENERATION -- ========================================================== local UI = Instance.new("ScreenGui") UI.Name = "B4_SplitTarget_V94" UI.ResetOnSpawn = false local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.Size = UDim2.new(0, 220, 0, 235) MainFrame.Position = UDim2.new(0.5, -110, 0.25, 0) MainFrame.BackgroundColor3 = Color3.fromRGB(24, 24, 28) MainFrame.BorderSizePixel = 0 MainFrame.Active = true local MainCorner = Instance.new("UICorner") MainCorner.CornerRadius = UDim.new(0, 10) MainCorner.Parent = MainFrame local MainStroke = Instance.new("UIStroke") MainStroke.Thickness = 1.5 MainStroke.Color = Color3.fromRGB(0, 170, 255) MainStroke.Parent = MainFrame MainFrame.Parent = UI local Header = Instance.new("Frame") Header.Size = UDim2.new(1, 0, 0, 35) Header.BackgroundColor3 = Color3.fromRGB(32, 32, 38) Header.BorderSizePixel = 0 local HeadCorner = Instance.new("UICorner") HeadCorner.CornerRadius = UDim.new(0, 10) HeadCorner.Parent = Header Header.Parent = MainFrame local Title = Instance.new("TextLabel") Title.Size = UDim2.new(0.7, 0, 1, 0) Title.Position = UDim2.new(0, 12, 0, 0) Title.BackgroundTransparency = 1 Title.Text = "B4 SPIRIT // V9.4" Title.TextColor3 = Color3.fromRGB(255, 255, 255) Title.Font = Enum.Font.GothamBold Title.TextSize = 12 Title.TextXAlignment = Enum.TextXAlignment.Left Title.Parent = Header local BtnMin = Instance.new("TextButton") BtnMin.Size = UDim2.new(0, 30, 0, 35) BtnMin.Position = UDim2.new(1, -35, 0, 0) BtnMin.BackgroundTransparency = 1 BtnMin.Text = "—" BtnMin.TextColor3 = Color3.fromRGB(200, 200, 200) BtnMin.Font = Enum.Font.GothamBold BtnMin.TextSize = 14 BtnMin.Parent = Header BuatBisaDidrag(MainFrame, Header) local function createMenuBtn(text, yPos) local b = Instance.new("TextButton") b.Size = UDim2.new(0.9, 0, 0, 35) b.Position = UDim2.new(0.05, 0, 0, yPos) b.BackgroundColor3 = Color3.fromRGB(36, 36, 44) b.Text = text b.TextColor3 = Color3.fromRGB(220, 220, 220) b.Font = Enum.Font.GothamMedium b.TextSize = 11 local bc = Instance.new("UICorner") bc.CornerRadius = UDim.new(0, 6) bc.Parent = b local bs = Instance.new("UIStroke") bs.Thickness = 1 bs.Color = Color3.fromRGB(55, 55, 65) bs.Parent = b b.Parent = MainFrame return b, bs end local BtnFlight, StrokeFlight = createMenuBtn("Flight Engine: OFF", 45) local BtnSonic, StrokeSonic = createMenuBtn("Sonic Overdrive: OFF", 90) local BtnWeapon, StrokeWeapon = createMenuBtn("Auto Lock Weapon: SAFE", 135) local BtnReset, StrokeReset = createMenuBtn("Wipe/Reset Base Cache", 180) BtnReset.BackgroundColor3 = Color3.fromRGB(44, 28, 28) StrokeReset.Color = Color3.fromRGB(80, 40, 40) BtnReset.TextColor3 = Color3.fromRGB(255, 120, 120) local LblStatus = Instance.new("TextLabel") LblStatus.Size = UDim2.new(1, 0, 0, 25) LblStatus.Position = UDim2.new(0, 0, 1, -25) LblStatus.BackgroundTransparency = 1 LblStatus.Text = "Base: 0/13 | Targets: Active" LblStatus.TextColor3 = Color3.fromRGB(120, 120, 130) LblStatus.Font = Enum.Font.Code LblStatus.TextSize = 10 LblStatus.Parent = MainFrame -- ========================================================== -- 📱 RESPONSIVE JUMBO MOBILE CONTROLLER (75x50px) -- ========================================================== local MobileControls = Instance.new("ScreenGui") MobileControls.Name = "B4_Jumbo_Controls" MobileControls.ResetOnSpawn = false MobileControls.Enabled = false local function createJumboBtn(text, pos, stateName, color) local b = Instance.new("TextButton") b.Size = UDim2.new(0, 75, 0, 50) b.Position = pos b.BackgroundColor3 = Color3.fromRGB(28, 28, 34) b.BackgroundTransparency = 0.1 b.Text = text b.TextColor3 = Color3.fromRGB(255, 255, 255) b.Font = Enum.Font.GothamBold b.TextSize = 14 local bc = Instance.new("UICorner") bc.CornerRadius = UDim.new(0, 8) bc.Parent = b local bs = Instance.new("UIStroke") bs.Thickness = 1.5 bs.Color = Color3.fromRGB(65, 65, 75) bs.Parent = b b.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then mobileInputs[stateName] = 1 b.BackgroundColor3 = color bs.Color = Color3.fromRGB(255, 255, 255) end end) b.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then mobileInputs[stateName] = 0 b.BackgroundColor3 = Color3.fromRGB(28, 28, 34) bs.Color = Color3.fromRGB(65, 65, 75) end end) b.Parent = MobileControls end local cBlue = Color3.fromRGB(0, 150, 255) local cGreen = Color3.fromRGB(0, 210, 110) createJumboBtn("▲", UDim2.new(0.08, 0, 0.58, 0), "Forward", cBlue) createJumboBtn("▼", UDim2.new(0.08, 0, 0.78, 0), "Backward", cBlue) createJumboBtn("◄", UDim2.new(0.01, 0, 0.68, 0), "TurnLeft", cBlue) createJumboBtn("►", UDim2.new(0.15, 0, 0.68, 0), "TurnRight", cBlue) createJumboBtn("NAIK", UDim2.new(0.85, 0, 0.60, 0), "Up", cGreen) createJumboBtn("TURUN", UDim2.new(0.85, 0, 0.75, 0), "Down", cGreen) -- ========================================================== -- ⚙️ UI INTERACTION LOGIC -- ========================================================== local isMinimized = false BtnMin.MouseButton1Click:Connect(function() isMinimized = not isMinimized MainFrame.Size = isMinimized and UDim2.new(0, 220, 0, 35) or UDim2.new(0, 220, 0, 235) BtnFlight.Visible = not isMinimized BtnSonic.Visible = not isMinimized BtnWeapon.Visible = not isMinimized BtnReset.Visible = not isMinimized LblStatus.Visible = not isMinimized BtnMin.Text = isMinimized and "+" or "—" end) BtnFlight.MouseButton1Click:Connect(function() B4Active = not B4Active if B4Active then local myChar = LP.Character if myChar and myChar:FindFirstChild("HumanoidRootPart") then targetPos = myChar.HumanoidRootPart.Position + Vector3.new(0, 25, 0) currentPos = targetPos targetRotY = myChar.HumanoidRootPart.Orientation.Y + 180 currentRotY = targetRotY myChar.HumanoidRootPart.Anchored = true end LockB4Props() MobileControls.Enabled = true BtnFlight.Text = "Flight Engine: ACTIVE" BtnFlight.BackgroundColor3 = Color3.fromRGB(0, 130, 220) StrokeFlight.Color = Color3.fromRGB(0, 220, 255) else B4Active = false SonicActive = false WeaponActive = false MobileControls.Enabled = false BtnFlight.Text = "Flight Engine: OFF" BtnFlight.BackgroundColor3 = Color3.fromRGB(36, 36, 44) StrokeFlight.Color = Color3.fromRGB(55, 55, 65) BtnSonic.Text = "Sonic Overdrive: OFF" BtnSonic.BackgroundColor3 = Color3.fromRGB(36, 36, 44) StrokeSonic.Color = Color3.fromRGB(55, 55, 65) BtnWeapon.Text = "Auto Lock Weapon: SAFE" BtnWeapon.BackgroundColor3 = Color3.fromRGB(36, 36, 44) StrokeWeapon.Color = Color3.fromRGB(55, 55, 65) if LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") then LP.Character.HumanoidRootPart.Anchored = false end workspace.CurrentCamera.CameraSubject = LP.Character:FindFirstChild("Humanoid") end end) BtnSonic.MouseButton1Click:Connect(function() if not B4Active then return end SonicActive = not SonicActive if SonicActive then BtnSonic.Text = "Sonic Overdrive: ON (MACH 2)" BtnSonic.BackgroundColor3 = Color3.fromRGB(190, 85, 0) StrokeSonic.Color = Color3.fromRGB(255, 160, 0) else BtnSonic.Text = "Sonic Overdrive: OFF" BtnSonic.BackgroundColor3 = Color3.fromRGB(36, 36, 44) StrokeSonic.Color = Color3.fromRGB(55, 55, 65) end end) BtnWeapon.MouseButton1Click:Connect(function() if not B4Active then return end WeaponActive = not WeaponActive if WeaponActive then BtnWeapon.Text = "Auto Lock Weapon: ARMED 💥" BtnWeapon.BackgroundColor3 = Color3.fromRGB(160, 0, 35) StrokeWeapon.Color = Color3.fromRGB(255, 60, 60) else BtnWeapon.Text = "Auto Lock Weapon: SAFE" BtnWeapon.BackgroundColor3 = Color3.fromRGB(36, 36, 44) StrokeWeapon.Color = Color3.fromRGB(55, 55, 65) end end) BtnReset.MouseButton1Click:Connect(function() table.clear(BaseProps) table.clear(AmmoProps) Target1 = nil Target2 = nil print("[B4 SYSTEM] Memori bodi dikosongkan!") end) -- Keyboard Fallback UIS.InputBegan:Connect(function(input, gpe) if gpe then return end local name = input.KeyCode.Name if keyboardKeys[name] ~= nil then keyboardKeys[name] = true end end) UIS.InputEnded:Connect(function(input) local name = input.KeyCode.Name if keyboardKeys[name] ~= nil then keyboardKeys[name] = false end end) -- Monitor Status Bar Loop task.spawn(function() while task.wait(0.2) do local name1 = Target1 and Target1.Name or "None" local name2 = Target2 and Target2.Name or "None" LblStatus.Text = "P1: " .. name1 .. " | P2: " .. name2 LblStatus.TextColor3 = WeaponActive and Color3.fromRGB(255, 60, 60) or Color3.fromRGB(0, 190, 255) end end) local targetParent = LP:FindFirstChildOfClass("PlayerGui") or game:GetService("CoreGui") if targetParent then UI.Parent = targetParent MobileControls.Parent = targetParent end print("[B4 SPIRIT] V9.4 Dual-Target Splitter Sukses Di-inject!")