Noli Milestone 4 animss
Key RequiredUniversal

Noli Milestone 4 animss

Universal ScriptFEscript_showcaserFEscript_showcaser 1.2K views 2.6K executesUpdated Mar 28, 2026
Unrated
00
Lua Script•307 lines (9960 chars)
local PRIVATE_MODEL_ID = "Noli Milestone 4"

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")

local Player = Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local Humanoid = Character:WaitForChild("Humanoid")
local Root = Character:WaitForChild("HumanoidRootPart")
local Camera = Workspace.CurrentCamera

local WALK_SPEED = 7.5
local RUN_SPEED = 27.5

local RunMode = false
local currentAnim
local UsingAbility = false
local ObservantActive = false
local BlockingAnimation = false -- blocks Idle/Walk/Run overrides

-- Animator6D
if not getgenv().Animator6DLoadedPro then
    loadstring(game:HttpGet(
        "https://raw.githubusercontent.com/gObl00x/Stuff/refs/heads/main/Animator6D.lua"
    ))()
    repeat task.wait() until getgenv().Animator6DLoadedPro
end

local model = game:GetObjects(getcustomasset(PRIVATE_MODEL_ID..".rbxmx"))[1]

local Animations = {}
local function scan(obj)
    if obj:IsA("KeyframeSequence") then
        table.insert(Animations,obj)
    end
    for _,v in ipairs(obj:GetChildren()) do
        scan(v)
    end
end
scan(model)

local Idle, Walk, Run, Stab, Nova
local VoidStart, VoidLoop, VoidEnd, StartDashCombo, EndDashNonChar
local ObservantStart, ObservantLoop, ObservantTeleport

for _,anim in ipairs(Animations) do
    local n = anim.Name:lower()
    if n:find("idle") then Idle = anim
    elseif n:find("walk") then Walk = anim
    elseif n:find("run") or n:find("sprint") then Run = anim
    elseif n:find("stab") then Stab = anim
    elseif n == "nova" then Nova = anim
    elseif n == "voidrushstart" then VoidStart = anim
    elseif n == "loopdashinit" then VoidLoop = anim
    elseif n == "voidrushend" then VoidEnd = anim
    elseif n == "startdashcombo" then StartDashCombo = anim
    elseif n == "enddashnonchar" then EndDashNonChar = anim
    elseif n == "observantstart" then ObservantStart = anim
    elseif n == "observantloop" then ObservantLoop = anim
    elseif n == "observantteleport" then ObservantTeleport = anim
    end
end

Idle = Idle or Animations[1]
Walk = Walk or Animations[1]

local function Play(anim, looped)
    if currentAnim == anim then return end
    getgenv().Animator6DStop()
    task.wait(0.03)
    getgenv().Animator6D(anim,1,looped~=false)
    currentAnim = anim
end

local function GetAnimLength(anim)
    local length = 0
    for _,kf in ipairs(anim:GetKeyframes()) do
        if kf.Time > length then length = kf.Time end
    end
    return length
end

local function UpdateSpeed()
    Humanoid.WalkSpeed = RunMode and RUN_SPEED or WALK_SPEED
end

local gui = Instance.new("ScreenGui", Player.PlayerGui)

local runBtn = Instance.new("TextButton", gui)
runBtn.Size = UDim2.new(0,160,0,45)
runBtn.Position = UDim2.new(0.02,0,0.2,0)
runBtn.Text = "RUN: OFF"
runBtn.BackgroundColor3 = Color3.fromRGB(30,30,30)
runBtn.TextColor3 = Color3.new(1,1,1)
runBtn.Active = true
runBtn.Draggable = true
Instance.new("UICorner", runBtn)
runBtn.MouseButton1Click:Connect(function()
    RunMode = not RunMode
    UpdateSpeed()
    runBtn.Text = RunMode and "RUN: ON" or "RUN: OFF"
end)

