--[[ Minos Prime Abilities (estilo ULTRAKILL) - versão legítima - LocalScript padrão do Roblox (sem getgenv, writefile, HttpGet, sethiddenproperty, etc) - Feito para rig R6 - Afeta apenas o próprio personagem (não força fling/teleport em outros jogadores) - Coloque este script em StarterPlayer > StarterPlayerScripts ]] local Players = game:GetService("Players") local RunService = game:GetService("RunService") local TweenService = game:GetService("TweenService") local UserInputService = game:GetService("UserInputService") local Debris = game:GetService("Debris") local TextChatService = game:GetService("TextChatService") local plr = Players.LocalPlayer local char = plr.Character or plr.CharacterAdded:Wait() local hrp = char:WaitForChild("HumanoidRootPart") local hum = char:WaitForChild("Humanoid") local cam = workspace.CurrentCamera if hum.RigType ~= Enum.HumanoidRigType.R6 then warn("[MinosPrime] Este script foi feito para rig R6. Pode não funcionar corretamente em R15.") end -- // Speed e jump do personagem ao carregar o script hum.WalkSpeed = 46 hum.JumpPower = 49 -- // Limpeza de instâncias antigas (se o script for re-executado) pcall(function() plr.PlayerGui:FindFirstChild("MinosPrimeGui"):Destroy() end) pcall(function() workspace:FindFirstChild("MinosVFX"):Destroy() end) local vfxFolder = Instance.new("Folder") vfxFolder.Name = "MinosVFX" vfxFolder.Parent = workspace -- // IDs de som (troque pelos seus próprios ids de áudio públicos/carregados por você) local Sounds = { Die = "rbxassetid://0", Judgement = "rbxassetid://0", Crush = "rbxassetid://0", Landing = "rbxassetid://0", Whoosh = "rbxassetid://0", ThyEnd = "rbxassetid://0", Prepare = "rbxassetid://0", } local chatEnabled = true -- // Manda a voiceline no chat do Roblox (funciona com o chat novo e o antigo) local function sayInChat(msg) if not chatEnabled then return end local ok = pcall(function() if TextChatService.ChatVersion == Enum.ChatVersion.TextChatService then local channel = TextChatService.TextChannels:FindFirstChild("RBXGeneral") if channel then channel:SendAsync(msg) end else plr:Chat(msg) end end) if not ok then pcall(function() plr:Chat(msg) end) end end local function playSound(key, volume, pitch, parent) local id = Sounds[key] if not id or id == "rbxassetid://0" then return end local s = Instance.new("Sound") s.SoundId = id s.Volume = volume or 3 s.PlaybackSpeed = pitch or 1 s.Parent = parent or hrp s:Play() Debris:AddItem(s, 6) end -- // Shake de câmera simples (sem afetar outros jogadores) local function cameraShake(duration, intensity) local startTime = tick() local conn conn = RunService.RenderStepped:Connect(function() local elapsed = tick() - startTime if elapsed > duration then conn:Disconnect() return end local falloff = 1 - (elapsed / duration) cam.CFrame = cam.CFrame * CFrame.new( (math.random() - 0.5) * intensity * falloff, (math.random() - 0.5) * intensity * falloff, 0 ) end) end -- // Debris cosmético (parte só visual, não atinge outros jogadores) local function spawnDebris(amount, cf) local rayResult = workspace:Raycast(cf.Position, Vector3.new(0, -50, 0)) local material = Enum.Material.Slate local color = Color3.new(0.6, 0.6, 0.6) if rayResult and rayResult.Instance then material = rayResult.Instance.Material color = rayResult.Instance.Color end for _ = 1, amount do local p = Instance.new("Part") p.Name = "Debris" p.Size = Vector3.new(1, 1, 1) p.Material = material p.Color = color p.CFrame = cf p.CanCollide = false p.Anchored = false p.Parent = vfxFolder p.AssemblyLinearVelocity = Vector3.new( (math.random() - 0.5) * 40, math.random(5, 40), (math.random() - 0.5) * 40 ) local att0 = Instance.new("Attachment", p) local att1 = Instance.new("Attachment", p) att0.Position = Vector3.new(0, 0.5, 0) att1.Position = Vector3.new(0, -0.5, 0) local trail = Instance.new("Trail") trail.Attachment0 = att0 trail.Attachment1 = att1 trail.Lifetime = 0.6 trail.FaceCamera = true trail.Color = ColorSequence.new(Color3.new(1, 1, 1)) trail.Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 0.2), NumberSequenceKeypoint.new(1, 1), }) trail.Parent = p Debris:AddItem(p, 3) end end -- // Anel de choque cosmético no chão local function shockwaveRing(cf, duration, size, color) local ring = Instance.new("Part") ring.Anchored = true ring.CanCollide = false ring.CastShadow = false ring.Material = Enum.Material.Neon ring.Color = color or Color3.fromRGB(255, 140, 0) ring.Shape = Enum.PartType.Cylinder ring.Size = Vector3.new(0.2, 1, 1) ring.CFrame = cf * CFrame.Angles(0, 0, math.rad(90)) ring.Transparency = 0.3 ring.Parent = vfxFolder TweenService:Create(ring, TweenInfo.new(duration, Enum.EasingStyle.Quad), { Size = Vector3.new(0.2, size, size), Transparency = 1, }):Play() Debris:AddItem(ring, duration) end -- // Rastro nos braços durante um dash local function armTrail(duration, color) local limbs = { char:FindFirstChild("Left Arm"), char:FindFirstChild("Right Arm") } for _, limb in ipairs(limbs) do if limb then local att0 = Instance.new("Attachment", limb) local att1 = Instance.new("Attachment", limb) att0.Position = Vector3.new(0, limb.Size.Y / 2, 0) att1.Position = Vector3.new(0, -limb.Size.Y / 2, 0) local trail = Instance.new("Trail") trail.Attachment0 = att0 trail.Attachment1 = att1 trail.Lifetime = 0.3 trail.FaceCamera = true trail.Color = ColorSequence.new(color or Color3.new(1, 1, 1)) trail.Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 0.1), NumberSequenceKeypoint.new(1, 1), }) trail.Parent = limb Debris:AddItem(att0, duration) Debris:AddItem(att1, duration) Debris:AddItem(trail, duration) end end end -- // Aura de partículas ao redor do personagem (puramente cosmética) local function bodyAura(duration, color) local att = Instance.new("Attachment", hrp) local emitter = Instance.new("ParticleEmitter") emitter.Texture = "rbxassetid://243664672" -- textura padrão de fumaça/energia do catálogo do Roblox emitter.Color = ColorSequence.new(color or Color3.fromRGB(255, 255, 0)) emitter.Lifetime = NumberRange.new(0.4, 0.6) emitter.Rate = 40 emitter.Speed = NumberRange.new(2, 4) emitter.Size = NumberSequence.new({ NumberSequenceKeypoint.new(0, 2), NumberSequenceKeypoint.new(1, 0), }) emitter.Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 0.3), NumberSequenceKeypoint.new(1, 1), }) emitter.Parent = att Debris:AddItem(att, duration) return att end -- // ================= FALA ACIMA DA CABEÇA ================= local billboard = Instance.new("BillboardGui") billboard.Name = "MinosDialog" billboard.Size = UDim2.fromScale(4, 2) billboard.StudsOffset = Vector3.new(0, 2.5, 0) billboard.AlwaysOnTop = true billboard.Parent = char:WaitForChild("Head") local dialogLabel = Instance.new("TextLabel") dialogLabel.Name = "DialogText" dialogLabel.Size = UDim2.fromScale(1, 1) dialogLabel.BackgroundTransparency = 1 dialogLabel.Font = Enum.Font.Code dialogLabel.TextScaled = true dialogLabel.TextColor3 = Color3.new(1, 1, 1) dialogLabel.TextTransparency = 1 dialogLabel.Text = "" dialogLabel.Parent = billboard local dialogStroke = Instance.new("UIStroke", dialogLabel) dialogStroke.Color = Color3.new(0, 0, 0) dialogStroke.Thickness = 2 dialogStroke.Transparency = 1 local sayId = 0 local function Say(msg, holdDuration) sayId += 1 local thisId = sayId dialogLabel.TextTransparency = 0 dialogStroke.Transparency = 0 task.spawn(function() for i = 1, #msg do if sayId ~= thisId then return end dialogLabel.Text = string.sub(msg, 1, i) task.wait(0.02) end task.wait(holdDuration or 1) if sayId == thisId then TweenService:Create(dialogLabel, TweenInfo.new(1), { TextTransparency = 1 }):Play() TweenService:Create(dialogStroke, TweenInfo.new(1), { Transparency = 1 }):Play() end end) end -- // Encontra o jogador mais próximo apenas para MIRAR (não move o outro jogador) local function getClosestPlayer(radius) local closest, dist = nil, radius or math.huge for _, other in ipairs(Players:GetPlayers()) do if other ~= plr and other.Character then local otherHrp = other.Character:FindFirstChild("HumanoidRootPart") if otherHrp then local d = (hrp.Position - otherHrp.Position).Magnitude if d < dist then closest = otherHrp dist = d end end end end return closest end local function loadAnim(id) local anim = Instance.new("Animation") anim.AnimationId = "rbxassetid://" .. tostring(id) return hum:LoadAnimation(anim) end -- // ================= GUI ================= local gui = Instance.new("ScreenGui") gui.Name = "MinosPrimeGui" gui.ResetOnSpawn = false gui.Parent = plr.PlayerGui local mainFrame = Instance.new("Frame") mainFrame.Name = "MainFrame" mainFrame.AnchorPoint = Vector2.new(0.5, 0.5) mainFrame.Position = UDim2.fromScale(0.8, 0.5) mainFrame.Size = UDim2.fromScale(0.2, 0.65) mainFrame.BackgroundColor3 = Color3.new(0, 0, 0) mainFrame.BackgroundTransparency = 0.2 mainFrame.Parent = gui local corner = Instance.new("UICorner", mainFrame) corner.CornerRadius = UDim.new(0, 10) local stroke = Instance.new("UIStroke", mainFrame) stroke.Color = Color3.new(1, 1, 1) stroke.Thickness = 2 local layout = Instance.new("UIListLayout", mainFrame) layout.Padding = UDim.new(0, 8) layout.HorizontalAlignment = Enum.HorizontalAlignment.Center layout.SortOrder = Enum.SortOrder.LayoutOrder local padding = Instance.new("UIPadding", mainFrame) padding.PaddingTop = UDim.new(0, 10) padding.PaddingBottom = UDim.new(0, 10) local function createButton(text, order) local btn = Instance.new("TextButton") btn.Name = text btn.Text = text btn.Size = UDim2.new(0.85, 0, 0, 40) btn.BackgroundColor3 = Color3.new(0, 0, 0) btn.TextColor3 = Color3.new(1, 1, 1) btn.Font = Enum.Font.Code btn.TextScaled = true btn.LayoutOrder = order btn.Parent = mainFrame local c = Instance.new("UICorner", btn) c.CornerRadius = UDim.new(0, 6) local s = Instance.new("UIStroke", btn) s.Color = Color3.new(1, 1, 1) s.Thickness = 1.5 return btn end local function cooldownButton(btn, duration) btn.Active = false local original = btn.Text local remaining = duration task.spawn(function() while remaining > 0 do btn.Text = string.format("%.1f", remaining) task.wait(0.1) remaining -= 0.1 end btn.Text = original btn.Active = true end) end local dieButton = createButton("Die", 1) local judgementButton = createButton("Judgement", 2) local crushButton = createButton("Crush", 3) local thyEndButton = createButton("Thy End Is Now", 4) local prepareButton = createButton("Prepare Thyself", 5) local chatToggleButton = createButton("Chat: ON", 6) chatToggleButton.MouseButton1Click:Connect(function() chatEnabled = not chatEnabled chatToggleButton.Text = chatEnabled and "Chat: ON" or "Chat: OFF" end) -- // ================= HABILIDADES ================= local dieBusy = false dieButton.MouseButton1Click:Connect(function() if dieBusy then return end -- estilo Saitama: teleporta instantaneamente até o jogador mais próximo local targetHrp = getClosestPlayer(150) if not targetHrp then return end dieBusy = true local startCFrame = hrp.CFrame local targetPos = targetHrp.Position -- pose de "sumiço" antes do teleporte (agachar/preparar) playSound("Whoosh", 3) cameraShake(0.15, 1) task.wait(0.1) -- teleporte instantâneo (sem tween, pra parecer velocidade tipo Saitama) hrp.CFrame = CFrame.new(targetPos + Vector3.new(0, 3, -4), targetPos) * CFrame.Angles(0, math.rad(180), 0) -- efeito de rastro no ponto de partida e no ponto de chegada spawnDebris(6, startCFrame) shockwaveRing(startCFrame, 0.5, 15, Color3.fromRGB(255, 255, 255)) playSound("Die", 4) sayInChat("DIE!") cameraShake(0.4, 2) spawnDebris(15, CFrame.new(targetPos)) shockwaveRing(CFrame.new(targetPos), 0.8, 25, Color3.fromRGB(255, 60, 60)) hum:ChangeState(Enum.HumanoidStateType.GettingUp) cooldownButton(dieButton, 3) dieBusy = false end) local judgementBusy = false judgementButton.MouseButton1Click:Connect(function() if judgementBusy then return end local targetHrp = getClosestPlayer(60) if not targetHrp then return end judgementBusy = true playSound("Judgement", 4) sayInChat("JUDGEMENT!") -- posição de referência: 3 studs atrás/acima do alvo, sem mover o outro jogador local approachCFrame = targetHrp.CFrame * CFrame.new(0, 3, 5) * CFrame.Angles(math.rad(-90), 0, 0) local tween = TweenService:Create(hrp, TweenInfo.new(0.5, Enum.EasingStyle.Quad), { CFrame = approachCFrame, }) tween:Play() tween.Completed:Wait() cameraShake(0.5, 2) spawnDebris(15, hrp.CFrame) shockwaveRing(hrp.CFrame, 1, 40, Color3.fromRGB(0, 200, 255)) task.wait(0.3) hum:ChangeState(Enum.HumanoidStateType.GettingUp) cooldownButton(judgementButton, 5) judgementBusy = false end) local crushBusy = false crushButton.MouseButton1Click:Connect(function() if crushBusy then return end crushBusy = true local startPos = hrp.Position playSound("Whoosh", 3) -- sobe no ar local upTween = TweenService:Create(hrp, TweenInfo.new(0.6, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), { CFrame = CFrame.new(startPos + Vector3.new(0, 50, 0)), }) upTween:Play() upTween.Completed:Wait() task.wait(0.4) -- desce com impacto local downTween = TweenService:Create(hrp, TweenInfo.new(0.35, Enum.EasingStyle.Quad, Enum.EasingDirection.In), { CFrame = CFrame.new(startPos), }) downTween:Play() downTween.Completed:Wait() playSound("Crush", 5) sayInChat("CRUSH!") playSound("Landing", 3) cameraShake(0.5, 2.5) spawnDebris(20, CFrame.new(startPos)) shockwaveRing(CFrame.new(startPos), 1, 45, Color3.fromRGB(255, 165, 0)) hum:ChangeState(Enum.HumanoidStateType.GettingUp) cooldownButton(crushButton, 6) crushBusy = false end) local thyEndBusy = false thyEndButton.MouseButton1Click:Connect(function() if thyEndBusy then return end thyEndBusy = true -- avança rapidamente na direção em que a câmera/personagem está olhando local lookDir = hrp.CFrame.LookVector local startPos = hrp.Position local endPos = startPos + (lookDir * 45) Say("THY END IS NOW!", 1.5) sayInChat("THY END IS NOW!") playSound("ThyEnd", 4) armTrail(0.5, Color3.fromRGB(255, 0, 0)) cameraShake(0.6, 2) local dashTween = TweenService:Create(hrp, TweenInfo.new(0.35, Enum.EasingStyle.Linear), { CFrame = CFrame.new(endPos, endPos + lookDir), }) dashTween:Play() dashTween.Completed:Wait() spawnDebris(18, hrp.CFrame) shockwaveRing(hrp.CFrame, 0.9, 35, Color3.fromRGB(255, 0, 0)) cooldownButton(thyEndButton, 6) thyEndBusy = false end) local prepareBusy = false prepareButton.MouseButton1Click:Connect(function() if prepareBusy then return end prepareBusy = true Say("PREPARE THYSELF!", 1.5) sayInChat("PREPARE THYSELF!") playSound("Prepare", 4) local aura = bodyAura(3, Color3.fromRGB(0, 200, 255)) shockwaveRing(hrp.CFrame, 1.2, 30, Color3.fromRGB(0, 200, 255)) cameraShake(0.3, 1) -- buff temporário só no seu próprio personagem local originalSpeed = hum.WalkSpeed local originalJump = hum.JumpPower hum.WalkSpeed = originalSpeed * 1.5 hum.JumpPower = originalJump * 1.3 task.wait(5) hum.WalkSpeed = originalSpeed hum.JumpPower = originalJump if aura then aura:Destroy() end cooldownButton(prepareButton, 10) prepareBusy = false end) -- // Reset ao morrer/respawnar plr.CharacterAdded:Connect(function(newChar) char = newChar hrp = newChar:WaitForChild("HumanoidRootPart") hum = newChar:WaitForChild("Humanoid") billboard.Parent = newChar:WaitForChild("Head") hum.WalkSpeed = 46 hum.JumpPower = 49 end)