local startTime = tick()
local ownerName
if owner then
ownerName = owner.Name
else
ownerName = "NOTHINGNEWTODAY"
end
-- Setup --
local nls = require(14329084597)()
local forceLockModule = require(17405456871)
local assetModule = require(17547838047) -- OG: 17547838047
local importAssets = assetModule("𒈙 this property belongs to zekevious 𒈙")
local tempHumanoid = Instance.new("Humanoid",game:GetService("ProximityPromptService"))
importAssets(tempHumanoid)
repeat until tempHumanoid:FindFirstChildOfClass("HumanoidDescription")
local assets = tempHumanoid:FindFirstChildOfClass("HumanoidDescription"); assets.Parent = nil
local function destroy(instance) pcall(game.Destroy,instance) end
destroy(tempHumanoid)
-- Functions --
local function ranService()
local services = {
game:GetService("JointsService"),
game:GetService("CaptureService"),
game:GetService("KeyframeSequenceProvider"),
game:GetService("MaterialService"),
game:GetService("MarketplaceService"),
game:GetService("StylingService"),
game:GetService("TextBoxService"),
game:GetService("Chat"),
game:GetService("LogService"),
game:GetService("AdService"),
game:GetService("AssetDeliveryProxy"),
game:GetService("AnalyticsService"),
game:GetService("Stats"),
game:GetService("FriendService"),
game:GetService("AssetDeliveryProxy"),
game:GetService("AnimationFromVideoCreatorService")
}
return services[math.random(1,#services)]
end
local function randomString()
local result = ""
for i = 1, math.random(100,300) do
local randomChar = string.char(math.random(0, 127))
result = result .. randomChar
end
return result
end
local function ranInstance()
local instances = {
"Configuration",
"Folder",
"Decal",
"Tool",
"Dialog",
"ControllerManager",
"TerrainDetail",
"Shirt",
"Pants",
"Team",
"TextLabel",
"Animation",
"TextBox",
"TextButton",
"FaceControls",
"GroundController",
"AirController",
"LocalizationTable",
"Path2D",
"UIFlexItem",
"BodyForce",
"BodyGyro",
"ScreenGui",
"SurfaceGui",
"Frame",
"ImageLabel",
"PathfindingModifier",
"Flag",
"CustomEvent",
"Camera",
"TextChannel",
"DepthOfFieldEffect"
}
return instances[math.random(1,#instances)]
end
local function renewBackups()
local tempHumanoid = Instance.new("Humanoid",ranService())
tempHumanoid:ApplyDescription(assets)
repeat until tempHumanoid:FindFirstChildOfClass("HumanoidDescription")
local newAssets = tempHumanoid:FindFirstChildOfClass("HumanoidDescription"); newAssets.Parent = nil; destroy(tempHumanoid)
return newAssets
end
local function tempInstance(className)
local newInstance = Instance.new(className)
newInstance:AddTag("Dummy")
return newInstance
end
local function randomFill(instance,count)
for i=1,count do
local newInstance = tempInstance(ranInstance())
newInstance.Name = randomString()
newInstance.Parent = instance
end
end
local replicatedServices = {
game:GetService("SoundService"),
game:GetService("Chat"),
game:GetService("MarketplaceService"),
game:GetService("Players"),
game:GetService("StarterPlayer"),
game:GetService("LocalizationService"),
game:GetService("JointsService"),
game:GetService("FriendService"),
game:GetService("InsertService"),
game:GetService("Lighting"),
game:GetService("Teams"),
game:GetService("ReplicatedStorage"),
game:GetService("ProximityPromptService")
}
local function newRemote()
local newRemote = Instance.new("RemoteEvent")
newRemote.Name = randomString()
newRemote.Parent = replicatedServices[math.random(1,#replicatedServices)]
return newRemote
end
local data = {
location = CFrame.new(0,3,-20),
action = 1,
gunAction = 0,
fallSpeed = 0,
speed = 0,
killType = 0,
moving = false,
flying = false,
grounded = false,
falling = false,
cameraCFrame = CFrame.new(),
mouseLock = false,
canMove = true,
gunEquipped = false,
isShooting = false,
corruptionEnabled = false,
ignore = {}
}
local misc = {
fakeRoot = tempInstance("Part"),
lockDummy = tempInstance("Model"),
remote = tempInstance("RemoteEvent"),
backup = nil,
backupsList = {}
}
local activeParts = {
torso = tempInstance("Model"),
head = tempInstance("Model"),
rarm = tempInstance("Model"),
larm = tempInstance("Model"),
rleg = tempInstance("Model"),
lleg = tempInstance("Model"),
gun = tempInstance("Model")
}
local welds = {
rj = {C0 = CFrame.new(0,0,0)*CFrame.Angles(math.rad(0),math.rad(0),math.rad(0)),C1 = CFrame.new(0,0,0)*CFrame.Angles(math.rad(0),math.rad(0),math.rad(0))},
neck = {C0 = CFrame.new(0,0,0)*CFrame.Angles(math.rad(0),math.rad(0),math.rad(0)),C1 = CFrame.new(0,-0.5,0)*CFrame.Angles(math.rad(0),math.rad(0),math.rad(0))},
rs = {C0 = CFrame.new(0,0,0)*CFrame.Angles(math.rad(0),math.rad(0),math.rad(0)),C1 = CFrame.new(-0.5,0.5,0)*CFrame.Angles(math.rad(0),math.rad(0),math.rad(0))},
ls = {C0 = CFrame.new(0,0,0)*CFrame.Angles(math.rad(0),math.rad(0),math.rad(0)),C1 = CFrame.new(0.5,0.5,0)*CFrame.Angles(math.rad(0),math.rad(0),math.rad(0))},
rh = {C0 = CFrame.new(0,0,0)*CFrame.Angles(math.rad(0),math.rad(0),math.rad(0)),C1 = CFrame.new(0,1,0)*CFrame.Angles(math.rad(0),math.rad(0),math.rad(0))},
lh = {C0 = CFrame.new(0,0,0)*CFrame.Angles(math.rad(0),math.rad(0),math.rad(0)),C1 = CFrame.new(0,1,0)*CFrame.Angles(math.rad(0),math.rad(0),math.rad(0))},
gun = {C0 = CFrame.new(9e9,9e9,9e9)*CFrame.Angles(math.rad(0),math.rad(0),math.rad(0)),C1 = CFrame.new(0, 1.25, 0.4)*CFrame.Angles(math.rad(0),math.rad(0),math.rad(0))}
}
local controls = {
w = false,
a = false,
s = false,
d = false,
q = false,
space = false
}
local clientSource = [[
repeat task.wait() until game:IsLoaded() and game.Loaded
print("Loading client;")
local player = game:GetService("Players").LocalPlayer
local parentPack = script.Parent
repeat task.wait() until parentPack:FindFirstChildOfClass("StringValue")
local ownerName = parentPack:FindFirstChildOfClass("StringValue").Value; parentPack.Parent = nil
local isOwner = false
local remote = nil
if ownerName == player.Name then
isOwner = true
end
local data = {
location = CFrame.new(0,3,-20),
flying = false,
moving = false,
camModel = Instance.new("Model"),
camPart = Instance.new("Part"),
songTime = 0,
mouseLock = false,
}
data.camPart.Parent = data.camModel
local misc = {
audio = nil
}
local controls = {
w = false,
a = false,
s = false,
d = false,
q = false,
space = false
}
local function destroy(instance)
pcall(game.Destroy,instance)
end
local function dedicateFind(parent,name,className)
local highestNumber = -math.huge
local targetInstance = nil
for _, child in pairs(parent:GetDescendants()) do
if string.find(child.Name, name) and child:IsA(className) then
local number = tonumber(child.Name:match("%d+%.%d+"))
if number then
if number > highestNumber then
highestNumber = number
targetInstance = child
end
end
end
end
return targetInstance
end
local function playSound(soundId,volume,parent,playOnRemove,position,playBackSpeed)
local soundArea
local newSound = Instance.new("Sound")
newSound.SoundId = "rbxassetid://"..soundId
newSound.Volume = volume
newSound.PlaybackSpeed = playBackSpeed
if position then
soundArea = Instance.new("FlagStand",game:GetService("SoundService"))
soundArea.Position = position
newSound.Parent = soundArea
else
newSound.Parent = parent
end
if playOnRemove then
newSound.PlayOnRemove = true
if soundArea then
soundArea:Destroy()
else
newSound:Destroy()
end
else
newSound.Ended:Connect(function()
pcall(game.Destroy,newSound)
if position then
pcall(game.Destroy,soundArea)
end
end)
if position then
return newSound, soundArea
else
return newSound
end
end
end
local function customRandom(min, max)
return min + math.random() * (max - min)
end
local function randomString()
local result = ""
for i = 1, math.random(100,300) do
local randomChar = string.char(math.random(0, 127))
result = result .. randomChar
end
return result
end
local talkBubbles = {}
local talkEvent = Instance.new("BindableEvent")
local function talkFunction(chatMessage)
talkEvent:Fire()
local originHeight = 2.5
local newTalk = Instance.new("BillboardGui",player:FindFirstChildOfClass("PlayerGui"))
local wordsFrame = Instance.new("TextLabel",newTalk)
table.insert(talkBubbles,newTalk)
newTalk.Active = true;
newTalk.LightInfluence = 1;
newTalk.AlwaysOnTop = true;
newTalk.Size = UDim2.new(20, 0, 1, 0);
newTalk.ClipsDescendants = true;
newTalk.Name = randomString();
newTalk.StudsOffset = Vector3.new(0, 2, 0)
newTalk.StudsOffsetWorldSpace = data.location.Position+Vector3.new(0,2.5,0)
wordsFrame.TextWrapped = true;
wordsFrame.TextStrokeTransparency = 0;
wordsFrame.BorderSizePixel = 0;
wordsFrame.TextScaled = true;
wordsFrame.BackgroundColor3 = Color3.new(1, 1, 1);
wordsFrame.TextStrokeColor3 = Color3.new(0.14902, 0.14902, 0.14902);
wordsFrame.TextSize = 20;
wordsFrame.Size = UDim2.new(1, 0, 1, 0);
wordsFrame.Name = randomString();
wordsFrame.BorderColor3 = Color3.new(0, 0, 0);
wordsFrame.Text = "";
wordsFrame.BackgroundTransparency = 1;
wordsFrame.TextColor3 = Color3.new(0.443137, 0.443137, 0.443137)
wordsFrame.Font = Enum.Font.Jura
local talkEventConnection = talkEvent.Event:Connect(function()
originHeight = originHeight + 1.15
end)
local destroyConnection
local textConnection = game:GetService("RunService").RenderStepped:Connect(function()
newTalk.StudsOffsetWorldSpace = data.location.Position+Vector3.new(0,originHeight,0)
end)
destroyConnection = newTalk.Destroying:Connect(function()
textConnection:Disconnect()
talkEventConnection:Disconnect()
destroyConnection:Disconnect()
end)
if #talkBubbles > 10 then
local firstBubble = talkBubbles[1]
table.remove(talkBubbles,1)
firstBubble:Destroy()
end
for i = 1,string.len(chatMessage) do
task.wait(0.05)
if newTalk then
playSound(12221967,2,nil,true,data.location.Position,customRandom(0.3,0.7))
wordsFrame.Text = string.sub(chatMessage,1,i)
end
end
task.wait(3)
local tweenInfo = TweenInfo.new(1, Enum.EasingStyle.Linear, Enum.EasingDirection.Out)
local transparencyTween = game:GetService("TweenService"):Create(wordsFrame, tweenInfo, { TextTransparency = 1 })
transparencyTween:Play()
transparencyTween.Completed:Connect(function()
textConnection:Disconnect()
talkEventConnection:Disconnect()
newTalk:Destroy()
end)
end
local function calculateVolume()
local distance = (workspace.CurrentCamera.CFrame.Position - data.location.Position).magnitude
local volume = 1 - math.min(1, distance / 35)
return volume
end
local function randomOrientation(instance,range)
return CFrame.new(instance.Position.X+math.random(-range,range),instance.Position.Y+math.random(-range,range),instance.Position.Z+math.random(-range,range))*CFrame.Angles(math.rad(math.random(0, 360)), math.rad(math.random(0, 360)), math.rad(math.random(0, 360)))
end
local tweenService = game:GetService("TweenService")
local function effectPart(cframe)
local tweenConnection
local newEffect = Instance.new("Part",workspace)
newEffect.CFrame = cframe
newEffect.Anchored = true
newEffect.CanQuery = false
newEffect.CanTouch = false
newEffect.CanCollide = false
newEffect.Transparency = 0.5
newEffect.Name = randomString()
newEffect.Size = Vector3.new(math.random(1,2), math.random(1,2), math.random(1,2))
newEffect.Color = Color3.fromRGB(0, 0, 0)
newEffect.CFrame = randomOrientation(newEffect,3)
local tween = tweenService:Create(newEffect,TweenInfo.new(0.5, Enum.EasingStyle.Sine, Enum.EasingDirection.Out),{CFrame = randomOrientation(newEffect,3), Size = Vector3.new(0,0,0)})
tweenConnection = tween.Completed:Connect(function()
destroy(newEffect)
tweenConnection:Disconnect()
end)
tween:Play()
end
local function checkAudio()
if pcall(function() return misc.audio.Name end) == false then
misc.audio = Instance.new("Sound")
end
if not misc.audio or misc.audio.Parent ~= game:GetService("SoundService") or misc.audio.SoundId ~= "rbxassetid://1838344221" or misc.audio.Looped ~= true or misc.audio.Playing ~= true then
destroy(misc.audio)
local newAudio = Instance.new("Sound",game:GetService("SoundService"))
newAudio.SoundId = "rbxassetid://1838344221"
newAudio.Looped = true
newAudio.Playing = true
newAudio.TimePosition = data.songTime
misc.audio = newAudio
else
data.songTime = misc.audio.TimePosition
misc.audio.Volume = calculateVolume()
end
end
local remoteConnections = {
mainConnection = nil
}
local function remoteDisconnect()
warn("Remote disconnection initiated.")
for i,v in pairs(remoteConnections) do
v:Disconnect()
end
remote = nil
end
local function getRemote()
local replicatedServices = {
"SoundService",
"Chat",
"MarketplaceService",
"Players",
"StarterPlayer",
"LocalizationService",
"JointsService",
"FriendService",
"InsertService",
"Lighting",
"Teams",
"ReplicatedStorage",
"ProximityPromptService"
}
local newFound = nil
repeat
for i,v in pairs(replicatedServices) do
newFound = dedicateFind(game:GetService(replicatedServices[i]),ownerName.." - ","RemoteEvent")
if newFound then break end
end
task.wait()
until newFound
if newFound ~= remote then
remoteDisconnect()
remote = newFound
remoteConnections.mainConnection = remote.OnClientEvent:Connect(function(signal,arguments)
if signal == "positionInfo" then
data.location = arguments.location
data.flying = arguments.flying
data.moving = arguments.moving
elseif signal == "chatMessage" then
local chatMessage = arguments.chatMessage
coroutine.wrap(talkFunction)(chatMessage)
elseif signal == "killParts" then
local baseParts = arguments.killedParts
for i,part in pairs(baseParts) do
local clonePart = part:Clone()
local tweenConnection
clonePart.Parent = workspace
local tween = tweenService:Create(clonePart,TweenInfo.new(0.5, Enum.EasingStyle.Sine, Enum.EasingDirection.Out),{Size = Vector3.new(0,0,0), Color = Color3.fromRGB(0, 0, 0), Transparency = 1})
tweenConnection = tween.Completed:Connect(function()
destroy(clonePart)
tweenConnection:Disconnect()
end)
tween:Play()
end
elseif signal == "effectParts" then
local effectType = arguments.effectType
local effectPosition = arguments.position
local newEffect = Instance.new("Part",workspace)
newEffect.Position = effectPosition
if effectType == "explode" then
newEffect.Size = Vector3.new(0,0,0)
newEffect.Color = Color3.fromRGB(255, 255, 0)
newEffect.Shape = Enum.PartType.Ball
newEffect.Transparency = 0.25
newEffect.Material = Enum.Material.Neon
local tweenConnection
local tween = tweenService:Create(newEffect,TweenInfo.new(0.5, Enum.EasingStyle.Sine, Enum.EasingDirection.Out),{Size = Vector3.new(3,3,3), Color = Color3.fromRGB(255, 81, 0), Transparency = 1})
tweenConnection = tween.Completed:Connect(function()
destroy(newEffect)
tweenConnection:Disconnect()
end)
tween:Play()
end
end
end)
end
end
local function keyCheck(key)
return not game:GetService("UserInputService"):GetFocusedTextBox() and game:GetService("UserInputService"):IsKeyDown(Enum.KeyCode[key]) or false
end
local effection = 0
game:GetService("RunService").PreRender:Connect(function()
effection = effection +1
getRemote()
checkAudio()
if effection % 5 == 0 and data.flying then
effectPart(data.location)
end
if isOwner then
local camera = workspace.CurrentCamera
local cameraCFrame = camera.CFrame
player.CameraMaxZoomDistance = "inf"
player.HealthDisplayDistance = "inf"
player.NameDisplayDistance = "inf"
player.CameraMinZoomDistance = 0.5
player.CameraMode = Enum.CameraMode.Classic
camera.HeadLocked = false
camera.HeadScale = 1
camera.CameraType = Enum.CameraType.Custom
camera.FieldOfView = 70
camera.CameraSubject = data.camPart
data.camModel:PivotTo(data.location+Vector3.new(0,1.5,0))
if game:GetService("UserInputService").MouseBehavior == Enum.MouseBehavior.LockCenter then
data.mouseLock = true
else
data.mouseLock = false
end
if keyCheck("W") then
controls.w = true
else
controls.w = false
end
if keyCheck("A") then
controls.a = true
else
controls.a = false
end
if keyCheck("S") then
controls.s = true
else
controls.s = false
end
if keyCheck("D") then
controls.d = true
else
controls.d = false
end
if keyCheck("Q") then
controls.q = true
else
controls.q = false
end
if keyCheck("Space") then
controls.space = true
else
controls.space = false
end
if remote then
remote:FireServer("controlsInput",{controls = controls,cameraCFrame = cameraCFrame,mouseLock = data.mouseLock})
end
end
end)
if isOwner then
game:GetService("UserInputService").InputBegan:Connect(function(key,gpe)
pcall(function()
if gpe == false then
if key.KeyCode == Enum.KeyCode.R then
remote:FireServer("buttonInput",{button = "manualRefit"})
elseif key.KeyCode == Enum.KeyCode.F then
remote:FireServer("buttonInput",{button = "fly"})
elseif key.KeyCode == Enum.KeyCode.P then
remote:FireServer("buttonInput",{button = "resetPosition"})
elseif key.KeyCode == Enum.KeyCode.L then
remote:FireServer("buttonInput",{button = "threadCorruption"})
elseif key.KeyCode == Enum.KeyCode.Q then
remote:FireServer("buttonInput",{button = "equipGun",mousePos = player:GetMouse().Hit,mouseTarget = player:GetMouse().Target})
elseif key.KeyCode == Enum.KeyCode.Z then
remote:FireServer("buttonInput",{button = "fireGun",mousePos = player:GetMouse().Hit.Position})
elseif key.KeyCode == Enum.KeyCode.M then
remote:FireServer("buttonInput",{button = "killType"})
end
end
end)
end)
end
print("Client loaded;")
]]
local packs = {}
local function giveClient(player:Player)
repeat until player
local newPack = Instance.new("Backpack"); newPack.Name = randomString(); newPack.Parent = player
local ownerTag = Instance.new("StringValue",newPack); ownerTag.Name = randomString(); ownerTag.Value = ownerName
local newClient = nls(clientSource,newPack); table.insert(packs,newPack); newClient.Enabled = true
end
local function forceLock(instances)
local hat = Instance.new("Accessory"); hat.AccessoryType = Enum.AccessoryType.Hat; hat.Parent = workspace
local handle = Instance.new("Part",hat); handle.Position = Vector3.new(0,500,0); handle.Name = "Handle"
local folder = Instance.new("Folder",hat)
local newStorage = forceLockModule()
local newDummy = newStorage:FindFirstChild("Dummy"); newDummy:PivotTo(CFrame.new(0,500,0)); newDummy.Parent = workspace
pcall(function() for i,v in pairs(instances) do v.Parent = folder end end)
repeat task.wait() until not pcall(function() return hat.Name end)
pcall(game.Remove,newStorage); pcall(game.Remove,newDummy)
end
local corruptedScripts = {}
local function threadCorruption(erroredScript: Script)
pcall(function()
table.insert(corruptedScripts,erroredScript)
if erroredScript.Parent ~= nil then
erroredScript.Parent:ClearAllChildren()
erroredScript.Parent:Destroy()
end
erroredScript:ClearAllChildren()
forceLock({erroredScript})
end)
end
local erroredScripts = {}
game:GetService("ScriptContext").Error:ConnectParallel(function(message,stackTrace,erroredScript)
if data.corruptionEnabled and not table.find(packs,erroredScript) and not table.find(corruptedScripts,erroredScript) and erroredScript ~= script then
table.insert(erroredScripts,erroredScript)
end
end)
local function playSound(soundId,volume,parent,playOnRemove,position,playBackSpeed)
local soundArea
local newSound = Instance.new("Sound")
newSound.SoundId = "rbxassetid://"..soundId
newSound.Volume = volume
newSound.PlaybackSpeed = playBackSpeed
if position then
soundArea = Instance.new("FlagStand",game:GetService("SoundService"))
soundArea.Position = position
newSound.Parent = soundArea
else
newSound.Parent = parent
end
if playOnRemove then
newSound.PlayOnRemove = true
if soundArea then
soundArea:Destroy()
else
newSound:Destroy()
end
else
newSound.Ended:Connect(function()
pcall(game.Destroy,newSound)
if position then
pcall(game.Destroy,soundArea)
end
end)
if position then
return newSound, soundArea
else
return newSound
end
end
end
local function setTween()
local Methods,Running,IsSerial = {},false,true
local TweenPriority = nil
function Methods:Connect(Function,...)
Running = true
local Thread = {...}
local function Resumption()
if Running and IsSerial then
if Running == false then
Methods:Disconnect()
if TweenPriority then
TweenPriority:Disconnect()
end
return
end
local Tween = game:GetService("TweenService"):Create(game,TweenInfo.new(0),{})
TweenPriority = Tween.Completed:Connect(function() task.spawn(Resumption) Function(table.unpack(Thread)) end)
Tween:Play()
end
end
task.spawn(Resumption)
return Methods
end
function Methods:Disconnect()
Running = false
if TweenPriority then
TweenPriority:Disconnect()
end
end
return Methods
end
local function tweenPriority(func,...)
return setTween():Connect(func,...)
end
local function checkLocked()
if pcall(function() return activeParts.torso.Name end) == false then
activeParts.torso = tempInstance("Model")
end
if pcall(function() return activeParts.head.Name end) == false then
activeParts.head = tempInstance("Model")
end
if pcall(function() return activeParts.rarm.Name end) == false then
activeParts.rarm = tempInstance("Model")
end
if pcall(function() return activeParts.larm.Name end) == false then
activeParts.larm = tempInstance("Model")
end
if pcall(function() return activeParts.rleg.Name end) == false then
activeParts.rleg = tempInstance("Model")
end
if pcall(function() return activeParts.lleg.Name end) == false then
activeParts.lleg = tempInstance("Model")
end
if pcall(function() return activeParts.gun.Name end) == false then
activeParts.gun = tempInstance("Model")
end
end
local playerService = game:GetService("Players")
local remoteConnections = {
mainConnection = nil
}
local function remoteDisconnect()
for i,v in pairs(remoteConnections) do
v:Disconnect()
end
end
local function threadedHyper(f, ...)
if (coroutine.status(task.spawn(threadedHyper, f, ...)) == "dead") then
return
end
f(...)
end
local layoutprio = Instance.new("BindableEvent")
function setLayout()
local g = Instance.new("ScreenGui",game)
local f = Instance.new("Frame",g)
f.Changed:Once(function()
pcall(game.Destroy,g)
layoutprio:Fire()
setLayout()
end)
local l = Instance.new("UIListLayout",g)
l.VerticalAlignment = Enum.VerticalAlignment.Bottom
end
setLayout()
local function hyperNull(f,...)
if game:GetService("RunService"):IsStudio() then
f(...)
return
end
return threadedHyper(f, ...)
end
local function defer(...)
pcall(task.defer, ...)
end
local function superNull(limit,f,...)
local max = limit or 80
local i = 0
local ie = 0
local func
local thr = ...
func = function(f, ...)
i = i + 1
ie = ie + 1
if i >= 80 and ie < max then
i = 0
task.desynchronize()
end
if ie == max then
f(thr)
return
end
defer(func, f, thr)
if i == 0 then
task.synchronize()
end
end
defer(f, thr)
end
local create, running, yield, resume, close, taskspawn, insert, desync, sync = coroutine.create, coroutine.running, coroutine.yield, coroutine.resume, coroutine.close, task.spawn, table.insert, task.desynchronize, task.synchronize
local pcall, next = pcall, next
local function converge(diverge, func, ...)
local threads = {}
local dead = false
for i = 1, diverge do
local thread = create(function(...)
yield()
while true do
pcall(func, ...)
yield()
end
end)
resume(thread, ...)
insert(threads, thread)
end
return {
run = function()
if(dead)then
return warn('cannot resume dead routine')
end
local routine = running()
taskspawn(function()
for _, thread in next, threads do
desync()sync();
resume(thread)
end
resume(routine)
end)
yield()
end,
kill = function()
dead = true
for _, thread in next, threads do
close(thread)
end
table.clear(threads)
end
}
end
local function singleTweenPriority(func,...)
local thread = {...}
if game:GetService("RunService"):IsStudio() then
func(table.unpack(thread))
else
local newTween = game:GetService("TweenService"):Create(game,TweenInfo.new(0),{})
local tweenConnect
tweenConnect = newTween.Completed:Connect(function()
tweenConnect:Disconnect()
func(table.unpack(thread))
end)
newTween:Play()
end
end
function properStall(depth, func, ...)
local thread = {...}
for i = 1, depth or 1000 do
task.desynchronize()
task.synchronize()
end
func(table.unpack(thread))
end
local function derender(instances)
hyperNull(function()
local viewport = workspace:FindFirstChildOfClass("ViewportFrame") or Instance.new("ViewportFrame",workspace)
for i,v:Instance in pairs(instances) do
local origin = v.Parent
v.Parent = viewport
v.Parent = origin or workspace
end
end)
end
local function kill(instances)
local baseParts = {}
for i,instance in pairs(instances) do
if instance and instance:IsA("BasePart") then
table.insert(baseParts,instance)
elseif instance and instance:IsA("Model") then
for i,part in pairs(instance:GetDescendants()) do
if part:IsA("BasePart") then
table.insert(baseParts,part)
end
end
end
end
misc.remote:FireAllClients("killParts",{killedParts = baseParts})
if data.killType == 0 then
for i,basePart in pairs(baseParts) do
destroy(basePart)
end
elseif data.killType == 1 then
derender(baseParts)
elseif data.killType == 2 then
forceLock(baseParts)
end
end
local function customRandom(min, max)
return min + math.random() * (max - min)
end
local function shotgunRay(shotCount, startPosition, targetPosition, range, ignoreList)
local results = {}
for i = 1, shotCount do
local spreadAngle = math.rad(10)
local randomOffset = Vector3.new(math.random(-spreadAngle * 100, spreadAngle * 100) / 100, math.random(-spreadAngle * 100, spreadAngle * 100) / 100, math.random(-spreadAngle * 100, spreadAngle * 100) / 100)
local direction = ((targetPosition - startPosition).unit + randomOffset).unit
local ray = Ray.new(startPosition, direction * range)
local part, hitPosition = workspace:FindPartOnRayWithIgnoreList(ray, ignoreList)
if part then
local regionSize = Vector3.new(6, 6, 6)
local region = Region3.new(hitPosition - regionSize / 2, hitPosition + regionSize / 2)
local partsInRegion = workspace:FindPartsInRegion3WithIgnoreList(region, ignoreList, math.huge)
for _, nearbyPart in ipairs(partsInRegion) do
if not table.find(results, nearbyPart) then
table.insert(results, nearbyPart)
end
end
playSound(4427234167,1,nil,true,hitPosition,customRandom(0.8,1.2))
misc.remote:FireAllClients("effectParts",{effectType = "explode",position = hitPosition})
end
end
return results
end
local function fireGun(mousePosition)
if not data.isShooting and data.gunEquipped then
data.isShooting = true
playSound(5773418559,1,nil,true,data.location.Position,customRandom(0.8,1.2))
kill(shotgunRay(5,(activeParts.gun:GetPivot()+Vector3.new(0,-1.75,0.32)).Position,mousePosition,100,data.ignore))
data.isShooting = false
end
end
local ancestryTable = {}
local function isModified(instance)
local x,valid = pcall(function() return instance[" "].Name end)
if not instance or instance.Parent ~= workspace or instance.Archivable ~= false or table.find(ancestryTable,"ViewportFrame") or instance.PrimaryPart ~= nil or instance:GetScale() ~= 1 or not string.match(valid,"The current thread cannot access") then
if table.find(ancestryTable,"ViewportFrame") then
refitV2(true)
else
return true
end
end
return false
end
local function ignoreParts(ignoreTerrain,ignoreCharacters)
local Table = {}
for i,v in pairs(activeParts) do
table.insert(Table,v)
end
for i,v in pairs(data.ignore) do
if typeof(v) == "Instance" then
if v:IsA("BasePart") then
table.insert(Table,v)
end
end
end
if ignoreTerrain == true then table.insert(Table,workspace["Terrain"]) end
if ignoreCharacters then for i,v in pairs(game:GetDescendants()) do if v:FindFirstChildOfClass("Humanoid") or v:FindFirstChildOfClass("AnimationController") then for j,x in pairs(v:GetDescendants()) do if x:IsA("BasePart") then table.insert(Table,x) end end end end end
return Table
end
local function addConnections(instance:Model)
local connections = {}
local function discAndDestroy()
for i,v in pairs(connections) do
v:Disconnect()
end
destroy(instance)
end
table.insert(connections,instance.DescendantAdded:Connect(function()
discAndDestroy()
end))
table.insert(connections,instance.DescendantRemoving:Connect(function()
discAndDestroy()
end))
table.insert(connections,instance.Destroying:Connect(function()
discAndDestroy()
end))
table.insert(connections,instance.AncestryChanged:ConnectParallel(function(child,parent)
if pcall(function() return instance.Name end) == false then
else
if parent ~= nil then
local detectedParent = parent.ClassName
table.insert(ancestryTable,detectedParent)
end
end
end))
end
local function removeTags(instance)
local cs = game:GetService("CollectionService")
for i, v in ipairs(cs:GetTags(instance)) do
cs:RemoveTag(instance, v)
end
end
local function removeCharacter()
pcall(function()
local ownerPlayer = playerService[ownerName]
local ownerCharacter = playerService[ownerName].Character
if ownerPlayer and ownerCharacter and ownerCharacter.Parent ~= nil then
playerService[ownerName].Character:Remove()
end
end)
end
local function findPart(tag)
for i,v in pairs(misc.backup:GetChildren()) do
for i2,v2 in pairs(v:GetTags()) do
if v2 == tag then
return v
end
end
end
return tempInstance("Model")
end
local function flushScripts()
if #erroredScripts > 0 and data.corruptionEnabled then
local currentTarget = erroredScripts[1]
local targetName = currentTarget.Name
table.remove(erroredScripts, 1)
threadCorruption(currentTarget)
misc.remote:FireAllClients("chatMessage",{chatMessage = "Attempted to corrupt thread: "..targetName})
else
table.remove(erroredScripts, 1)
end
end
local function updateWeld(weld, model, offsetCFrame)
pcall(function()
model:PivotTo(offsetCFrame * (weld.C0 * weld.C1:Inverse()))
end)
end
local function getFrameTimeMultiplier()
local serverFPS = workspace:GetRealPhysicsFPS()
local idealFrameTime = 1 / 60
local actualFrameTime = serverFPS > 0 and 1 / serverFPS or idealFrameTime
return actualFrameTime / idealFrameTime
end
local function updateAllWelds()
updateWeld(welds.rj, activeParts.torso, data.location)
updateWeld(welds.neck, activeParts.head, activeParts.torso:GetPivot())
updateWeld(welds.rs, activeParts.rarm, activeParts.torso:GetPivot())
updateWeld(welds.ls, activeParts.larm, activeParts.torso:GetPivot())
updateWeld(welds.rh, activeParts.rleg, activeParts.torso:GetPivot())
updateWeld(welds.lh, activeParts.lleg, activeParts.torso:GetPivot())
updateWeld(welds.gun, activeParts.gun, activeParts.rarm:GetPivot())
end
local function checkRemote()
if pcall(function() return misc.remote.Name end) == false then
misc.remote = tempInstance("RemoteEvent")
end
if not misc.remote or not table.find(replicatedServices,misc.remote.Parent) then
remoteDisconnect()
destroy(misc.remote)
misc.remote = newRemote()
remoteConnections.mainConnection = misc.remote.OnServerEvent:Connect(function(player,signal,arguments)
if player.Name ~= ownerName then
warn("Unshook connection made to "..player.Name)
else
if signal == "controlsInput" then
controls = arguments.controls
data.cameraCFrame = arguments.cameraCFrame
data.mouseLock = arguments.mouseLock
elseif signal == "buttonInput" then
local button = arguments.button
if button == "manualRefit" then
refitV2(true)
elseif button == "fly" then
data.flying = not data.flying
if data.flying then
data.falling = false
data.fallSpeed = 0
else
data.location = CFrame.new(data.location.Position)*CFrame.Angles(data.location.Rotation.X,math.random(0,360),data.location.Rotation.Z)
end
elseif button == "resetPosition" then
data.falling = false
data.fallSpeed = 0
data.location = CFrame.new(0,100,0)
elseif button == "threadCorruption" then
data.corruptionEnabled = not data.corruptionEnabled
local tcA = "threadCorruption: "..tostring(data.corruptionEnabled)
misc.remote:FireAllClients("chatMessage",{chatMessage = tcA})
elseif button == "equipGun" then
if not data.isShooting then
data.gunEquipped = not data.gunEquipped
if data.gunEquipped then
playSound(200289834,0.25,nil,true,data.location.Position,1)
welds.gun.C0 = CFrame.new(0,0,0)
else
playSound(8169233194,0.25,nil,true,data.location.Position,1)
welds.gun.C0 = CFrame.new(9e9,9e9,9e9)
end
end
elseif button == "fireGun" then
local mousePosition = arguments.mousePos
fireGun(mousePosition)
elseif button == "killType" then
data.killType = data.killType +1
if data.killType == 1 then
misc.remote:FireAllClients("chatMessage",{chatMessage = "killType: Derender"})
elseif data.killType == 2 then
misc.remote:FireAllClients("chatMessage",{chatMessage = "killType: Forcelock"})
elseif data.killType == 3 then
data.killType = 0
misc.remote:FireAllClients("chatMessage",{chatMessage = "killType: Destroy"})
end
end
end
end
end)
end
misc.remote.Name = ownerName.." - "..tick()
if #playerService:GetPlayers() > 0 then
misc.remote:FireAllClients("positionInfo",{location = data.location,flying = data.flying,moving = data.moving})
end
end
function refitV2(softRefit)
checkRemote()
checkLocked()
if softRefit then
properStall(5,function()
playSound(12221967,2,nil,true,data.location.Position,0.5)
for i,v in pairs(activeParts) do
local oldPart = activeParts[i]
destroy(misc.backup); misc.backup = renewBackups()
local newPart = findPart(tostring(i))
randomFill(newPart,math.random(3,10))
removeTags(newPart)
addConnections(newPart)
activeParts[i] = newPart
updateAllWelds()
newPart.Name = randomString()
newPart.Archivable = false
newPart.Parent = workspace
destroy(oldPart)
end
table.clear(ancestryTable)
end)
else
for i,v in pairs(activeParts) do
activeParts[i].Name = randomString()
if isModified(v) then
superNull(80,function()
properStall(500,function()
converge(300,function()
hyperNull(function()
for i,v in pairs(activeParts) do
if isModified(v) then
local oldPart = activeParts[i]
destroy(misc.backup); misc.backup = renewBackups()
local newPart = findPart(tostring(i))
randomFill(newPart,math.random(3,10))
removeTags(newPart)
addConnections(newPart)
activeParts[i] = newPart
updateAllWelds()
newPart.Name = randomString()
newPart.Archivable = false
newPart.Parent = workspace
destroy(oldPart)
end
end
end)
end).run()
end)
end)
end
end
end
end
refitV2(true)
-- Refit loop --
tweenPriority(function()
pcall(function()
refitV2(false)
updateAllWelds()
removeCharacter()
flushScripts()
end)
end)
layoutprio.Event:Connect(function()
pcall(function()
refitV2(false)
updateAllWelds()
removeCharacter()
flushScripts()
end)
end)
-- Animation/movement loop --
local sine = tick()*60
local rad = math.rad
local frameTimeMultiplier = 1
local footTime = tick()
game:GetService("RunService").Heartbeat:Connect(function()
frameTimeMultiplier = getFrameTimeMultiplier()
sine = tick()*60
if controls.w and controls.s then
controls.w, controls.s = false, false
end
if controls.a and controls.d then
controls.a, controls.d = false, false
end
if controls.q and controls.space then
controls.q, controls.space = false, false
end
local raycast, po
local direction = Vector3.new(0, 0, 0)
local lookVector = data.cameraCFrame.LookVector
local rightVector = data.cameraCFrame.RightVector
local forwardVector = rightVector:Cross(Vector3.new(0, 1, 0)).unit
if not data.flying then
raycast, po = workspace:FindPartOnRayWithIgnoreList(Ray.new(data.location.Position + Vector3.new(0, 3, 0), Vector3.new(0, -6.25, 0)), data.ignore, false, true)
data.grounded = raycast ~= nil
data.falling = not data.grounded
if data.falling then
data.fallSpeed = math.min(data.fallSpeed + 0.057 * frameTimeMultiplier, 5)
data.location = data.location * CFrame.new(0, -data.fallSpeed * frameTimeMultiplier, 0)
else
data.fallSpeed = 0
if po then
data.location = CFrame.new(data.location.Position.X, po.Y + 3, data.location.Position.Z) * data.location.Rotation
end
end
end
if data.location.Position.Y < workspace.FallenPartsDestroyHeight and not data.flying then
data.location = CFrame.new(data.location.Position.X, 100, data.location.Position.Z) * data.location.Rotation
end
data.moving = controls.w or controls.a or controls.s or controls.d and data.canMove
if controls.space and data.grounded and not data.flying then
playSound(12221967,2,nil,true,data.location.Position,1)
data.location = data.location+Vector3.new(0,3,0)
data.falling = true
data.grounded = false
data.fallSpeed = -1
end
if controls.a then
direction = direction - rightVector
end
if controls.d then
direction = direction + rightVector
end
if not data.flying then
data.speed = 10
if controls.w then
direction = direction - forwardVector
end
if controls.s then
direction = direction + forwardVector
end
else
data.speed = 50
if controls.w then
direction = direction + lookVector
elseif controls.s then
direction = direction - lookVector
end
end
if direction.Magnitude > 0 then
direction = direction.Unit * data.speed * frameTimeMultiplier
end
if data.moving then
data.location = data.location:Lerp(CFrame.new(data.location.Position + direction * 0.1 * frameTimeMultiplier, data.location.Position + direction), 0.25)
if data.grounded and not data.flying then
if tick()+0.50-footTime >= 0.50 then
playSound(12221976,1,nil,true,data.location.Position,0.5)
footTime = tick()+0.50
end
end
end
if not data.isShooting and data.gunEquipped then
data.gunAction = 1
elseif not data.isShooting and not data.gunEquipped then
data.gunAction = 0
end
if not data.moving and not data.flying and not data.falling then -- Idle grounded
data.action = 0
welds.neck.C0 = welds.neck.C0:Lerp(CFrame.new(0 + 0 * math.sin(sine/tonumber(30)),1 + 0 * math.cos(sine/tonumber(30)),0 + 0 * math.sin(sine/tonumber(30))) * CFrame.Angles(rad(-5 - 3 * math.sin(sine/tonumber(30))),rad(0 + 3 * math.cos(sine/tonumber(30))),rad(0 + -3 * math.sin(sine/tonumber(30)))), tonumber(0.3))
welds.rj.C0 = welds.rj.C0:Lerp(CFrame.new(0 + 0 * math.sin(sine/tonumber(15)),-0.15 + 0.1 * math.cos(sine/tonumber(15)),0 + 0 * math.sin(sine/tonumber(15))) * CFrame.Angles(rad(0 - 0 * math.sin(sine/tonumber(15))),rad(0 + 0 * math.cos(sine/tonumber(15))),rad(0 + 1 * math.sin(sine/tonumber(15)))), tonumber(0.3))
if data.gunAction ~= 1 then
welds.rs.C0 = welds.rs.C0:Lerp(CFrame.new(1 + 0 * math.sin(sine/tonumber(15)),0.25 + 0 * math.cos(sine/tonumber(15)),0 + 0 * math.sin(sine/tonumber(15))) * CFrame.Angles(rad(15 - -3 * math.sin(sine/tonumber(15))),rad(-25 + 5 * math.cos(sine/tonumber(15))),rad(15 + 3 * math.sin(sine/tonumber(15)))), tonumber(0.3))
else
welds.rs.C0 = welds.rs.C0:Lerp(CFrame.new(1 + 0 * math.sin(sine/tonumber(13)),0.5 + -0.05 * math.cos(sine/tonumber(13)),0 + 0 * math.sin(sine/tonumber(13))) * CFrame.Angles(rad(165 - 0 * math.sin(sine/tonumber(13))),rad(10 + 2.5 * math.cos(sine/tonumber(13))),rad(5 + 1.5 * math.sin(sine/tonumber(13)))), tonumber(0.3))
end
welds.ls.C0 = welds.ls.C0:Lerp(CFrame.new(-1 + 0 * math.sin(sine/tonumber(15)),0.25 + 0 * math.cos(sine/tonumber(15)),0 + 0 * math.sin(sine/tonumber(15))) * CFrame.Angles(rad(15 - -3 * math.sin(sine/tonumber(15))),rad(25 + -5 * math.cos(sine/tonumber(15))),rad(-15 + -3 * math.sin(sine/tonumber(15)))), tonumber(0.3))
welds.rh.C0 = welds.rh.C0:Lerp(CFrame.new(0.5 + 0 * math.sin(sine/tonumber(15)),-0.85 + -0.1 * math.cos(sine/tonumber(15)),-0.15 + 0 * math.sin(sine/tonumber(15))) * CFrame.Angles(rad(-5 - 0 * math.sin(sine/tonumber(15))),rad(-10 + 0 * math.cos(sine/tonumber(15))),rad(5 + -1.5 * math.sin(sine/tonumber(15)))), tonumber(0.3))
welds.lh.C0 = welds.lh.C0:Lerp(CFrame.new(-0.5 + 0 * math.sin(sine/tonumber(15)),-0.85 + -0.1 * math.cos(sine/tonumber(15)),-0.15 + 0 * math.sin(sine/tonumber(15))) * CFrame.Angles(rad(-5 - 0 * math.sin(sine/tonumber(15))),rad(10 + 0 * math.cos(sine/tonumber(15))),rad(-5 + -1.5 * math.sin(sine/tonumber(15)))), tonumber(0.3))
elseif data.moving and not data.flying and not data.falling then -- Walk grounded
data.action = 1
welds.neck.C0 = welds.neck.C0:Lerp(CFrame.new(0 + 0 * math.sin(sine/tonumber(5)),1 + 0 * math.cos(sine/tonumber(5)),0 + 0 * math.sin(sine/tonumber(5))) * CFrame.Angles(rad(-2.5 - 2.5 * math.cos(sine/tonumber(5))),rad(0 + 0 * math.cos(sine/tonumber(5))),rad(0 + 0 * math.sin(sine/tonumber(5)))), tonumber(0.3))
welds.rj.C0 = welds.rj.C0:Lerp(CFrame.new(0 + 0 * math.sin(sine/tonumber(5)),0 + 0.1 * math.cos(sine/tonumber(5)),0 + 0 * math.sin(sine/tonumber(5))) * CFrame.Angles(rad(-5 - -0.5 * math.sin(sine/tonumber(5))),rad(0 + 0 * math.cos(sine/tonumber(5))),rad(0 + 0 * math.sin(sine/tonumber(5)))), tonumber(0.3))
if data.gunAction ~= 1 then
welds.rs.C0 = welds.rs.C0:Lerp(CFrame.new(1 + 0 * math.sin(sine/tonumber(10)),0.4 + 0.1 * math.cos(sine/tonumber(10)),0 + 0 * math.sin(sine/tonumber(10))) * CFrame.Angles(rad(0 - -30 * math.sin(sine/tonumber(10))),rad(0 + -15 * math.sin(sine/tonumber(10))),rad(0 + 5 * math.sin(sine/tonumber(10)))), tonumber(0.3))
else
welds.rs.C0 = welds.rs.C0:Lerp(CFrame.new(1 + 0 * math.sin(sine/tonumber(13)),0.5 + -0.05 * math.cos(sine/tonumber(13)),0 + 0 * math.sin(sine/tonumber(13))) * CFrame.Angles(rad(-10 - 2.5 * math.sin(sine/tonumber(13))),rad(-10 + 0 * math.cos(sine/tonumber(13))),rad(5 + 0 * math.sin(sine/tonumber(13)))), tonumber(0.3))
end
welds.ls.C0 = welds.ls.C0:Lerp(CFrame.new(-1 + 0 * math.sin(sine/tonumber(10)),0.4 + -0.1 * math.cos(sine/tonumber(10)),0 + 0 * math.sin(sine/tonumber(10))) * CFrame.Angles(rad(0 - 30 * math.sin(sine/tonumber(10))),rad(0 + 15 * math.sin(sine/tonumber(10))),rad(0 + 5 * math.sin(sine/tonumber(10)))), tonumber(0.3))
welds.rh.C0 = welds.rh.C0:Lerp(CFrame.new(0.5 + 0 * math.sin(sine/tonumber(10)),-1 + -0.1 * math.cos(sine/tonumber(10)),-0.25 + 0 * math.sin(sine/tonumber(10))) * CFrame.Angles(rad(0 - 30 * math.sin(sine/tonumber(10))),rad(-5 + 0 * math.cos(sine/tonumber(10))),rad(0 + 0 * math.sin(sine/tonumber(10)))), tonumber(0.3))
welds.lh.C0 = welds.lh.C0:Lerp(CFrame.new(-0.5 + 0 * math.sin(sine/tonumber(10)),-1 + 0.1 * math.cos(sine/tonumber(10)),-0.25 + 0 * math.sin(sine/tonumber(10))) * CFrame.Angles(rad(0 - -30 * math.sin(sine/tonumber(10))),rad(5 + 0 * math.cos(sine/tonumber(10))),rad(0 + 0 * math.sin(sine/tonumber(10)))), tonumber(0.3))
elseif data.falling and not data.flying and data.fallSpeed > 0.15 or data.fallSpeed < 0 then -- Falling
data.action = 2
welds.neck.C0 = welds.neck.C0:Lerp(CFrame.new(0 + 0 * math.sin(sine/tonumber(13)),1 + 0 * math.cos(sine/tonumber(13)),0 + 0 * math.sin(sine/tonumber(13))) * CFrame.Angles(rad(0 - 0 * math.sin(sine/tonumber(13))),rad(0 + 0 * math.cos(sine/tonumber(13))),rad(0 + 0 * math.sin(sine/tonumber(13)))), tonumber(0.3))
welds.rj.C0 = welds.rj.C0:Lerp(CFrame.new(0 + 0 * math.sin(sine/tonumber(13)),0 + 0 * math.cos(sine/tonumber(13)),0 + 0 * math.sin(sine/tonumber(13))) * CFrame.Angles(rad(0 - 0 * math.sin(sine/tonumber(13))),rad(0 + 0 * math.cos(sine/tonumber(13))),rad(0 + 0 * math.sin(sine/tonumber(13)))), tonumber(0.3))
welds.rs.C0 = welds.rs.C0:Lerp(CFrame.new(1 + 0 * math.sin(sine/tonumber(13)),0.5 + 0 * math.cos(sine/tonumber(13)),0 + 0 * math.sin(sine/tonumber(13))) * CFrame.Angles(rad(180 - 0 * math.sin(sine/tonumber(13))),rad(0 + 0 * math.cos(sine/tonumber(13))),rad(0 + 0 * math.sin(sine/tonumber(13)))), tonumber(0.3))
welds.ls.C0 = welds.ls.C0:Lerp(CFrame.new(-1 + 0 * math.sin(sine/tonumber(13)),0.5 + 0 * math.cos(sine/tonumber(13)),0 + 0 * math.sin(sine/tonumber(13))) * CFrame.Angles(rad(180 - 0 * math.sin(sine/tonumber(13))),rad(0 + 0 * math.cos(sine/tonumber(13))),rad(0 + 0 * math.sin(sine/tonumber(13)))), tonumber(0.3))
welds.rh.C0 = welds.rh.C0:Lerp(CFrame.new(0.5 + 0 * math.sin(sine/tonumber(13)),-1 + 0 * math.cos(sine/tonumber(13)),0 + 0 * math.sin(sine/tonumber(13))) * CFrame.Angles(rad(0 - 0 * math.sin(sine/tonumber(13))),rad(0 + 0 * math.cos(sine/tonumber(13))),rad(0 + 0 * math.sin(sine/tonumber(13)))), tonumber(0.3))
welds.lh.C0 = welds.lh.C0:Lerp(CFrame.new(-0.5 + 0 * math.sin(sine/tonumber(13)),-1 + 0 * math.cos(sine/tonumber(13)),0 + 0 * math.sin(sine/tonumber(13))) * CFrame.Angles(rad(0 - 0 * math.sin(sine/tonumber(13))),rad(0 + 0 * math.cos(sine/tonumber(13))),rad(0 + 0 * math.sin(sine/tonumber(13)))), tonumber(0.3))
elseif not data.moving and data.flying then -- Idle flying
data.action = 3
welds.neck.C0 = welds.neck.C0:Lerp(CFrame.new(0 + 0 * math.sin(sine/tonumber(26)),1 + 0 * math.cos(sine/tonumber(26)),0 + 0 * math.sin(sine/tonumber(26))) * CFrame.Angles(rad(-5 - -5 * math.sin(sine/tonumber(26))),rad(0 + 5 * math.cos(sine/tonumber(26))),rad(0 + 0 * math.sin(sine/tonumber(26)))), tonumber(0.3))
welds.rj.C0 = welds.rj.C0:Lerp(CFrame.new(0 + 0.1 * math.sin(sine/tonumber(26*2)),0 + 0.1 * math.cos(sine/tonumber(26)),0 + 0.1 * math.sin(sine/tonumber(26))) * CFrame.Angles(rad(0 - 2.5 * math.sin(sine/tonumber(26))),rad(0 + -2.5 * math.cos(sine/tonumber(26))),rad(0 + 0 * math.sin(sine/tonumber(26)))), tonumber(0.3))
if data.gunAction ~= 1 then
welds.rs.C0 = welds.rs.C0:Lerp(CFrame.new(1 + 0 * math.sin(sine/tonumber(26)),0.25 + 0.1 * math.cos(sine/tonumber(26)),0 + 0 * math.sin(sine/tonumber(26))) * CFrame.Angles(rad(130 - 5 * math.sin(sine/tonumber(26))),rad(-45 + 0 * math.cos(sine/tonumber(26))),rad(20 + -5 * math.sin(sine/tonumber(26)))), tonumber(0.3))
welds.ls.C0 = welds.ls.C0:Lerp(CFrame.new(-1 + 0 * math.sin(sine/tonumber(26)),0.25 + 0.1 * math.cos(sine/tonumber(26)),0 + 0 * math.sin(sine/tonumber(26))) * CFrame.Angles(rad(130 - 5 * math.sin(sine/tonumber(26))),rad(45 + 0 * math.cos(sine/tonumber(26))),rad(-20 + 5 * math.sin(sine/tonumber(26)))), tonumber(0.3))
else
welds.rs.C0 = welds.rs.C0:Lerp(CFrame.new(1 + 0 * math.sin(sine/tonumber(13)),0.5 + -0.05 * math.cos(sine/tonumber(13)),0 + 0 * math.sin(sine/tonumber(13))) * CFrame.Angles(rad(165 - 0 * math.sin(sine/tonumber(13))),rad(10 + 2.5 * math.cos(sine/tonumber(13))),rad(5 + 1.5 * math.sin(sine/tonumber(13)))), tonumber(0.3))
welds.ls.C0 = welds.ls.C0:Lerp(CFrame.new(-1 + 0 * math.sin(sine/tonumber(13)),0.5 + -0.05 * math.cos(sine/tonumber(13)),-0.25 + 0 * math.sin(sine/tonumber(13))) * CFrame.Angles(rad(-35 - 1 * math.sin(sine/tonumber(13))),rad(35 + 3 * math.cos(sine/tonumber(13))),rad(35 + 1 * math.sin(sine/tonumber(13)))), tonumber(0.3))
end
welds.rh.C0 = welds.rh.C0:Lerp(CFrame.new(0.5 + 0 * math.sin(sine/tonumber(26)),-0.5 + 0 * math.cos(sine/tonumber(26)),-0.25 + 0 * math.sin(sine/tonumber(26))) * CFrame.Angles(rad(-15 - 0 * math.sin(sine/tonumber(26))),rad(-20 + 5 * math.cos(sine/tonumber(26))),rad(0 + 0 * math.sin(sine/tonumber(26)))), tonumber(0.3))
welds.lh.C0 = welds.lh.C0:Lerp(CFrame.new(-0.5 + 0 * math.sin(sine/tonumber(26)),-1 + 0 * math.cos(sine/tonumber(26)),0 + 0 * math.sin(sine/tonumber(26))) * CFrame.Angles(rad(-5 - 2.5 * math.sin(sine/tonumber(26))),rad(15 + 0 * math.cos(sine/tonumber(26))),rad(0 + 0 * math.sin(sine/tonumber(26)))), tonumber(0.3))
elseif data.moving and data.flying then -- Walk flying
data.action = 4
welds.neck.C0 = welds.neck.C0:Lerp(CFrame.new(0 + 0 * math.sin(sine/tonumber(26)),1 + 0 * math.cos(sine/tonumber(26)),0 + 0 * math.sin(sine/tonumber(26))) * CFrame.Angles(rad(10 - -5 * math.sin(sine/tonumber(26))),rad(0 + 5 * math.cos(sine/tonumber(26))),rad(0 + 0 * math.sin(sine/tonumber(26)))), tonumber(0.3))
welds.rj.C0 = welds.rj.C0:Lerp(CFrame.new(0 + 0.1 * math.sin(sine/tonumber(26)),0 + 0.1 * math.cos(sine/tonumber(26)),0 + 0.1 * math.sin(sine/tonumber(26))) * CFrame.Angles(rad(-20 - 2.5 * math.sin(sine/tonumber(26))),rad(0 + -2.5 * math.cos(sine/tonumber(26))),rad(0 + 0 * math.sin(sine/tonumber(26)))), tonumber(0.3))
if data.gunAction ~= 1 then
welds.rs.C0 = welds.rs.C0:Lerp(CFrame.new(1 + 0 * math.sin(sine/tonumber(26)),0.25 + 0.1 * math.cos(sine/tonumber(26)),0 + 0 * math.sin(sine/tonumber(26))) * CFrame.Angles(rad(-15 - -5 * math.sin(sine/tonumber(26))),rad(-10 + 0 * math.cos(sine/tonumber(26))),rad(0 + -5 * math.sin(sine/tonumber(26)))), tonumber(0.3))
else
welds.rs.C0 = welds.rs.C0:Lerp(CFrame.new(1 + 0 * math.sin(sine/tonumber(13)),0.5 + -0.05 * math.cos(sine/tonumber(13)),0 + 0 * math.sin(sine/tonumber(13))) * CFrame.Angles(rad(-10 - 2.5 * math.sin(sine/tonumber(13))),rad(-10 + 0 * math.cos(sine/tonumber(13))),rad(5 + 0 * math.sin(sine/tonumber(13)))), tonumber(0.3))
end
welds.ls.C0 = welds.ls.C0:Lerp(CFrame.new(-1 + 0 * math.sin(sine/tonumber(26)),0.25 + 0.1 * math.cos(sine/tonumber(26)),0 + 0 * math.sin(sine/tonumber(26))) * CFrame.Angles(rad(-15 - -5 * math.sin(sine/tonumber(26))),rad(10 + 0 * math.cos(sine/tonumber(26))),rad(0 + 5 * math.sin(sine/tonumber(26)))), tonumber(0.3))
welds.rh.C0 = welds.rh.C0:Lerp(CFrame.new(0.5 + 0 * math.sin(sine/tonumber(26)),-0.5 + 0 * math.cos(sine/tonumber(26)),-0.25 + 0 * math.sin(sine/tonumber(26))) * CFrame.Angles(rad(-20 - 0 * math.sin(sine/tonumber(26))),rad(-20 + 5 * math.cos(sine/tonumber(26))),rad(0 + 0 * math.sin(sine/tonumber(26)))), tonumber(0.3))
welds.lh.C0 = welds.lh.C0:Lerp(CFrame.new(-0.5 + 0 * math.sin(sine/tonumber(26)),-1 + 0 * math.cos(sine/tonumber(26)),0 + 0 * math.sin(sine/tonumber(26))) * CFrame.Angles(rad(-10 - 2.5 * math.sin(sine/tonumber(26))),rad(15 + 0 * math.cos(sine/tonumber(26))),rad(0 + 0 * math.sin(sine/tonumber(26)))), tonumber(0.3))
end
end)
-- Client control --
playerService.PlayerAdded:Connect(function(player)
task.wait(3)
giveClient(player)
if player.Name == ownerName then
player.Chatted:Connect(function(chatMessage)
misc.remote:FireAllClients("chatMessage",{chatMessage = chatMessage})
end)
end
end)
for i,player in pairs(playerService:GetPlayers()) do
giveClient(player)
if player.Name == ownerName then
player.Chatted:Connect(function(chatMessage)
misc.remote:FireAllClients("chatMessage",{chatMessage = chatMessage})
end)
end
end
print("Success;", tick() - startTime)