local stabBtn = Instance.new("TextButton", gui)
stabBtn.Size = UDim2.new(0,160,0,45)
stabBtn.Position = UDim2.new(0.02,0,0.27,0)
stabBtn.Text = "STAB"
stabBtn.BackgroundColor3 = Color3.fromRGB(50,20,20)
stabBtn.TextColor3 = Color3.new(1,1,1)
stabBtn.Active = true
stabBtn.Draggable = true
Instance.new("UICorner", stabBtn)
stabBtn.MouseButton1Click:Connect(function()
    if not Stab or UsingAbility then return end
    UsingAbility = true
    BlockingAnimation = true
    Play(Stab,false)
    task.delay(GetAnimLength(Stab)+0.05,function() 
        UsingAbility=false 
        BlockingAnimation=false
    end)
end)

local novaBtn = Instance.new("TextButton", gui)
novaBtn.Size = UDim2.new(0,160,0,45)
novaBtn.Position = UDim2.new(0.02,0,0.34,0)
novaBtn.Text = "NOVA"
novaBtn.BackgroundColor3 = Color3.fromRGB(20,20,60)
novaBtn.TextColor3 = Color3.new(1,1,1)
novaBtn.Active = true
novaBtn.Draggable = true
Instance.new("UICorner", novaBtn)
novaBtn.MouseButton1Click:Connect(function()
    if not Nova or UsingAbility then return end
    UsingAbility = true
    BlockingAnimation = true
    Play(Nova,false)
    task.delay(GetAnimLength(Nova)+0.05,function() 
        UsingAbility=false 
        BlockingAnimation=false
    end)
end)

local voidBtn = Instance.new("TextButton", gui)
voidBtn.Size = UDim2.new(0,160,0,45)
voidBtn.Position = UDim2.new(0.02,0,0.41,0)
voidBtn.Text = "VOID RUSH"
voidBtn.BackgroundColor3 = Color3.fromRGB(60,0,80)
voidBtn.TextColor3 = Color3.new(1,1,1)
voidBtn.Active = true
voidBtn.Draggable = true
Instance.new("UICorner", voidBtn)

voidBtn.MouseButton1Click:Connect(function()
    if UsingAbility then return end
    if not (VoidStart and VoidLoop and VoidEnd and StartDashCombo and EndDashNonChar) then return end

    UsingAbility = true
    BlockingAnimation = true

    local function Dash(speed,duration)
        local hitDetected = false
        local startTime = tick()
        local conn
        conn = RunService.RenderStepped:Connect(function()
            if tick()-startTime >= duration or hitDetected then
                conn:Disconnect()
                return
            end
            local look = Camera.CFrame.LookVector
            local flatLook = Vector3.new(look.X,0,look.Z).Unit
            Root.CFrame = CFrame.new(Root.Position, Root.Position + flatLook)
            Root.Velocity = speed * flatLook
        end)

        local touchConn
        touchConn = Root.Touched:Connect(function(hit)
            local hum = hit.Parent and hit.Parent:FindFirstChild("Humanoid")
            if hum and hit.Parent ~= Character then
                hitDetected = true
                touchConn:Disconnect()
            end
        end)

        while tick()-startTime < duration and not hitDetected do task.wait(0.03) end
        conn:Disconnect()
        if touchConn.Connected then touchConn:Disconnect() end
        return hitDetected
    end

    Play(VoidStart,false)
    task.wait(GetAnimLength(VoidStart))
    Play(VoidLoop,true)
    local firstHit = Dash(60,4)

    if firstHit then
        task.wait(1)
        Play(StartDashCombo,false)
        task.wait(GetAnimLength(StartDashCombo))
        local secondHit = false
        local startTime2 = tick()
        Play(VoidLoop,true)
        local conn2
        conn2 = RunService.RenderStepped:Connect(function()
            if tick()-startTime2 >=4 then conn2:Disconnect() return end
            local look = Camera.CFrame.LookVector
            local flatLook = Vector3.new(look.X,0,look.Z).Unit
            Root.CFrame = CFrame.new(Root.Position, Root.Position + flatLook)
            Root.Velocity = (secondHit and 80 or 110) * flatLook
        end)
        local touchConn2
        touchConn2 = Root.Touched:Connect(function(hit)
            local hum = hit.Parent and hit.Parent:FindFirstChild("Humanoid")
            if hum and hit.Parent ~= Character then
                secondHit = true
                Play(EndDashNonChar,false)
                task.wait(GetAnimLength(EndDashNonChar))
                if conn2.Connected then conn2:Disconnect() end
                if touchConn2.Connected then touchConn2:Disconnect() end
            end
        end)
        while tick()-startTime2 <4 and not secondHit do task.wait(0.03) end
        if conn2.Connected then conn2:Disconnect() end
        if touchConn2.Connected then touchConn2:Disconnect() end
    else
        Play(VoidEnd,false)
        task.wait(GetAnimLength(VoidEnd))
    end

    UsingAbility=false
    BlockingAnimation=false
end)

