
Key RequiredUniversal

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera
local Mouse = LocalPlayer:GetMouse()
local rightCtrlDown = false
local function logOutput(logType, message, bypass)
if (bypass or getgenv().Network.Output.Enabled) and typeof(logType) == "function" then
logType(getgenv().Network.Output.Prefix .. message)
end
end
if not getgenv().Network then
local Network = {
BaseParts = {},
Output = {
Enabled = true,
Prefix = "[NETWORK] ",
Send = logOutput
},
CharacterRelative = false,
Velocity = Vector3.new(14.46262424, 14.46262424, 14.46262424)
}
getgenv().Network = Network
logOutput(print, ": Loading.")
function Network.RetainPart(part, returnFake)
logOutput(print, 'Checking '..tostring(part)..'...')
logOutput(print, 'Is an Instance: '..tostring(typeof(part) == "Instance"))
logOutput(print, 'Is a Part: '..tostring(part:IsA("Part") or part:IsA("MeshPart")))
logOutput(print, 'Is a descendant of workspace: '..tostring(part:IsDescendantOf(workspace)))
assert(typeof(part) == "Instance" and (part:IsA("Part") or part:IsA("MeshPart")) and part:IsDescendantOf(workspace), "RetainPart Error: Invalid part.")
if returnFake and typeof(returnFake) ~= "boolean" then
error("RetainPart Error: Invalid returnFake flag.")
end
if table.find(Network.BaseParts, part) then
logOutput(warn, "Part already retained: " .. part:GetFullName())
return false
end
if Network.CharacterRelative then
local character = LocalPlayer.Character
if not (character and character.PrimaryPart) then
logOutput(warn, "Character.PrimaryPart not found.")
return false
end
local dist = (character.PrimaryPart.Position - part.Position).Magnitude
if dist > 1000 then
logOutput(warn, "Part too far from character: " .. part:GetFullName())
return false
end
end
table.insert(Network.BaseParts, part)
part.CustomPhysicalProperties = PhysicalProperties.new(0, 0, 0, 0, 0)
logOutput(print, "PartOwnership applied to: " .. part:GetFullName())
return returnFake and FakePart or true
end
function Network.RemovePart(part)
assert(typeof(part) == "Instance" and part:IsA("BasePart"), "RemovePart Error: Invalid part.")
local idx = table.find(Network.BaseParts, part)
if idx then
table.remove(Network.BaseParts, idx)
logOutput(print, "Removed PartOwnership from: " .. part:GetFullName())
else
logOutput(warn, "Part not found: " .. part:GetFullName())
end
end
local SuperStepper = Instance.new("BindableEvent")
Network.SuperStepper = SuperStepper
for _, event in ipairs({RunService.Stepped, RunService.Heartbeat}) do
event:Connect(function()
SuperStepper:Fire(SuperStepper, tick())
end)
end
Network.PartOwnership = {
Enabled = false,
PreMethodSettings = {}
}
function Network.PartOwnership.Enable()
if Network.PartOwnership.Enabled then
logOutput(warn, "PartOwnership already enabled.")
return
end
Network.PartOwnership.Enabled = true
Network.PartOwnership.PreMethodSettings = {
ReplicationFocus = LocalPlayer.ReplicationFocus,
SimulationRadius = gethiddenproperty(LocalPlayer, "SimulationRadius")
}
LocalPlayer.ReplicationFocus = workspace
Network.PartOwnership.Connection = SuperStepper.Event:Connect(function()
sethiddenproperty(LocalPlayer, "SimulationRadius", math.huge)
for _, part in ipairs(Network.BaseParts) do
task.spawn(function()
if part:IsDescendantOf(workspace) then
if Network.CharacterRelative then
local character = LocalPlayer.Character
if not (character and character.PrimaryPart) then
logOutput(warn, "Missing Character.PrimaryPart.")
return
end
if (character.PrimaryPart.Position - part.Position).Magnitude > 1000 then
logOutput(warn, "Part too far: " .. part:GetFullName())
Network.RemovePart(part)
return
end
end
part.Velocity = Network.Velocity + Vector3.new(0, math.cos(tick() * 10) / 100, 0)
else
Network.RemovePart(part)
end
end)
end
end)
logOutput(print, "PartOwnership enabled.")
end
function Network.PartOwnership.Disable()
if not Network.PartOwnership.Connection then
logOutput(warn, "PartOwnership already disabled.")
return
end
Network.PartOwnership.Connection:Disconnect()
LocalPlayer.ReplicationFocus = Network.PartOwnership.PreMethodSettings.ReplicationFocus
sethiddenproperty(LocalPlayer, "SimulationRadius", Network.PartOwnership.PreMethodSettings.SimulationRadius)
for _, part in ipairs(Network.BaseParts) do
Network.RemovePart(part)
end
Network.BaseParts = {}
Network.PartOwnership.Enabled = false
logOutput(print, "PartOwnership disabled.")
end
logOutput(print, ": Loaded.")
end
task.spawn(getgenv().Network.PartOwnership.Enable)
local character = LocalPlayer.Character
local IsR15 = character.Humanoid.RigType == Enum.HumanoidRigType.R15
local root
local handsAndLegs = {}
if IsR15 then
for _,v in character:FindFirstChildOfClass('Humanoid'):GetAccessories() do
if v.Name == "MeshPartAccessory" then
if v.Handle.MeshId == "rbxassetid://4819720316" then
root = v.Handle
else
table.insert(handsAndLegs, v.Handle)
end
end
end
else
for _,v in character:FindFirstChildOfClass('Humanoid'):GetAccessories() do
if v.Name == "MeshPartAccessory" then
if v.Handle.SpecialMesh.MeshId == "rbxassetid://4819720316" then
root = v.Handle
else
table.insert(handsAndLegs, v.Handle)
end
end
end
end
local pet = character['Accessory (ChudrikAccessory)'].Handle
local function CreateBodyMovers(part)
local bp = Instance.new("BodyPosition", part)
bp.D = 100
bp.P = 10000
bp.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
local bg = Instance.new("BodyGyro", part)
bg.D = 100
bg.P = 10000
bg.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
return bp, bg
end
replicatesignal(LocalPlayer.ConnectDiedSignalBackend)
task.wait(Players.RespawnTime)
local startPos = character.HumanoidRootPart.Position
character.HumanoidRootPart.CFrame = CFrame.new(0, workspace.FallenPartsDestroyHeight+10, 0)
task.wait(.1)
character:FindFirstChildOfClass("Humanoid"):ChangeState(15)
getgenv().Network.RetainPart(root)
getgenv().Network.RetainPart(pet)
local handsMovers = {}
for i = 1, 4 do
local part = handsAndLegs[i]
if part then
local bp, bg = CreateBodyMovers(part)
handsMovers[i] = {
bp = bp,
bg = bg,
angleX = (i == 1 or i == 3) and math.rad(-90) or math.rad(90),
angleY = 0,
offset = if i <= 2
then Vector3.new(i == 1 and 1.5 or -1.5, 1, 0)
else Vector3.new(i == 3 and 0.625 or -0.625, -1, 0)
}
end
end
for _,v in handsAndLegs do
getgenv().Network.RetainPart(v)
end
local bp, bg = CreateBodyMovers(root)
local bpPet, bgPet = CreateBodyMovers(pet)
local movementPart = Instance.new("Part", workspace)
movementPart.Position = startPos
movementPart.Size = Vector3.new(2, 4, 2)
movementPart.Transparency = 1
local tempMover = Instance.new('BodyAngularVelocity', movementPart)
tempMover.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
tempMover.AngularVelocity = Vector3.zero
tempMover.P = 10000
tempMover = Instance.new('BodyVelocity', movementPart)
tempMover.MaxForce = Vector3.new(math.huge, 0, math.huge)
tempMover.Velocity = Vector3.zero
tempMover.P = 10000
movementPart.CustomPhysicalProperties = PhysicalProperties.new(0.7, 0, 0, 100, 100)
UserInputService.JumpRequest:Connect(function()
movementPart.Velocity += Vector3.new(0, 60, 0)
end)
Mouse.Button1Down:Connect(function()
if UserInputService:IsKeyDown(Enum.KeyCode.RightControl) then
movementPart.Position = Mouse.Hit.Position + Vector3.yAxis
end
end)
Camera.CameraSubject = movementPart
local function rotateSmoothDirection(direction, deltaTime)
if direction.Magnitude == 0 then return end
local flatDirection = Vector3.new(direction.X, 0, direction.Z).Unit
local targetRotation = CFrame.lookAt(movementPart.Position, movementPart.Position - flatDirection)
local smoothCFrame = movementPart.CFrame:Lerp(CFrame.new(movementPart.Position) * targetRotation.Rotation, deltaTime*10)
movementPart.CFrame = smoothCFrame
end
local function rotateWithCamera()
local lookVector = Camera.CFrame.LookVector
local flatLook = Vector3.new(lookVector.X, 0, lookVector.Z).Unit
if flatLook.Magnitude == 0 then return end
local targetRotation = CFrame.lookAt(movementPart.Position, movementPart.Position - flatLook)
movementPart.CFrame = CFrame.new(movementPart.Position) * targetRotation.Rotation
end
local rad15Z = CFrame.Angles(0, 0, -math.rad(15))
local rad180Y = CFrame.Angles(0, math.rad(180), 0)
local forward = true
local moving = false
local Players = game:GetService("Players")
local function getNearestPlr()
local lowest = math.huge
local NearestPlayer
for _,plr in pairs(Players:GetPlayers()) do
if plr ~= LocalPlayer and plr.Character then
local distance = plr:DistanceFromCharacter(movementPart.Position)
if distance < lowest then
lowest = distance
NearestPlayer = plr
end
end
end
return NearestPlayer
end
local willFollowNotMe = false
local targetOffset = Vector3.zero
local target
local tempPlr
spawn(function()
while wait(math.random(30, 60)) do
targetOffset = Vector3.zero
if math.random(0, 10) > 5 then
target = getNearestPlr().Character.Head
willNotFollowMe = true
else
tempPlr = getNearestPlr().Character
if tempPlr:FindFirstChild('LowerTorso') then
target = tempPlr.LowerTorso
willNotFollowMe = true
elseif tempPlr:FindFirstChild('Torso') then
target = tempPlr.Torso
targetOffset = Vector3.new(0, -1, 0)
willNotFollowMe = true
end
end
if willNotFollowMe then
wait(math.random(10, 30))
willNotFollowMe = false
end
end
end)
bpPet.Position = startPos
pet.Position = startPos
RunService.Heartbeat:Connect(function(deltaTime)
if not UserInputService:GetFocusedTextBox() then
local moveDir = Vector3.zero
if not (UserInputService:IsKeyDown(Enum.KeyCode.W) and UserInputService:IsKeyDown(Enum.KeyCode.S)) then
if UserInputService:IsKeyDown(Enum.KeyCode.W) then
local lookVector = Camera.CFrame.LookVector
moveDir += Vector3.new(lookVector.X, 0, lookVector.Z)
elseif UserInputService:IsKeyDown(Enum.KeyCode.S) then
local lookVector = Camera.CFrame.LookVector
moveDir -= Vector3.new(lookVector.X, 0, lookVector.Z)
end
end
if not (UserInputService:IsKeyDown(Enum.KeyCode.A) and UserInputService:IsKeyDown(Enum.KeyCode.D)) then
if UserInputService:IsKeyDown(Enum.KeyCode.A) then
local rightVector = Camera.CFrame.RightVector
moveDir -= Vector3.new(rightVector.X, 0, rightVector.Z)
elseif UserInputService:IsKeyDown(Enum.KeyCode.D) then
local rightVector = Camera.CFrame.RightVector
moveDir += Vector3.new(rightVector.X, 0, rightVector.Z)
end
end
if moveDir.Magnitude > 0 then
moving = true
moveDir = moveDir.Unit
movementPart.Position += moveDir * deltaTime * 20
if UserInputService.MouseBehavior ~= Enum.MouseBehavior.LockCenter then
rotateSmoothDirection(moveDir, deltaTime)
end
else
moving = false
forward = true
end
if UserInputService.MouseBehavior == Enum.MouseBehavior.LockCenter then
rotateWithCamera()
end
end
bp.Position = movementPart.Position + Vector3.yAxis
bg.CFrame = movementPart.CFrame * rad15Z
root.CFrame = movementPart.CFrame * rad15Z + Vector3.yAxis
for i = 1, 4 do
local mover = handsMovers[i]
if mover then
if moving then
if i == 1 or i == 4 then
if forward then
mover.angleY += 1
if mover.angleY == 45 then
forward = false
end
else
mover.angleY -= 1
if mover.angleY == -45 then
forward = true
end
end
else
if forward then
mover.angleY -= 1
else
mover.angleY += 1
end
end
else
mover.angleY = 0
end
local targetCFrame = movementPart.CFrame
* CFrame.new(mover.offset)
* CFrame.Angles(math.rad(mover.angleY), 0, mover.angleX)
mover.bp.Position = targetCFrame.Position
mover.bg.CFrame = targetCFrame
handsAndLegs[i].CFrame = targetCFrame
end
end
local tempCFrame
local tempPos
if willNotFollowMe then
if target then
if (pet.Position - target.Position).Magnitude > 2 then
tempCFrame = CFrame.lookAt(pet.Position, target.Position + targetOffset)*rad180Y
bgPet.CFrame = tempCFrame
tempPos = (pet.Position - (bgPet.CFrame.LookVector * deltaTime * 20))
bpPet.Position = tempPos
pet.Position = tempPos
end
else
willNotFollowMe = false
end
else
if (pet.Position - movementPart.Position).Magnitude > 3 then
tempCFrame = CFrame.lookAt(pet.Position, movementPart.Position)*rad180Y
bgPet.CFrame = tempCFrame
tempPos = pet.Position - (bgPet.CFrame.LookVector * deltaTime * 20)
bpPet.Position = tempPos
pet.Position = tempPos
end
end
end)No comments yet for this script.



