FE pi pi
Key RequiredUniversal

FE pi pi

Universal ScriptVeryNetlyyyVeryNetlyyy 977 views 1.4K executesUpdated Feb 13, 2026
Unrated
00
Lua Script•178 lines (5399 chars)
local lplr = game.Players.LocalPlayer
local chat = game:GetService("TextChatService").TextChannels.RBXGeneral
local runService = game:GetService("RunService")
local CAS = game:GetService("ContextActionService")

-- Configuration
local WATER_GUN_ID = "16972562122"
local PISS_OFFSET = CFrame.new(0,-0.25,1.5) * CFrame.Angles(math.rad(-90),math.rad(90),0) * CFrame.Angles(0,0,math.rad(-45))
local VOICELINES = {
    "Ahhh, that's the stuff.",
    "Now the flowers will grow.",
    "I feel like a new man.",
    "There, that's better.",
}

-- Setup Rig
chat:SendAsync("-r6")
repeat task.wait() until lplr.Character and lplr.Character:FindFirstChild("Humanoid") and lplr.Character.Humanoid.RigType == Enum.HumanoidRigType.R6
task.wait(1)

-- Request Hats
local ghCmd = "-gh " .. string.rep(WATER_GUN_ID .. " ", 15)
chat:SendAsync(ghCmd)
task.wait(1.5)
chat:SendAsync(ghCmd)
task.wait(2)
chat:SendAsync("-net")

local chr = lplr.Character
local hrp = chr:WaitForChild("HumanoidRootPart")
local torso = chr:WaitForChild("Torso")

-- Create the Target Part
local pissPart = Instance.new("Part")
pissPart.Transparency = 1
pissPart.CanCollide = false
pissPart.Anchored = true
pissPart.Size = Vector3.new(1, 1, 1)
pissPart.Parent = workspace

local accs = {}
for _, a in ipairs(chr:GetChildren()) do
    if a:IsA("Accessory") and (a.Name:find("Hydro") or a.Name:find("Water")) then
        local handle = a:FindFirstChild("Handle")
        if handle then
            handle:BreakJoints()
            table.insert(accs, handle)
        end
    end
end

-- State Management
local isPissing = false
local useVoicelines = false

-- SPIN SYSTEMS
local spinHats = false       -- Minigun
local FountainHats = false   -- Fountain / orbit
local fastSpinHats = false   -- internal helper
local spinAngle = 0
local spinSpeed = 4

-- Physics Loop
runService.PostSimulation:Connect(function(dt)
    if isPissing then
        spinAngle = spinAngle + spinSpeed * dt

        for i, h in ipairs(accs) do
            local angle = spinAngle + (i * (2 * math.pi / #accs))

            if FountainHats then
                -- Fountain/orbit mode (C)
                local radius = 1.2
                local center = hrp.Position

                local orbitPos = center + Vector3.new(
                    math.cos(angle) * radius,
                    0.5,
                    math.sin(angle) * radius
                )

                h.CFrame = CFrame.new(orbitPos, center)

            elseif spinHats then
                -- Minigun spin (X)
                local radius = 1.5
                local spinOffset = CFrame.new(
                    math.cos(angle) * radius,
                    0,
                    math.sin(angle) * radius
                )
                h.CFrame = pissPart.CFrame * spinOffset

            else
                -- Default: just follow pissPart
                h.CFrame = pissPart.CFrame
            end

            h.Velocity = Vector3.new(0, 8.141 * math.pi, 0)
        end
    else
        for _, h in ipairs(accs) do
            h.CFrame = CFrame.new(0, -50, 0)
        end
    end
end)

runService.PreSimulation:Connect(function()
    if isPissing then
        pissPart.CFrame = torso.CFrame * PISS_OFFSET
    end
end)

-- Controls

-- F: Toggle stream
CAS:BindAction("PissAction", function(_, state)
    if state == Enum.UserInputState.Begin then
        isPissing = true
        if useVoicelines then
            chat:SendAsync(VOICELINES[math.random(1, #VOICELINES)])
        end
    elseif state == Enum.UserInputState.End then
        isPissing = false
    end
    return Enum.ContextActionResult.Sink
end, true, Enum.KeyCode.F)

-- Z: Toggle voicelines
CAS:BindAction("ToggleVC", function(_, state)
    if state == Enum.UserInputState.Begin then
        useVoicelines = not useVoicelines
        CAS:SetTitle("ToggleVC", useVoicelines and "VC: ON (Z)" or "VC: OFF (Z)")
    end
    return Enum.ContextActionResult.Sink
end, true, Enum.KeyCode.Z)

-- X: Minigun spin toggle
CAS:BindAction("MinigunHats", function(_, state)
    if state == Enum.UserInputState.Begin then
        spinHats = not spinHats
        if spinHats then
            FountainHats = false
            fastSpinHats = false
        end
        CAS:SetTitle("MinigunHats", spinHats and "Minigun: ON (X)" or "Minigun: OFF (X)")
    end
    return Enum.ContextActionResult.Sink
end, true, Enum.KeyCode.X)

-- C: Fountain / orbit around player
CAS:BindAction("FountainHats", function(_, state)
    if state == Enum.UserInputState.Begin then
        FountainHats = not FountainHats
        if FountainHats then
            spinHats = false
            fastSpinHats = true
        else
            fastSpinHats = false
        end
        CAS:SetTitle("FountainHats", FountainHats and "Fountain: ON (C)" or "Fountain: OFF (C)")
    end
    return Enum.ContextActionResult.Sink
end, true, Enum.KeyCode.C)

-- Initial button titles
CAS:SetTitle("PissAction", "Piss (F)")
CAS:SetTitle("ToggleVC", "VC: OFF (Z)")
CAS:SetTitle("MinigunHats", "Minigun: OFF (X)")
CAS:SetTitle("FountainHats", "Fountain: OFF (C)")

-- Optional positions (mobile)
CAS:SetPosition("ToggleVC", UDim2.fromScale(0, 0.1))
CAS:SetPosition("MinigunHats", UDim2.fromScale(0, 0.25))
CAS:SetPosition("FountainHats", UDim2.fromScale(0, 0.40))

print("Modded by: Quifdiver/theinfgod_224629")
chat:SendAsync("edited a bit by: quifdiver/theinfgod_224629")

Features & Information

original: FE piss basicly 2 more modes, x and c are the new modes fixed mobile buttons they were inside of eachother quite litterly (sorry if offset is wrong imma check in sec)
#FE *#edited#redesign

Community Comments (3)

VeryNetlyyyVeryNetlyyyApr 20, 2026

plz useeee :((((((((((((((((((((((((((((((((((

sonik_rafciosonik_rafcioJul 31, 2026

my friend NOOB tried

sonik_rafciosonik_rafcioAug 6, 2026

why do the hats delete after the script ends?

More Scripts for Universal Scripts