local observantBtn = Instance.new("TextButton", gui)
observantBtn.Size = UDim2.new(0,160,0,45)
observantBtn.Position = UDim2.new(0.02,0,0.48,0)
observantBtn.Text = "OBSERVANT"
observantBtn.BackgroundColor3 = Color3.fromRGB(20,60,20)
observantBtn.TextColor3 = Color3.new(1,1,1)
observantBtn.Active = true
observantBtn.Draggable = true
Instance.new("UICorner", observantBtn)

local teleporting = false
local HasTeleported = false
local ObservantMouseConn

observantBtn.MouseButton1Click:Connect(function()
    ObservantActive = not ObservantActive
    HasTeleported = false

    if ObservantActive then
        BlockingAnimation = true -- recommend to not set to false
        Play(ObservantStart,false)
        task.wait(GetAnimLength(ObservantStart))
        
        spawn(function()
            while ObservantActive and not teleporting do
                Play(ObservantLoop,true)
                task.wait(0.1)
            end
        end)

        local mouse = Player:GetMouse()
        if ObservantMouseConn then ObservantMouseConn:Disconnect() end
        ObservantMouseConn = mouse.Button1Down:Connect(function()
            if teleporting or HasTeleported or not ObservantActive then return end
            teleporting = true
            HasTeleported = true

            local targetPos = mouse.Hit.Position
            Play(ObservantTeleport,false)

            task.delay(1.45,function()
                Root.CFrame = CFrame.new(targetPos + Vector3.new(0,3,0))
            end)

            task.delay(GetAnimLength(ObservantTeleport),function()
                teleporting = false
                BlockingAnimation = false
            end)
        end)
    else
        if ObservantMouseConn then ObservantMouseConn:Disconnect() end
        BlockingAnimation = false
    end
end)

RunService.RenderStepped:Connect(function()
    if BlockingAnimation then return end
    local moving = Humanoid.MoveDirection.Magnitude > 0
    if moving then
        if RunMode and Run then Play(Run,true) else Play(Walk,true) end
    else
        Play(Idle,true)
    end
end)

Player.CharacterAdded:Connect(function(c)
    Character = c
    Humanoid = c:WaitForChild("Humanoid")
    Root = c:WaitForChild("HumanoidRootPart")
    UpdateSpeed()
end)

Humanoid.WalkSpeed=WALK_SPEED

Features & Information

Noli Milestone anims. Will get updated in the future btw (it doesn't have void rush second snims. Also download the rbxmx first for this to work.

Community Comments (3)

where's the rbxmx download link?

Replying to @someguyonscriptblox
a_m_i_ra_m_i_rMar 28, 2026

@WhyAreYouReadingThi https://scriptblox.com/script/Forsaken-Get-noli-anims-153661

jonhboijonhboiMay 9, 2026

how to use it i cant find the gui

More Scripts for Universal Scripts