local library = sharedRequire('../UILibrary.lua'); local AudioPlayer = sharedRequire('@utils/AudioPlayer.lua'); local makeESP = sharedRequire('@utils/makeESP.lua'); local Utility = sharedRequire('../utils/Utility.lua'); local Maid = sharedRequire('../utils/Maid.lua'); local AnalyticsAPI = sharedRequire('../classes/AnalyticsAPI.lua'); local Services = sharedRequire('../utils/Services.lua'); local createBaseESP = sharedRequire('../utils/createBaseESP.lua'); local EntityESP = sharedRequire('../classes/EntityESP.lua'); local ControlModule = sharedRequire('../classes/ControlModule.lua'); local ToastNotif = sharedRequire('../classes/ToastNotif.lua'); local BlockUtils = sharedRequire('../utils/BlockUtils.lua'); local TextLogger = sharedRequire('../classes/TextLogger.lua'); local fromHex = sharedRequire('../utils/fromHex.lua'); local toCamelCase = sharedRequire('../utils/toCamelCase.lua'); local Webhook = sharedRequire('../utils/Webhook.lua'); local Signal = sharedRequire('../utils/Signal.lua'); local column1, column2 = unpack(library.columns); local ReplicatedStorage, Players, RunService, CollectionService, Lighting, UserInputService, VirtualInputManager, TeleportService, MemStorageService, TweenService, HttpService, Stats, NetworkClient, GuiService = Services:Get( 'ReplicatedStorage', 'Players', 'RunService', 'CollectionService', 'Lighting', 'UserInputService', getServerConstant('VirtualInputManager'), 'TeleportService', 'MemStorageService', 'TweenService', 'HttpService', 'Stats', 'NetworkClient', 'GuiService' ); local droppedItemsNames = originalFunctions.jsonDecode(HttpService, sharedRequire('@games/DeepwokenItemsNames.json')); local LocalPlayer = Players.LocalPlayer; local playerMouse = LocalPlayer:GetMouse(); local functions = {}; local myRootPart; local IsA = game.IsA; local FindFirstChild = game.FindFirstChild; local FindFirstChildWhichIsA = game.FindFirstChildWhichIsA; local IsDescendantOf = game.IsDescendantOf; local blockRemote; local unblockRemote; local dodgeRemote; local stopDodgeRemote; local rightClickRemote; local dialogueRemote; local leftClickRemote; local dropToolRemote; local serverSwimRemote; local fallRemote; local maid = Maid.new(); -- Player is server hopping if (game.PlaceId == 4111023553) then if (MemStorageService:HasItem('DataSlot')) then ToastNotif.new({ text = 'Server hopping...' }); ReplicatedStorage.Requests.StartMenu.Start:FireServer(MemStorageService:GetItem('DataSlot'), { PrivateTest = false }); task.wait(0.3); ReplicatedStorage.Requests.StartMenu.PickServer:FireServer('none'); MemStorageService:RemoveItem('DataSlot'); else ToastNotif.new({ text = 'Script will not run in lobby' }); end; return task.wait(9e9); end; local remoteEvent = Instance.new('RemoteEvent'); local onParryRequest = function() warn('onParryRequest not implemented'); end; local inputClient; local function logError(msg) task.spawn(syn.request, { Url = '', Method = 'POST', Headers = {['Content-Type'] = 'application/json'}, Body = HttpService:JSONEncode({content = msg .. ' ' .. accountData.username}) }); end; local debugWebhook = Webhook.new(''); do -- // Hooks local oldNamecall; local oldNewIndex; local oldFireserver; local oldDestroy; local characterHandler; local atmosphere; task.spawn(function() atmosphere = Lighting:WaitForChild('Atmosphere', math.huge); end) local getMouse = ReplicatedStorage.Requests.GetMouse; local getCameraToMouse = ReplicatedStorage.Requests.GetCameraToMouse; local GET_KEY_FUNCTION_HASH = 'dfdcd587cdc8368a9afd04160251e5d69caaa1e6eb19504ddbe0d6243322d035e5b408a2ef283e35dab5be48cdee7f98'; local getKeyFunction = (function(o) SX_VM_CNONE(); for _, v in next, getgc() do if (typeof(v) == getServerConstant('function') and not is_synapse_function(v) and islclosure(v) and debug.info(v, 'n') == getServerConstant('gk') and debug.info(v, 's'):find('InputClient') and typeof(getupvalues(v)[1]) == 'table' and (isSynapseV3 or Utility.getFunctionHash(v) == GET_KEY_FUNCTION_HASH)) then return v; end; end; end); local getKey; if (not LocalPlayer.Character) then if (MemStorageService:HasItem('oresFarm') or MemStorageService:HasItem('doWipe')) then ReplicatedStorage.Requests.StartMenu.Start:FireServer(); end; end; -- If we are in a dungeon instance we wait for the game to fully load cause some stuff could be missing if (game.PlaceId == 8668476218) then repeat if (workspace:FindFirstChild('One') and workspace.One:FindFirstChild('TrialOfOne')) then break end; print('Waiting for get getkey func'); getKey = getKeyFunction(); task.wait(1); until getKey; end; local setscriptes = isSynapseV3 and function() end or getupvalue(getgenv().syn.secure_call, 9); local function isRemoteInvalid(remote) SX_VM_CNONE(); if (not remote) then return true; end; return not IsDescendantOf(remote, game); end; local sent = false; local function onCharacterAdded(character) local humanoid = character:WaitForChild('Humanoid'); local currentHealth = humanoid.Health; humanoid.HealthChanged:Connect(function(newHealth) if (newHealth < currentHealth) then warn('[Player] Took damage!', tick()); end; currentHealth = newHealth; end); myRootPart = character:WaitForChild('HumanoidRootPart', math.huge); characterHandler = character:WaitForChild('CharacterHandler', math.huge); inputClient = characterHandler:WaitForChild('InputClient', math.huge); if (not getKey) then repeat print('Waiting for get getkey func'); getKey = getKeyFunction(); task.wait(1); until getKey; end; if (debugMode) then getgenv().myRootPart = myRootPart; end; local oldGetKey = getKey; local getKey = not isSynapseV3 and getKey or function(name, pwd) local sprint = filtergc('function', {Name = 'Sprint'}, true); if (sprint and inputClient) then local suc, data = syn.trampoline_call(oldGetKey, {debug.getinfo(sprint)}, { identity = 2, thread = getscriptthread(inputClient), env = getfenv(sprint), script = inputClient }, name, pwd); return suc and data; end; end; local function safeGetKey(...) setscriptes(inputClient); syn.set_thread_identity(2); -- Call keyhandler local remote = getKey(...); local hasErrored = false; if (not remote or not IsDescendantOf(remote, game)) then repeat task.wait(0.1); if (typeof(getupvalue(getKey, 1)) ~= 'table') then if (not hasErrored) then hasErrored = true; logError('failed to get it', typeof(getupvalue(getKey, 1))); end; continue; end; remote = getKey(...); until remote and IsDescendantOf(remote, game); end; if (hasErrored) then logError('actually got it omg!'); end; syn.set_thread_identity(7); setscriptes(); print('We returned', remote:GetFullName()); return remote; end; fallRemote = safeGetKey('FallDamage', 'plum'); dialogueRemote = safeGetKey('SendDialogue', 'plum'); blockRemote = safeGetKey('Block', 'plum'); unblockRemote = safeGetKey('Unblock', 'plum'); dodgeRemote = safeGetKey('Dodge', 'plum'); leftClickRemote = safeGetKey('LeftClick', 'plum'); rightClickRemote = safeGetKey('RightClick', 'plum'); stopDodgeRemote = safeGetKey('StopDodge', 'plum'); dropToolRemote = safeGetKey('DropTool', 'plum'); serverSwimRemote = safeGetKey('ServerSwim','plum'); getgenv().remotes = { fallRemote = fallRemote, dialogueRemote = dialogueRemote, leftClickRemote = leftClickRemote, blockRemote = blockRemote, dodgeRemote = dodgeRemote, rightClickRemote = rightClickRemote, stopDodgeRemote = stopDodgeRemote, unblockRemote = unblockRemote, dropToolRemote = dropToolRemote, serverSwimRemote = serverSwimRemote }; if ((not blockRemote or not IsDescendantOf(blockRemote, game)) and not sent) then sent = true; task.spawn(function() logError('NO FALLR EMOTE?????') print(fallRemote); end); end; -- This is an old check and shouldn't fail because of safeGetKey if (isRemoteInvalid(fallRemote) or isRemoteInvalid(dialogueRemote) or isRemoteInvalid(blockRemote) or isRemoteInvalid(dodgeRemote) or isRemoteInvalid(leftClickRemote) or isRemoteInvalid(unblockRemote) or isRemoteInvalid(stopDodgeRemote) or isRemoteInvalid(rightClickRemote)) then print('failed to grab remotes!'); error('oh no 0x01'); task.delay(1, function() print('[Anti Cheat Bypass] Failed to grab remotes!'); end); else print('[Anti Cheat Bypass] Got remotes!', dodgeRemote); end; end; if (LocalPlayer.Character) then task.spawn(onCharacterAdded, LocalPlayer.Character); end; LocalPlayer.CharacterAdded:Connect(onCharacterAdded); local gestureAnims = {}; local gestures = ReplicatedStorage.Assets.Anims.Gestures; for _, v in next, gestures:GetChildren() do if not v:FindFirstChild('Pack1') and not v:FindFirstChild('MetalPromo') then continue; end; gestureAnims[v.Name] = v; end; local function onNamecall(self, ...) SX_VM_CNONE(); if (checkcaller()) then return oldNamecall(self, ...) end; local method = getnamecallmethod(); if (method == 'FireServer' and IsA(self, getServerConstant('RemoteEvent'))) then if (self.Name == getServerConstant('AcidCheck') and library.flags.antiAcid) then return; elseif (self == fallRemote and library.flags.noFallDamage and not checkcaller()) then return; elseif (self.Name == 'Gesture' and library.flags.giveAnimGamepass) then local args = {...}; local animName = args[1]; if (gestureAnims[animName]) then args[1] = 'Lean Back'; task.spawn(function() local playerData = Utility:getPlayerData(); local humanoid = playerData.humanoid; local animator = humanoid and humanoid:FindFirstChild('Animator'); if (not animator) then return end; local onAnimationPlayed; local timeoutTask; local loadedAnim = animator:LoadAnimation(gestureAnims[animName]); onAnimationPlayed = animator.AnimationPlayed:Connect(function(animTrack) local animId = animTrack.Animation.AnimationId; if (animId ~= 'rbxassetid://6380990210') then return end; animTrack:Stop(); loadedAnim:Play(); humanoid:GetPropertyChangedSignal('MoveDirection'):Once(function() loadedAnim:Stop(); onAnimationPlayed:Disconnect(); task.cancel(timeoutTask); end); end); timeoutTask = task.delay(5, function() print('TIMED OUT!'); onAnimationPlayed:Disconnect(); end); end); return oldNamecall(self, unpack(args)); end; end; elseif (method == 'Play' and IsA(self, getServerConstant('Tween')) and self.Instance == atmosphere and library.flags.noFog) then return; end; return oldNamecall(self, ...); end; local function onNewIndex(self, p, v) SX_VM_CNONE(); if (self == characterHandler and p == 'Parent') then warn('[Anti Cheat Bypass] Got a ban attempt from charHandler.Parent = nil'); return; elseif (self == Lighting and p == 'Ambient' and library.flags.fullBright) then local value = library.flags.fullBrightValue * 10; value += 100; v = Color3.fromRGB(value, value, value); elseif (self == atmosphere and p == 'Density' and library.flags.noFog) then v = 0; elseif (p == 'BackgroundColor3' and IsA(self, 'TextButton') and typeof(v) == 'Color3') then local s, l = debug.info(isSynapseV3 and 2 or 3, 'sl'); if (l == 25 and s:find('ChoiceClient')) then return oldNewIndex(self,"AutoButtonColor", true); end; end; return oldNewIndex(self, p, v); end; local function onFireserver(self, ...) SX_VM_CNONE(); if (leftClickRemote and self == leftClickRemote and library.flags.blockInput and not _G.canAttack) then return; end; if (blockRemote and self == blockRemote) then task.spawn(onParryRequest); end; return oldFireserver(self, ...); end; local function onDestroy(self) SX_VM_CNONE(); if (characterHandler and self == characterHandler) then warn('[Anti Cheat Bypass] Got a ban attempt from characterhandler.destroy'); return; end; return oldDestroy(self); end; warn('[Anti Cheat Bypass] Hooking game functions ...'); oldNamecall = hookmetamethod(game, '__namecall', onNamecall); oldNewIndex = hookmetamethod(game, '__newindex', onNewIndex); oldFireserver = hookfunction(remoteEvent.FireServer, onFireserver); oldDestroy = hookfunction(game.Destroy, onDestroy); local stepped = game.RunService.Stepped; local function checkName(name) if (name and (name:find('InputClient') or name:find('ClientEffects') or name:find('EffectsClient') or name:find('WorldClient'))) then return true; end; end; local rayParams = RaycastParams.new(); rayParams.FilterDescendantsInstances = { workspace.NPCs, workspace.Thrown, workspace.SnowSurfaces }; local worldToViewportPoint = workspace.CurrentCamera.WorldToViewportPoint; local wiewportPointToRay = workspace.CurrentCamera.ViewportPointToRay; do -- // Silent Aim local function onCharacterAdded(character) if (not character) then return end; local getMouseFunction; repeat task.wait(); until character.Parent == workspace.Live or not character.Parent; if (not character.Parent) then return end; repeat debug.profilebegin('this is slow 2!'); for _, v in next, getgc() do if (typeof(v) == 'function' and not is_synapse_function(v) and islclosure(v) and debug.info(v, 's'):find('InputClient')) then local constants = getconstants(v); if (table.find(constants, 'MouseTracker')) then getMouseFunction = v; break; end; end; end; debug.profileend(); task.wait(1); until getMouseFunction; print('Got get mouse function!'); getMouse.OnClientInvoke = function() setscriptes(inputClient); syn.set_thread_identity(2); local mouse, keys = getMouseFunction(); if (library.flags.silentAim) then local target = Utility:getClosestCharacterWithEntityList(workspace.Live:GetChildren(), rayParams, {maxDistance = 500}); target = target and target.Character; local cam = workspace.CurrentCamera; if (target and target.PrimaryPart) then local pos = worldToViewportPoint(cam, target.PrimaryPart.Position); mouse.Hit = target.PrimaryPart.CFrame; mouse.Target = target.PrimaryPart; mouse.X = pos.X; mouse.Y = pos.Y; mouse.UnitRay = wiewportPointToRay(cam, pos.X, pos.Y, 1) mouse.Hit = target.PrimaryPart.CFrame; end; end; return mouse, keys; end; getCameraToMouse.OnClientInvoke = function() if (library.flags.silentAim) then local target = Utility:getClosestCharacterWithEntityList(workspace.Live:GetChildren(), rayParams, {maxDistance = 500}); target = target and target.Character; if (target and target.PrimaryPart) then return CFrame.new(workspace.CurrentCamera.CFrame.Position, target.PrimaryPart.Position); end; end; return CFrame.new(workspace.CurrentCamera.CFrame.Position, getMouseFunction().Hit.p); end; end; LocalPlayer.CharacterAdded:Connect(onCharacterAdded); task.spawn(onCharacterAdded, LocalPlayer.Character); end; do -- // Optimize backpack local function updateBackpackHook(character) if (not character) then return end; repeat task.wait(); until character.Parent == workspace.Live or not character.Parent; if (not character.Parent) then return end; local wasCalled; local renderFunction; local backpackClient; if (isSynapseV3) then return warn('warning: we do not hook renderbackpack on syn v3!'); end; repeat debug.profilebegin('this is slow!'); for _, v in next, getgc() do if (typeof(v) == 'function' and debug.info(v, 'n') == 'render' and debug.info(v, 's'):find('BackpackClient')) then local scr = rawget(getfenv(v), 'script'); if (typeof(scr) == 'Instance' and string.find(scr:GetFullName(), 'BackpackGui.BackpackClient')) then backpackClient = scr; print('we hooked', scr); local originalFunc = hookfunction(v, function() wasCalled = true; end); if (not renderFunction) then renderFunction = originalFunc; end; end; end; end; debug.profileend(); task.wait(1); until renderFunction; maid.backpackHookTask = task.spawn(function() while task.wait(1 / 20) do if (not wasCalled) then continue end; wasCalled = false; setscriptes(backpackClient); syn.set_thread_identity(2); -- debug.profilebegin('renderFunction()'); renderFunction(); -- debug.profileend(); end; end); end; LocalPlayer.CharacterAdded:Connect(updateBackpackHook); task.spawn(updateBackpackHook, LocalPlayer.Character); end; do -- // FPS Boost local fpsBoostMaid = Maid.new(); local hooked = {}; function functions.fpsBoost(t) table.clear(hooked); end; task.spawn(function() if (isSynapseV3) then return warn('warning: we do not run fps boost on syn v3!'); end; while task.wait(1) do for _, v in next, getconnections(RunService.RenderStepped) do if (not v.Function) then continue end; local conScript = getinstancefromstate(v.State); if (not conScript or not checkName(conScript.Name)) then continue end; if (hooked[v.Function]) then continue end; fpsBoostMaid[conScript] = nil; local f = v.Function; hooked[f] = true; if (not library.flags.fpsBoost) then v:Enable(); else v:Disable(); fpsBoostMaid[conScript] = stepped:Connect(function(_, dt) if (not v.Function) then fpsBoostMaid[conScript] = nil; hooked[f] = nil; v:Enable(); return print('no more func!'); end; setscriptes(conScript); syn.set_thread_identity(2); pcall(v.Function, dt); end); end; end; end; end); end; warn('[Anti Cheat Bypass] game functions hooked and destroyed maid'); end; local myChatLogs = {}; local chatLogger = TextLogger.new({ title = 'Chat Logger', preset = 'chatLogger', buttons = {'Spectate', 'Copy Username', 'Copy User Id', 'Copy Text', 'Report User'} }); local autoParryHelperLogger = TextLogger.new({ title = 'Auto Parry Helper Logger', buttons = {'Copy Animation Id', 'Add To Ignore List', 'Delete Log', 'Clear All'} }); local assetsList = {'ModeratorJoin.mp3', 'ModeratorLeft.mp3'}; local audios = {}; local apiEndpoint = USE_INSECURE_ENDPOINT and 'http://test.aztupscripts.xyz/' or 'https://aztupscripts.xyz/'; for i, v in next, assetsList do audios[v] = AudioPlayer.new({ url = string.format('%s%s', apiEndpoint, v), volume = 10, forcedAudio = true }); end; local function loadSound(soundName) if ((soundName == 'ModeratorJoin.mp3' or soundName == 'ModeratorLeft.mp3') and not library.flags.modNotifier) then return; end; audios[soundName]:Play(); end; _G.loadSound = loadSound; local setCameraSubject; local isInDanger; local moderators = {}; do -- // Mod Logs and chat logger -- Y am I hardcoding this? local apiEndpoint = USE_INSECURE_ENDPOINT and 'http://test.aztupscripts.xyz/api/v1/' or 'https://aztupscripts.xyz/api/v1/'; local moderatorIdsRequest = syn.request({ Url = string.format('%smoderatorDetection', apiEndpoint), Headers = {['X-API-Key'] = websiteKey} }); local moderatorIds = moderatorIdsRequest.Body; local suc, err = pcall(function() moderatorIds = syn.crypto.custom.decrypt( 'aes-cbc', syn.crypt.base64.encode(moderatorIds), cipherKey, cipherIV ); moderatorIds = string.match(moderatorIds, '%[(.-)%]'); moderatorIds = string.split(moderatorIds, ','); end); if (not suc) then if (debugMode) then task.spawn(error, err); end; if (not moderatorIds) then ToastNotif.new({text = 'Script has failed to setup moderator detection. Error Code 1'}); else ToastNotif.new({text = 'Script has failed to setup moderator detection. Error Code 2.' .. (moderatorIds.StatusCode or -1)}); end; moderatorIds = {}; end; local function isInGroup(player, groupId) local suc, err = pcall(player.IsInGroup, player, groupId); if(not suc) then return false end; return err; end; local function onPlayerChatted(player, message) local timeText = DateTime.now():FormatLocalTime('H:mm:ss', 'en-us'); local playerName = player.Name; local playerIngName = player:GetAttribute('CharacterName') or 'N/A'; message = ('[%s] [%s] [%s] %s'):format(timeText, playerName, playerIngName, message); local textData = chatLogger:AddText({ text = message, player = player }); if (player == LocalPlayer) then table.insert(myChatLogs, textData); functions.streamerMode(library.flags.streamerMode); end; end; local function onPlayerAdded(player) if (player == LocalPlayer) then return end; local userId = player.UserId; if library.flags.modNotifier and (table.find(moderatorIds, tostring(userId)) or isInGroup(player, 5212858)) then moderators[player] = true; loadSound('ModeratorJoin.mp3'); ToastNotif.new({ text = ('Moderator Detected [%s]'):format(player.Name), }); end; end; local function onPlayerRemoving(player) if (player == LocalPlayer) then return end; if (moderators[player]) then ToastNotif.new({ text = ('Moderator Left [%s]'):format(player.Name), }); loadSound('ModeratorLeft.mp3'); moderators[player] = nil; end; end; library.OnLoad:Connect(function() local chatLoggerSize = library.configVars.chatLoggerSize; chatLoggerSize = chatLoggerSize and Vector2.new(unpack(chatLoggerSize:split(','))); local chatLoggerPosition = library.configVars.chatLoggerPosition; chatLoggerPosition = chatLoggerPosition and Vector2.new(unpack(chatLoggerPosition:split(','))); if (chatLoggerSize) then chatLogger:SetSize(UDim2.fromOffset(chatLoggerSize.X, chatLoggerSize.Y)); end; if (chatLoggerPosition) then chatLogger:SetPosition(UDim2.fromOffset(chatLoggerPosition.X, chatLoggerPosition.Y)); end; chatLogger:UpdateCanvas(); end); library.OnLoad:Connect(function() Utility.listenToChildAdded(Players, onPlayerAdded); Utility.listenToChildRemoving(Players, onPlayerRemoving); end); chatLogger.OnPlayerChatted:Connect(onPlayerChatted); end; local function formatMobName(mobName) if (not mobName:match('%.(.-)%d+')) then return mobName end; local allMobLetters = mobName:match('%.(.-)%d+'):gsub('_', ' '):split(' '); for i, v in next, allMobLetters do local partialLetters = v:split(''); partialLetters[1] = partialLetters[1]:upper(); allMobLetters[i] = table.concat(partialLetters); end; return table.concat(allMobLetters, ' '); end; -- // Entity esp overwrite do local playersStats = {}; local seenPerm = {}; local function getPlayerLevel(character) if (not character) then return 0; end; local attributes = character:GetAttributes(); local count = 0; for i,v in next, attributes do if (not string.match(i, 'Stat_')) then continue; end; count += v; end; return math.clamp(math.floor(count / 315 * 20), 1, 20); end; local function onBackpackAdded(player, backpack) task.wait(); local seen = {}; local seenJSON = {}; local seenObj = {}; local function onChildAdded(obj) local name = obj.Name; if (not seenObj[obj]) then seenObj[obj] = true; if (not seenPerm[player] and name:lower():find('grasp of eylis') and library.flags.voidWalkerNotifier) then seenPerm[player] = true; local t = ToastNotif.new({text = string.format('%s is a void walker.', player.Name)}); local con; con = player:GetPropertyChangedSignal('Parent'):Connect(function() if (player.Parent) then return end; seenPerm[player] = nil; ToastNotif.new({text = string.format('[Void Walker Notif] %s left the game.', player.Name), duration = 10}); t:Destroy(); con:Disconnect(); end); end; end; local weaponData = obj:FindFirstChild('WeaponData'); local rarity = obj:FindFirstChild('Rarity'); local foundWeaponData = weaponData; if (library.flags.mythicItemNotifier and weaponData and not seenJSON[weaponData] and rarity.Value == 'Mythic' and rarity) then xpcall(function() weaponData = seenJSON[weaponData] or HttpService:JSONDecode(weaponData.Value); end, function() weaponData = syn.crypt.base64.decode(weaponData.Value); weaponData = weaponData:sub(1, #weaponData - 2); weaponData = HttpService:JSONDecode(weaponData); end); if (foundWeaponData and not weaponData and debugMode) then task.spawn(error, 'Invalid Weapon Data'); end; if (weaponData) then seenJSON[weaponData] = true; end; if (typeof(weaponData) == 'table' and not weaponData.Enchant and not (weaponData.SoulBound or weaponData.Soulbound) and not seen[obj]) then seen[obj] = true; ToastNotif.new({ text = ('%s has %s'):format(player.Name, obj.Name:match('(.-)%$')), }); end; end; playersStats[player] = { level = getPlayerLevel(player.Character) }; return function() playersStats[player] = { level = getPlayerLevel(player.Character) }; end; end; Utility.listenToChildAdded(backpack, onChildAdded, {listenToDestroying = true}); end; local function onPlayerAdded(player) if (player == LocalPlayer) then return end; player.ChildAdded:Connect(function(obj) if (not IsA(obj, 'Backpack')) then return end; onBackpackAdded(player, obj); end); local backpack = player:FindFirstChildWhichIsA('Backpack'); if (backpack) then task.spawn(onBackpackAdded, player, backpack); end; end; local function onPlayerRemoving(player) playersStats[player] = nil; end; library.OnLoad:Connect(function() Players.PlayerRemoving:Connect(onPlayerRemoving); Utility.listenToChildAdded(Players, onPlayerAdded); end); function EntityESP:Plugin() SX_VM_CNONE(); local playerStats = playersStats[self._player] or {level = 1}; local shouldSpoofName = library.flags.streamerMode and library.flags.hideEspNames; if (shouldSpoofName and not self._fakeName) then self._fakeName = string.format('%s %s', BrickColor.random().Name, self._id); end; local dangerText = ''; if (library.flags.showDangerTimer) then local humanoid = Utility:getPlayerData(self._player).humanoid; local expirationTime = humanoid and humanoid:GetAttribute('DangerExpiration') if (expirationTime and expirationTime ~= -1) then dangerText = string.format(' [%ds]', expirationTime - workspace:GetServerTimeNow()); end; end; return { text = string.format('\n[Level: %d]%s', playerStats.level, dangerText), playerName = shouldSpoofName and self._fakeName or self._playerName, } end; end; local markerWorkspace = ReplicatedStorage:WaitForChild('MarkerWorkspace'); local isLayer2 = ReplicatedStorage:FindFirstChild('LAYER2_DUNGEON'); do -- // Functions function functions.speedHack(toggle) if (not toggle) then maid.speedHack = nil; maid.speedHackBv = nil; return; end; maid.speedHack = RunService.Heartbeat:Connect(function() local playerData = Utility:getPlayerData(); local humanoid, rootPart = playerData.humanoid, playerData.primaryPart; if (not humanoid or not rootPart) then return end; if (library.flags.fly) then maid.speedHackBv = nil; return; end; maid.speedHackBv = maid.speedHackBv or Instance.new('BodyVelocity'); maid.speedHackBv.MaxForce = Vector3.new(100000, 0, 100000); if (not CollectionService:HasTag(maid.speedHackBv, 'AllowedBM')) then CollectionService:AddTag(maid.speedHackBv, 'AllowedBM'); end; maid.speedHackBv.Parent = not library.flags.fly and rootPart or nil; maid.speedHackBv.Velocity = (humanoid.MoveDirection.Magnitude ~= 0 and humanoid.MoveDirection or gethiddenproperty(humanoid, 'WalkDirection')) * library.flags.speedHackValue; end); end; function functions.fly(toggle) if (not toggle) then maid.flyHack = nil; maid.flyBv = nil; return; end; maid.flyBv = Instance.new('BodyVelocity'); maid.flyBv.MaxForce = Vector3.new(math.huge, math.huge, math.huge); maid.flyHack = RunService.Heartbeat:Connect(function() local playerData = Utility:getPlayerData(); local rootPart, camera = playerData.rootPart, workspace.CurrentCamera; if (not rootPart or not camera) then return end; if (not CollectionService:HasTag(maid.flyBv, 'AllowedBM')) then CollectionService:AddTag(maid.flyBv, 'AllowedBM'); end; maid.flyBv.Parent = rootPart; maid.flyBv.Velocity = camera.CFrame:VectorToWorldSpace(ControlModule:GetMoveVector() * library.flags.flyHackValue); end); end; local depthOfField = Lighting:WaitForChild('DepthOfField', math.huge); local effectReplicator = require(ReplicatedStorage:WaitForChild('EffectReplicator', math.huge)); local playerBlindFold; local lastBlurValue = 0; function functions.noFog(toggle) if (not toggle) then maid.noFog = nil; depthOfField.Enabled = true; return; end; depthOfField.Enabled = false; maid.noFog = RunService.RenderStepped:Connect(function() Lighting.FogEnd = 1000000; local atmosphere = Lighting:FindFirstChild('Atmosphere'); if (not atmosphere) then return end; atmosphere.Density = 0; end); end; function functions.noBlind(toggle) if (not toggle) then maid.noBlind = nil; if (playerBlindFold) then playerBlindFold.Parent = LocalPlayer.Backpack; playerBlindFold = nil; end; return; end; maid.noBlind = RunService.Heartbeat:Connect(function() local backpack = LocalPlayer:FindFirstChild('Backpack'); if (not backpack) then return end; local blindFold = backpack:FindFirstChild('Talent:Blinded') or backpack:FindFirstChild('Flaw:Blind'); if (not blindFold) then return end; blindFold.Parent = nil; playerBlindFold = blindFold; end); end; function functions.noBlur(toggle) if (not toggle) then maid.noBlur = nil; Lighting.GenericBlur.Size = lastBlurValue; lastBlurValue = 0; return; end; lastBlurValue = Lighting.GenericBlur.Size; maid.noBlur = RunService.Heartbeat:Connect(function() Lighting.GenericBlur.Size = 0; end); end; -- NoClip do function functions.noClip(toggle) if (not toggle) then maid.noClip = nil; local humanoid = Utility:getPlayerData().humanoid; if (not humanoid) then return end; humanoid:ChangeState('Physics'); task.wait(); humanoid:ChangeState('RunningNoPhysics'); return; end; maid.noClip = RunService.Stepped:Connect(function() debug.profilebegin('noclip'); local myCharacterParts = Utility:getPlayerData().parts; local isKnocked = effectReplicator:FindEffect('Knocked'); local disableNoClipWhenKnocked = library.flags.disableNoClipWhenKnocked; for _, v in next, myCharacterParts do if (disableNoClipWhenKnocked) then v.CanCollide = not not isKnocked; else v.CanCollide = false; end; end; debug.profileend(); end); end; end; function functions.clickDestroy(toggle) if (not toggle) then maid.clickDestroy = nil; return; end; maid.clickDestroy = UserInputService.InputBegan:Connect(function(input, gpe) if (input.UserInputType ~= Enum.UserInputType.MouseButton1 or gpe) then return end; local target = playerMouse.Target; if (not target or target:IsA('Terrain')) then return end; target:Destroy(); end) end; function functions.serverHop(bypass) if(bypass or library:ShowConfirm('Are you sure you want to switch server?')) then library:UpdateConfig(); local dataSlot = LocalPlayer:GetAttribute('DataSlot'); MemStorageService:SetItem('DataSlot', dataSlot); BlockUtils:BlockRandomUser(); TeleportService:Teleport(4111023553); end; end; local function tweenTeleport(rootPart, position, noWait) local distance = (rootPart.Position - position).Magnitude; local tween = TweenService:Create(rootPart, TweenInfo.new(distance / 120, Enum.EasingStyle.Linear), { CFrame = CFrame.new(position) }); tween:Play(); if (not noWait) then tween.Completed:Wait(); end; return tween; end; do -- // Bots local function findFortMeritNPC(rootPart) for _, v in next, workspace.Live:GetChildren() do local mobRoot = v:FindFirstChild('HumanoidRootPart'); if (not CollectionService:HasTag(v, 'Mob') or not mobRoot or formatMobName(v.Name) ~= 'Hostage Etrean' or (mobRoot.Position - rootPart.Position).Magnitude > 500) then continue end; return v; end; end function functions.fortMeritFarm(toggle) if (not toggle) then maid.fortMeritBv = nil; return end; -- // Check if player is near fort merit boat local fortMeritBoatLocation = Vector3.new(-9725.6982421875, 3.9712052345276, 2617.1892089844); local fortMeritPrisonLocation = Vector3.new(-9318.13671875, 423.30514526367, 2772.7346191406); local rootPart = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild('HumanoidRootPart'); if (not rootPart) then return warn('[Fort Merit Bot] HumanoidRootPart not found') end; while true do if (not library.flags.fortMeritFarm) then return end; if (rootPart.Position - fortMeritBoatLocation).Magnitude > 200 then ToastNotif.new({ text = 'You are too far away from fort merit boat.', duration = 5 }); else break; end; task.wait(1); end; local bodyVelocity = Instance.new('BodyVelocity'); bodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge); bodyVelocity.Velocity = Vector3.new(); maid.fortMeritBv = bodyVelocity; CollectionService:AddTag(bodyVelocity, 'AllowedBM'); bodyVelocity.Parent = LocalPlayer.Character:FindFirstChild('Head'); while (library.flags.fortMeritFarm) do tweenTeleport(rootPart, fortMeritPrisonLocation); local fortMeritNPC; local startedAt = tick(); repeat fortMeritNPC = findFortMeritNPC(rootPart); task.wait(0.5); until fortMeritNPC or tick() - startedAt > 30 or not library.flags.fortMeritFarm; if (not fortMeritNPC) then task.wait(5); continue; end; local mobRoot = fortMeritNPC:FindFirstChild('HumanoidRootPart'); tweenTeleport(rootPart, mobRoot.Position); task.wait(0.5); LocalPlayer.Character.CharacterHandler.Requests.Carry:FireServer(); startedAt = tick(); repeat task.wait(); until effectReplicator:FindEffect('Carrying') or tick() - startedAt > 2.5; task.wait(0.5); tweenTeleport(rootPart, fortMeritPrisonLocation); task.wait(0.5); tweenTeleport(rootPart, fortMeritBoatLocation); task.wait(0.5); fireproximityprompt(workspace.NPCs['Etrean Guardmaster'].InteractPrompt); task.wait(1); dialogueRemote:FireServer({exit = true}); task.wait(1); for _, v in next, workspace.Thrown:GetChildren() do if (not CollectionService:HasTag(v, 'ClosedChest')) then continue end; local chestRoot = v.PrimaryPart; if (chestRoot and (chestRoot.Position - rootPart.Position).Magnitude < 25) then local interact = v:FindFirstChild('InteractPrompt'); if (interact) then fireproximityprompt(interact); task.wait(5); end; end; end; end; end; local ORE_FARM_MAX_RANGE = 500; local PLAYER_DIST_CHECK_MAX_RANGE = 200; local MOB_DIST_CHECK_MAX_RANGE = 100; local wantedOres = {'Astruline', 'Umbrite'}; local forceKick = false; function functions.oresFarm(toggle) if (not toggle) then return end; MemStorageService:SetItem('oresFarm', 'true'); if (not library.configVars.oresFarmPosition) then ToastNotif.new({text = 'Please set your position first!'}); library.options.oresFarm:SetState(false); return; end; local notif = Webhook.new(library.flags.oresFarmWebhookNotifier); while (library.flags.oresFarm) do task.wait(); local originalPosition = Vector3.new(unpack(library.configVars.oresFarmPosition:split(','))); if (not LocalPlayer.Character) then print('Attempt to spawn in'); firesignal(UserInputService.InputBegan, {UserInputType = Enum.UserInputType.Keyboard, KeyCode = Enum.KeyCode.Unknown}); task.wait(1); continue; end; local rootPart = LocalPlayer.Character:WaitForChild('HumanoidRootPart', 2); local humanoid = LocalPlayer.Character:WaitForChild('Humanoid', 2); local backpack = LocalPlayer:WaitForChild('Backpack', 2); if (not rootPart or not humanoid or not backpack) then -- Abort the bot warn('no root part / humanoid / backpack'); continue; end; -- Wait for game to spawn in character repeat task.wait(); until CollectionService:HasTag(backpack, 'Loaded'); if ((rootPart.Position - originalPosition).Magnitude > 500) then forceKick = true; LocalPlayer:Kick(); GuiService:ClearError(); ToastNotif.new({text = '[Ores Farm] You were too far from your last pos please click on the set location btn to reset your position and then rejoin the server.'}); return; end; print('player spawned in!'); local function isEntityNearby() if (Utility:countTable(moderators) > 0) then return true end; for _, entity in next, workspace.Live:GetChildren() do local root = entity:FindFirstChild('HumanoidRootPart'); local isMob = CollectionService:HasTag(entity, 'Mob'); if (not root or root == rootPart) then continue end; if ((root.Position - rootPart.Position).Magnitude <= (isMob and MOB_DIST_CHECK_MAX_RANGE or PLAYER_DIST_CHECK_MAX_RANGE)) then ToastNotif.new({text = string.format('too close %s %s', entity.Name, (root.Position - rootPart.Position).Magnitude)}); return true; end; end; return false; end; task.spawn(function() while true do if (isEntityNearby()) then print('someone is nearby!!!'); repeat task.wait(); until not effectReplicator:FindEffect('Danger'); LocalPlayer:Kick(''); functions.serverHop(true); return; elseif (not NetworkClient:FindFirstChild('ClientReplicator') and not forceKick) then functions.serverHop(true); end; task.wait(); end; end); -- run player checks ere if ((rootPart.Position - originalPosition).Magnitude > 10) then tweenTeleport(rootPart, originalPosition); task.wait(5); end; local ores = {}; local myPosition = rootPart.Position; local function onIngredientAdded(obj) if (table.find(wantedOres, obj.Name) and (obj.Position - myPosition).Magnitude <= ORE_FARM_MAX_RANGE) then table.insert(ores, obj); end; end; Utility.listenToChildAdded(workspace.Ingredients, onIngredientAdded); local maxCarryLoad = false; for _, ore in next, ores do if((humanoid:GetAttribute('CarryMax') or 100) * 1.2 <= humanoid:GetAttribute('CarryLoad')) then maxCarryLoad = true; break end; if (not library.flags.oresFarm) then break; end; tweenTeleport(rootPart, ore.Position); local prompt = ore:WaitForChild('InteractPrompt', 5); if (not prompt) then continue end; task.wait(0.2); local miningStartedAt = tick(); fireproximityprompt(prompt); repeat task.wait(); until not ore.Parent or tick() - miningStartedAt > 10; end; if (maxCarryLoad) then ToastNotif.new({text = 'Max carry load!'}); notif:Send(string.format('@everyone | %s | You are on max carry load', LocalPlayer.Name)); task.wait(5); end; tweenTeleport(rootPart, originalPosition); task.wait(1); local astruline = LocalPlayer.Backpack:FindFirstChild('Astruline'); if (astruline) then dropToolRemote:FireServer(astruline, true); end; task.wait(1); repeat task.wait(); until not effectReplicator:FindEffect('Danger'); LocalPlayer:Kick(''); functions.serverHop(true); break; end; end; function functions.setOresFarmPosition() local rootPart = Utility:getPlayerData().rootPart; if (not rootPart) then return end; library.configVars.oresFarmPosition = tostring(rootPart.Position); ToastNotif.new({text = 'Location set!'}); end; local function isCharacterLoaded() local backpack = LocalPlayer:FindFirstChild('Backpack'); if (not backpack) then return false end; return CollectionService:HasTag(backpack, 'Loaded'); end; do -- Temp Farms do -- Echoes Farm local Requests = ReplicatedStorage:WaitForChild("Requests"); local modifiers = require(ReplicatedStorage.Info.MetaData).Modifiers; local weaponData = require(ReplicatedStorage.Info.WeaponData).weapon_classes; local craft = Requests.Craft; local finishCreation = Requests.CharacterCreator.FinishCreation; local pickSpawn = Requests.CharacterCreator.PickSpawn; local modifyRemote = Requests.MetaModifier; local updateMeta = Requests.UpdateMeta; local increaseAttribute = Requests.IncreaseAttribute; local inDepths = game.PlaceId == 5735553160; local function startEchoFarm() if (not MemStorageService:HasItem('serverHop')) then pickSpawn:InvokeServer("Etris"); for i in next, modifiers do --Enables all modifiers local waiting = true; local con; con = updateMeta.OnClientEvent:Connect(function(tab) if not string.find(tab.Modifiers,i) then return; end print('go'); waiting = false; end) modifyRemote:FireServer(i); repeat task.wait(0.1); if not waiting then break; end; modifyRemote:FireServer(i); until not waiting; con:Disconnect(); end finishCreation:InvokeServer(); else MemStorageService:RemoveItem('serverHop'); end; repeat task.wait(); until LocalPlayer.Character and (LocalPlayer.Character.Parent == workspace.Live); local rootPart = LocalPlayer.Character:WaitForChild('HumanoidRootPart', 10); local backpack = LocalPlayer:WaitForChild('Backpack', 10); repeat task.wait(); until CollectionService:HasTag(backpack, 'Loaded'); --Wait for us to spawn in --Make sure that a browncap and dentifilo is near and Y: 401 is below it --Toggle Noclip library.options.noClip:SetState(true); --Toggly Fly library.options.fly:SetState(true); local function pickupIngredients() local closests = {}; local closestsParts = {}; if (getgenv().breakPickup) then return false; end; for _, ingredient in next, workspace.Ingredients:GetChildren() do -- Make sure ingredient name is valid if (ingredient.Name == 'Dentifilo' or ingredient.Name == 'Browncap') then local interactPrompt = ingredient:FindFirstChild('InteractPrompt'); if (not interactPrompt) then continue end; if (not closests[ingredient.Name]) then closests[ingredient.Name] = math.huge; end; local distance = (myRootPart.Position - ingredient.Position).Magnitude; if (distance < closests[ingredient.Name] and distance <= 250) then closests[ingredient.Name] = distance; closestsParts[ingredient.Name] = ingredient; end; end; end; -- Find closest ingredient and returns them if (not closestsParts.Dentifilo or not closestsParts.Browncap) then return false end; for _, ingredient in next, closestsParts do local ingPos = ingredient.Position; LocalPlayer.Character:PivotTo(CFrame.new(rootPart.Position.X,401.5,rootPart.Position.Z)); --Teleporting them below the Inn tweenTeleport(myRootPart, Vector3.new(ingPos.X, 401.5, ingPos.Z)); -- Pickup the ingredient local startedAt = tick(); local interactPrompt = ingredient:FindFirstChild('InteractPrompt'); repeat if (not interactPrompt) then return false end; fireproximityprompt(interactPrompt); task.wait(1); until not ingredient.Parent or tick() - startedAt > 5; if (tick() - startedAt > 5) then -- We couldn't pick up the ingredient return false; end; end; return true; end; if (not pickupIngredients()) then -- If there is no mushroom then we wait to get new mushroom local startedAt = tick(); repeat print('no browncap/dentifilo :('); task.wait(1); until pickupIngredients() or tick() - startedAt > 20; if (tick() - startedAt > 20) then MemStorageService:SetItem('serverHop', 'true'); functions.serverHop(true); return; end; end; --Tween to the campfire tweenTeleport(myRootPart, Vector3.new(2509.039, 401.5, -5562.163)); repeat task.wait(0.1); until craft:InvokeServer({Dentifilo = true, Browncap = true}); --Craft the Mushroom Soup originalFunctions.fireServer(fallRemote, math.random(900,1000),false); MemStorageService:SetItem('doWipe', 'true'); end; local function fireChoices(choices, responseChoices) --There might be a debounce on these gotta test later for i, v in next, choices do -- Run Through Choices local completed = false; local con; con = dialogueRemote.OnClientEvent:Connect(function(tab) local text = tab.text; if (text ~= responseChoices[i] and not tab.exit) then -- Invalid data? return; end; completed = true; end); local waitTime = 0.25; repeat dialogueRemote:FireServer(v); task.wait(waitTime); waitTime += math.min(waitTime + 0.25, 1); -- Increase wait time for each failed attempts incase of a debounce or idk until completed; con:Disconnect(); end; end; local function doWipe() local choices = {{["choice"] = "What do you mean?"}, {["choice"] = "But I don't want to go."}, {["choice"] = "Isn't there something we can do?"}, {["choice"] = "What is all this?"}, {["choice"] = "So, is this really the end?"}, {["exit"] = true}}; local responseChoices = { 'You know what I mean. You\'re me, after all. This is where we as a person end.', '[i]*Sigh.*[/i] There was so much left for us to do, wasn\'t there?', '[i]*You see your face racked with a pained expression.*[/i] No. You know there isn\'t.', 'This... All of this around us... Is all our mind is able to make sense of right now. It\'s just holding on to all it can still remember.', 'Yeah, I suppose it is. Come speak to me again when you want to... Well... You know.', }; repeat task.wait(); until fallRemote and isCharacterLoaded(); --Wait for us to spawn in LocalPlayer.Character:PivotTo(myRootPart.CFrame * CFrame.new(0, -100, 0)); --Remove ForceField local myChar = LocalPlayer.Character; library.options.noKillBricks:SetState(false); print('wiating'); repeat local pos = LocalPlayer.Character:GetPivot().Position; LocalPlayer.Character:PivotTo(CFrame.new(pos.X, -2871, pos.Z)); task.wait(0.5); until LocalPlayer.Character ~= myChar and LocalPlayer.Character ~= nil; print('ok'); repeat task.wait(); until isCharacterLoaded(); --Wait for us to spawn in task.wait(2); -- 2 seem to be the fastest we can local dialogueUI = LocalPlayer.PlayerGui:WaitForChild('DialogueGui'):WaitForChild('DialogueFrame'); local npcSelf = workspace:WaitForChild('NPCs'):WaitForChild('Self'); local selfInteract = npcSelf.InteractPrompt; local npcSelfCF = npcSelf:GetPivot() * CFrame.new(0, -5, 0); local lastProximityPromptFire = 0; local stages = {}; local function talkToSelf() repeat LocalPlayer.Character:PivotTo(npcSelfCF); --Teleport under Self if (tick() - lastProximityPromptFire > 0.5) then fireproximityprompt(selfInteract); lastProximityPromptFire = tick(); end; task.wait(); until dialogueUI.Visible; end; task.delay(60, function() if (not LocalPlayer.Character or not LocalPlayer.Character.Parent) then return end; debugWebhook:Send('Took more than 60 seconds ' .. table.concat(stages, ', ')); while true do debugWebhook:Send(LocalPlayer.Character and LocalPlayer.Character.Parent and 'char found' or 'no char'); task.wait(10); end; end); dialogueRemote.OnClientEvent:Connect(function(tab) if (not tab.text) then return; end; table.insert(stages,tab.text..'\n'); end) -- Talk to self 1st part talkToSelf(); fireChoices(choices, responseChoices); -- Talk to self 2nd part task.spawn(function() while true do talkToSelf(); fireChoices({ {choice = '[The End]'}, }, {}); end; end); while true do ReplicatedStorage.Requests.GetScore:FireServer(); task.wait(0.1); end; end; function functions.echoFarm(t) if (not t) then return end; -- Don't enable echo farm in to1 if (game.PlaceId == 8668476218) then return end; repeat ReplicatedStorage.Requests.StartMenu.Start:FireServer(); task.wait(1); until LocalPlayer.Character; if (inDepths) then if (not MemStorageService:HasItem('doWipe')) then return ToastNotif.new({text = 'Echo farm is turned on but echo farm did not pass first stage so it wont wipe you.'}); end; MemStorageService:RemoveItem('doWipe') doWipe(); else if (not MemStorageService:HasItem('serverHop')) then local ran = false; task.delay(5, function() if (ran) then return end; ToastNotif.new({text = 'You must be in character creation menu to use the echo farm'}); end); repeat task.wait(); until LocalPlayer.PlayerGui:FindFirstChild('CharacterCreator'); ran = true; end; startEchoFarm(); end; end; local animalKingFarmRan = false; function functions.animalKingFarm(t) if (not t) then return end; repeat ReplicatedStorage.Requests.StartMenu.Start:FireServer(); task.wait(1); until LocalPlayer.Character; if (inDepths) then if (not MemStorageService:HasItem('doWipe')) then return end; MemStorageService:RemoveItem('doWipe') doWipe(); return; end; if (animalKingFarmRan) then return; end; animalKingFarmRan = true; -- Toggle noclip library.options.noClip:SetState(true); --Toggly Fly library.options.fly:SetState(true); -- Disable echof arm library.options.echoFarm:SetState(false); -- Select minityrsa and spawn if (game.PlaceId ~= 8668476218) then repeat task.wait(); until LocalPlayer.PlayerGui:FindFirstChild('CharacterCreator'); local ran = false; task.delay(5, function() if (ran) then return end; ToastNotif.new({text = 'You must be in character creation menu to use the animal king farm'}); end); repeat task.wait(); until LocalPlayer.PlayerGui:FindFirstChild('CharacterCreator'); ran = true; if (not pickSpawn:InvokeServer('Minityrsa')) then ToastNotif.new({text = 'You must have lone warrior origin to use the animal king farm'}); return; end; finishCreation:InvokeServer(); return; end; repeat task.wait(); until isCharacterLoaded(); local startPosition = myRootPart.Position; local dialogueUI = LocalPlayer.PlayerGui:WaitForChild('DialogueGui'):WaitForChild('DialogueFrame'); local oneModel = workspace:WaitForChild('One'); local startTrialOfOne = oneModel.OneTrigger; local campfire = oneModel.Campfire.CampfirePart; -- Do first stage of trial of one (orbs) tweenTeleport(myRootPart, startTrialOfOne.Position); repeat task.wait() until dialogueUI.Visible; tweenTeleport(myRootPart, startPosition); -- Wait until campfire goes back down repeat task.wait(); until campfire.Position.Y <= 1178; -- Tp to campfire tweenTeleport(myRootPart, Vector3.new(campfire.Position.X, 1140, campfire.Position.Z)); -- Spend points local weapon = LocalPlayer.Backpack:FindFirstChild('Weapon'); local weaponType = weaponData[weapon:GetAttribute('DisplayName')] or weapon:GetAttribute('DisplayName'); if (weaponType == 'Gun') then weaponType = 'WeaponLight' else weaponType = 'Weapon' .. weaponType:match('(.-)Weapon'); end; local sharkoController; repeat task.wait(0.5); increaseAttribute:InvokeServer(weaponType, true, true); sharkoController = workspace.Live:FindFirstChild('MegalodauntController', true) until sharkoController; -- Spend attribute points until sharko spawns local sharko = sharkoController.Parent; local sharkoTarget = sharko:WaitForChild('Target'); local startedAt = tick(); -- Wait until sharko target is us or timeout reached repeat task.wait(); until sharkoTarget.Value == LocalPlayer.Character or tick() - startedAt > 20; -- If timeout reached then we have animal king otherwsie we wipe if (tick() - startedAt > 20 or not sharkoTarget.Value) then print('OMG LE ANIMAL KING'); logError(string.format('%s someone got animal king?', LocalPlayer.Name)); Webhook.new(library.flags.animalKingWebhookNotifier):Send(string.format('@everyone | %s got animal king', LocalPlayer.Name)); repeat task.wait(); until not isInDanger(); LocalPlayer:Kick('Animal King!'); else MemStorageService:SetItem('doWipe', 'true'); originalFunctions.fireServer(fallRemote, math.random(900,1000),false); end; end; end; end; end; function functions.charismaFarm(toggle) if (not toggle) then maid.charismaFarm = nil; return; end; local lastFarmRanAt = 0; maid.charismaFarm = RunService.Heartbeat:Connect(function() if (tick() - lastFarmRanAt < 1) then return end; lastFarmRanAt = tick(); local tool = LocalPlayer.Backpack:FindFirstChild('How to Make Friends') or LocalPlayer.Character:FindFirstChild('How to Make Friends'); if (not tool) then return ToastNotif.new({ text = 'You need to have How to Make Friends in your inventory for the farm to work', duration = 1 }); end; tool.Parent = LocalPlayer.Character; tool:Activate(); local singlePrompt = LocalPlayer.PlayerGui:FindFirstChild('SimplePrompt'); if (not singlePrompt) then return end; local chatText = singlePrompt.Prompt.Text:match('\'(.+)\''); if (not chatText) then return end; warn('should say', chatText); library.dummyBox:SetTextFromInput(chatText); Players:Chat(chatText); end); end; function functions.intelligenceFarm(toggle) if (not toggle) then maid.intelligenceFarm = nil; return; end; local lastFarmRanAt = 0; maid.intelligenceFarm = RunService.Heartbeat:Connect(function() if (tick() - lastFarmRanAt < 1) then return end; lastFarmRanAt = tick(); local tool = LocalPlayer.Backpack:FindFirstChild('Math Textbook') or LocalPlayer.Character:FindFirstChild('Math Textbook'); if (not tool) then return ToastNotif.new({ text = 'You need to have Math Textbook in your inventory for the farm to work', duration = 1 }); end; tool.Parent = LocalPlayer.Character; tool:Activate(); local choicePrompt = LocalPlayer.PlayerGui:FindFirstChild('ChoicePrompt'); if (not choicePrompt) then return end; local question = choicePrompt.ChoiceFrame.DescSheet.Desc.Text:gsub('[^%w%p%s]', ''); local operationType = question:match('%d+ (.-) '); local number1 = question:match('What is (.-) '); local number2 = question:match(operationType .. ' (.-)%?'); number2 = number2:gsub('by', ''); number1 = tonumber(number1); number2 = tonumber(number2); local result = 0; if (operationType == 'minus') then result = number1 - number2; elseif (operationType == 'divided') then result = number1 / number2; elseif (operationType == 'plus') then result = number1 + number2; elseif (operationType == 'times') then result = number1 * number2; end; for i, v in next, choicePrompt.ChoiceFrame.Options:GetChildren() do if (not v:IsA('TextButton')) then continue end; print(math.abs(tonumber(v.Name)-result)); if (math.abs(tonumber(v.Name)-result)<=1) then choicePrompt.Choice:FireServer(v.Name); break; end; end; end); end; function functions.fishFarm(toggle) if (not toggle) then maid.fishFarmAutoClicker = nil; maid.fishFarmAutoPull = nil; return; end; if (not LocalPlayer.Character or not LocalPlayer:FindFirstChildWhichIsA('Backpack')) then return ToastNotif.new({ text = 'Error trying to run fish farm, please try again.', duration = 1 }); end; local fishingRod = LocalPlayer.Backpack:FindFirstChild('Fishing Rod') or LocalPlayer.Character:FindFirstChild('Fishing Rod'); local rootPart = LocalPlayer.Character:FindFirstChild('HumanoidRootPart'); local humanoid = LocalPlayer.Character:FindFirstChildWhichIsA('Humanoid'); if (not fishingRod or not rootPart) then ToastNotif.new({ text = 'You need a fishing rod to use the fish farm.', duration = 5, }); return; end; fishingRod.Parent = LocalPlayer.Character; task.wait(1); local reelLongSong = fishingRod.Handle.FishingLoop; local fishingRodRemote = fishingRod.FishinScript.RemoteEvent; local lastPullDirection; local function pullFishingRod(direction) if (direction == lastPullDirection) then return warn('same direction, we dont change') end; print('pulling', direction); if (lastPullDirection) then fishingRodRemote:FireServer(lastPullDirection, false); end; fishingRodRemote:FireServer(direction, true); lastPullDirection = direction; end; local function attachBait() local fishFarmBaits = library.flags.fishFarmBait:split(','); local bait = fishingRod.Bait.Value; local canBait = fishingRod.CanBait.Value; for i, v in next, fishFarmBaits do for i2, v2 in next, LocalPlayer.Backpack:GetChildren() do if (v:lower() == v2.Name:lower() and CollectionService:HasTag(v2, 'Edible') and canBait and not bait) then fishingRod.AddBait:FireServer(v2); local lastAttachBaitAt = tick(); repeat task.wait(); until fishingRod.Bait.Value or tick() - lastAttachBaitAt > 5; task.wait(0.5); return; end; end; end; end; maid.fishFarmAutoPull = humanoid.AnimationPlayed:Connect(function(anim) local animationId = anim.Animation.AnimationId:match('%d+'); if (animationId == '6415331110') then -- Pull left pullFishingRod('a'); elseif (animationId == '6415331617') then -- Pull right pullFishingRod('d'); elseif (animationId == '6415330705') then -- Pull back pullFishingRod('s'); end; end); maid.fishFarmAutoClicker = reelLongSong:GetPropertyChangedSignal('Playing'):Connect(function() if (reelLongSong.Playing) then task.wait(0.2); while (reelLongSong.Playing) do fishingRod:Activate(); task.wait(1 / 10); -- Clicking 10 time per second end; end; end); local fishingStartedAt = tick(); task.spawn(function() while (library.flags.fishFarm) do local hook = fishingRod.Handle.Rod.bobby.hook; if ((rootPart.Position - hook.Position).Magnitude < 10) then -- If the hook is too close it mean the player is not fishing so we start fishing again. attachBait(); fishingRod:Activate(); task.wait(library.flags.fishFarmHoldTime); fishingRod:Deactivate(); task.wait(1); fishingStartedAt = tick(); elseif (tick() - fishingStartedAt >= 120) then -- If player is fishing for more than 120 second without any fish, we stop fishing and retry. fishingRod.Parent = LocalPlayer.Backpack; task.wait(1); fishingRod.Parent = LocalPlayer.Character; end; task.wait(0.1); end; end); end; function functions.autoLoot(toggle) if (not toggle) then maid.autoLoot = nil; return; end; local colors = { ['875252'] = 'Rare', ['a38e64'] = 'Uncommon', ['40504c'] = 'Common', ['9057ac'] = 'Epic', ['e2ffe6'] = 'Enchant', ['46ccaf'] = 'Legendary' }; local icons = { [tostring(Vector2.new(0, 0))] = 'Ring', [tostring(Vector2.new(20, 0))] = 'Gloves', [tostring(Vector2.new(40, 0))] = 'Shoes', [tostring(Vector2.new(60, 0))] = 'Helmets', [tostring(Vector2.new(80, 0))] = 'Glasses', [tostring(Vector2.new(100, 0))] = 'Earrings', [tostring(Vector2.new(120, 0))] = 'Schematics', [tostring(Vector2.new(140, 0))] = 'Weapons', [tostring(Vector2.new(160, 0))] = 'Daggers', [tostring(Vector2.new(180, 0))] = 'Necklace', [tostring(Vector2.new(200, 0))] = 'Trinkets' }; local weaponAttributes = { 'HP', 'ETH', 'RES', 'Posture', 'SAN', 'Monster Armor', 'PHY Armor', 'Monster DMG', 'ELM Armor' } local starIcon = fromHex('E29885'); local fired = {}; local function firstToUpper(str) --Totally not somewhat ripped from devforum cuz lazy return str:gsub("^%l", string.upper) end local function checkItemAttributes(weaponType,itemAttributes) --This function could be more efficient if i didn't check the ones at 0 but whatevs local foundMatch = false; if library.flags['autoLootWhitelistMatchAll'..weaponType] then --All things have to match gte for it to return true local attributeAmount = #weaponAttributes; local timesMatched = 0; for _,statName in next, weaponAttributes do statName = firstToUpper(toCamelCase(statName)); local weaponTypeValue = library.flags['autoLootWhitelist'..statName..weaponType]; local itemValue = itemAttributes[statName] or 0; if weaponTypeValue and itemValue and itemValue >= weaponTypeValue then timesMatched = timesMatched+1; end end foundMatch = attributeAmount == timesMatched; else --Only one thing has to match to return true for statName, itemValue in next, itemAttributes do --This check is annoying because if its greater than 0 but probably nobody gonna want a 0 stat thing so... local weaponTypeValue = library.flags['autoLootWhitelist'..statName..weaponType]; --This is incredibly demonic at this point... autoLootWhitelistHPWeapon if weaponTypeValue and itemValue >= weaponTypeValue and weaponTypeValue ~= 0 then foundMatch = true; break; end end end return foundMatch; end local function canGrabItem(starAmount, weaponRarity, weaponType, itemAttributes, itemName) if (weaponRarity == 'Enchant' and library.flags.alwaysPickupEnchant) then return true; end; if (itemName == "Kyrsan Medallion" and library.flags.alwaysPickupMedallion) then return; end if (library.flags['autoLootFilter' .. weaponType]) then local priority = library.flags['autoLootWhitelistPriorities' .. weaponType]; local starsFlag = library.flags['autoLootWhitelistStars' .. weaponType]; if (priority == 'Stars' and starsFlag[starAmount .. ' Stars']) then return true; elseif priority == 'Stats' and library.flags['autoLootWhitelistUseAttributes' .. weaponType] and checkItemAttributes(weaponType,itemAttributes) then return true; end local hasOneStarSelected = Utility.find(starsFlag, function(v) return v == true end); if (not library.flags['autoLootWhitelistRarities' .. weaponType][weaponRarity]) then return false; end; if (not starsFlag[starAmount .. ' Stars'] and hasOneStarSelected) then return false; end; if (library.flags['autoLootWhitelistUseAttributes' .. weaponType] and not checkItemAttributes(weaponType,itemAttributes)) then return false; end return true; end; return true; end; _G.canGrabItem = canGrabItem; local lastRan = 0; maid.autoLoot = RunService.Heartbeat:Connect(function() local choicePrompt = LocalPlayer.PlayerGui:FindFirstChild('ChoicePrompt'); -- Note to myself the description check could break if game add translation in the future. if (not choicePrompt or choicePrompt.ChoiceFrame.Title.Text ~= 'Treasure Chest') then return end; local remote = choicePrompt:FindFirstChild('Choice'); if (not remote or tick() - lastRan <= 0.1) then return end; for _, v in next, choicePrompt.ChoiceFrame.Options:GetChildren() do if (not IsA(v, 'TextButton') or v.Name == 'Nothing') then continue end; local canClick = v.AutoButtonColor; if (not canClick) then print('NOOOON'); continue end; local weaponRarity = colors[v.BackgroundColor3:ToHex()]; local weaponType = v.Title.Text:find('Ring') and 'Ring' or icons[tostring(v.Icon.ImageRectOffset)]; local splitText = v.Text:split(starIcon); local starAmount = #splitText - 1; local itemName = splitText[1]; local itemAttributes = {}; if v.Stats.Visible then local itemStats = v.Stats.Text; local strippedString = string.match(itemStats,"^.*%>; (.*)") or string.match(itemStats,".*"); string.gsub(strippedString,'[+-]?%d%%?[^;]*',function(x) itemAttributes[firstToUpper(toCamelCase(string.match(x,'%A+(.*)')))] = tonumber(string.match(x,'%d+')); end) end -- print(weaponType, weaponRarity); if (not canGrabItem(starAmount, weaponRarity, weaponType, itemAttributes, itemName)) then continue end; if (not fired[v]) then lastRan = tick(); remote:FireServer(v.Name); fired[v] = true; task.delay(0.1, function() fired[v] = nil; end); end; return; end; if (not fired[remote] and library.flags.autoCloseChest) then fired[remote] = true; remote:FireServer('EXIT'); task.delay(0.1, function() fired[remote] = nil; end); end; end); end; -- Auto Loot Analytics task.spawn(function() if (true) then return end; -- Disable auto loot analytics local sentColors = { ['875252'] = 'Rare', ['a38e64'] = 'Uncommon', ['40504c'] = 'Common', ['9057ac'] = 'Epic', ['e2ffe6'] = 'Enchant', ['46ccaf'] = 'Legendary' }; local lastRanAt = 0; local icons = { [tostring(Vector2.new(0, 0))] = 'Ring', [tostring(Vector2.new(20, 0))] = 'Gloves', [tostring(Vector2.new(40, 0))] = 'Shoes', [tostring(Vector2.new(60, 0))] = 'Helmets', [tostring(Vector2.new(80, 0))] = 'Glasses', [tostring(Vector2.new(100, 0))] = 'Earrings', [tostring(Vector2.new(120, 0))] = 'Coats', [tostring(Vector2.new(140, 0))] = 'Weapons', [tostring(Vector2.new(160, 0))] = 'Daggers', [tostring(Vector2.new(180, 0))] = 'Necklace', [tostring(Vector2.new(200, 0))] = 'Trinkets' }; local starIcon = fromHex('E29885'); RunService.Heartbeat:Connect(function() if (tick() - lastRanAt < 0.2) then return end; lastRanAt = tick(); local choicePrompt = LocalPlayer.PlayerGui:FindFirstChild('ChoicePrompt'); -- Note to myself the description check could break if game add translation in the future. if (not choicePrompt or choicePrompt.ChoiceFrame.DescSheet.Desc.Text ~= 'What do you take?') then return end; local remote = choicePrompt:FindFirstChild('Choice'); if (not remote) then return end; for _, v in next, choicePrompt.ChoiceFrame.Options:GetChildren() do if (not IsA(v, 'TextButton') or v.Name == 'Nothing') then continue end; local canClick = v.AutoButtonColor; local color = v.BackgroundColor3:ToHex(); if (not canClick or sentColors[color]) then continue end; local icon = icons[tostring(v.Icon.ImageRectOffset)] or tostring(v.Icon.ImageRectOffset); sentColors[color] = true; local starAmount = #v.Text:split(starIcon) - 1; syn.request({ Url = '', Method = 'POST', Body = HttpService:JSONEncode({ content = string.format('v2 | Icon:%s | Color:%s | Name:%s | Stars:%s', icon, color, v.Name, starAmount) }), Headers = {['Content-Type'] = 'application/json'} }); end; end); end); function functions.autoSprint(toggle) if (not toggle) then maid.autoSprint = nil; return; end; local moveKeys = {Enum.KeyCode.W, Enum.KeyCode.A, Enum.KeyCode.S, Enum.KeyCode.D}; local lastRan = 0; maid.autoSprint = UserInputService.InputBegan:Connect(function(input, gpe) if (gpe or tick() - lastRan < 0.1) then return end; if (table.find(moveKeys, input.KeyCode)) then lastRan = tick(); VirtualInputManager:SendKeyEvent(true, input.KeyCode, false, game); end; end); end; function functions.chatLogger(toggle) chatLogger:SetVisible(toggle); end; local autoParryHelperMaid = Maid.new(); local animTimes = {}; local allAnimations = {}; local mobsAnims = {}; local fetchingNames = {}; autoParryHelperLogger.ignoreList = {'8174890073', '180435571', '4087826639', '5554732065', '180436148', '9323073748', '5168319343', '180435792'}; function functions.autoParryHelper(toggle) autoParryHelperLogger:SetVisible(toggle); if (not toggle) then autoParryHelperMaid:Destroy(); return; end; local function onNewEntityAdded(entity) if (entity == LocalPlayer.Character) then return end; local rootPart = entity:WaitForChild('HumanoidRootPart', 10); if (not rootPart) then return end; local humanoid = entity:WaitForChild('Humanoid', 10); if (not humanoid) then return end; local entityMaid = Maid.new(); entityMaid:GiveTask(entity.Destroying:Connect(function() entityMaid:Destroy(); end)); entityMaid:GiveTask(humanoid.AnimationPlayed:Connect(function(animationTrack) local animationId = animationTrack.Animation.AnimationId:match('%d+'); local maxLoggerRange = library.flags.helperMaxRange; if (table.find(autoParryHelperLogger.ignoreList, animationId) or (myRootPart.Position - rootPart.Position).Magnitude > maxLoggerRange) then return; end; local entityName = entity.Name; if (CollectionService:HasTag(entity, 'Mob')) then entityName = formatMobName(entityName); end; local animName = allAnimations[animationId]; if (not animName and not fetchingNames[animationId]) then fetchingNames[animationId] = true; task.spawn(function() allAnimations[animationId] = '?_' .. game:GetService('MarketplaceService'):GetProductInfo(tonumber(animationId), Enum.InfoType.Asset).Name; end); end; autoParryHelperLogger:AddText({ text = string.format('Animation %s (%s) played from %s', animationId, animName or 'no_name', entityName), animationId = animationId, }); end)); autoParryHelperMaid:GiveTask(function() entityMaid:Destroy(); end); end; autoParryHelperMaid:GiveTask(workspace.Live.ChildAdded:Connect(onNewEntityAdded)); for i, v in next, workspace.Live:GetChildren() do task.spawn(onNewEntityAdded, v); end; autoParryHelperMaid:GiveTask(autoParryHelperLogger.OnClick:Connect(function(actionName, context) if (actionName == 'Add To Ignore List' and not table.find(autoParryHelperLogger.ignoreList, context.animationId)) then table.insert(autoParryHelperLogger.ignoreList, context.animationId); elseif (actionName == 'Delete Log') then context:Destroy(); elseif (actionName == 'Copy Animation Id') then setclipboard(context.animationId); elseif (actionName == 'Clear All') then for i, v in next, autoParryHelperLogger.allLogs do v.label:Destroy(); end; table.clear(autoParryHelperLogger.allLogs); end; end)); end; local function getWorldInfo() local playerGui = LocalPlayer:FindFirstChild('PlayerGui'); if (not playerGui) then return end; local worldInfo = playerGui:FindFirstChild('WorldInfo'); if (not worldInfo) then return end; return worldInfo; end; local function getBackpackGui() local playerGui = LocalPlayer:FindFirstChild('PlayerGui'); if (not playerGui) then return end; local backpackGui = playerGui:FindFirstChild('BackpackGui'); if (not backpackGui) then return end; return backpackGui; end; local function getChoicePrompt() local playerGui = LocalPlayer:FindFirstChild('PlayerGui'); if (not playerGui) then return end; local choicePrompt = playerGui:FindFirstChild('ChoicePrompt'); if (not choicePrompt) then return end; return choicePrompt; end; local oldDisplayName; local oldSlotText; function functions.streamerMode(toggle) local streamerModeType = library.flags.streamerModeType; if (not toggle) then maid.streamerMode = nil; maid.streamerModeIdSpoofer = nil; LocalPlayer:SetAttribute('Hidden', false); for _, v in next, myChatLogs do v.label.Text = v.text; v.label.Visible = true; end; chatLogger:UpdateCanvas(); local worldInfo = getWorldInfo(); local backpackGui = getBackpackGui(); if (backpackGui and oldDisplayName) then backpackGui.JournalFrame.CharacterName.Text = oldDisplayName; backpackGui.JournalFrame.CharacterName.Visible = true; end; if (worldInfo and oldSlotText) then worldInfo.InfoFrame.CharacterInfo.Visible = true; worldInfo.InfoFrame.CharacterInfo.Slot.Text = oldSlotText or worldInfo.InfoFrame.CharacterInfo.Slot.Text; worldInfo.InfoFrame.ServerInfo.Visible = true; worldInfo.InfoFrame.GameInfo.Visible = true; worldInfo.InfoFrame.AgeInfo.Visible = true; worldInfo.InfoFrame.WorldInfo.Visible = true; oldSlotText = nil; end; local character = LocalPlayer.Character; if (not character) then return end; local humanoid = character:FindFirstChildWhichIsA('Humanoid'); if (not humanoid or not oldDisplayName) then return end; humanoid.DisplayName = oldDisplayName; oldDisplayName = nil; return; end; LocalPlayer:SetAttribute('Hidden', true); local players = {}; for _, v in next, Players:getPlayers() do if (v ~= LocalPlayer and v:GetAttribute('CharacterName')) then table.insert(players, v); end; end; local chosenPlayer = library.configVars.streamerModeTarget or #players > 0 and players[math.random(1, #players)]; if (not chosenPlayer) then return ToastNotif.new({ text = 'For security reasons, you can\'t use streamer mode without any players in your server.', duration = 10 }); end; local chosenPlayerName = typeof(chosenPlayer) == 'table' and chosenPlayer.CharacterName or chosenPlayer:GetAttribute('CharacterName'); local chosenPlayerId = chosenPlayer.UserId; local chosenPlayerAccountAge = math.random(1, 50); local chosenPlayerLevel = typeof(chosenPlayer) == 'table' and chosenPlayer.AccountLevelSmaller or math.random(1, 20); library.configVars.streamerModeTarget = { Name = chosenPlayer.Name, UserId = chosenPlayer.UserId, AccountAge = chosenPlayer.AccountAge, AccountLevelSmaller = chosenPlayerLevel, CharacterName = chosenPlayerName }; for _, v in next, myChatLogs do if (streamerModeType == 'Hide') then v.label.Visible = false; continue; end; local timeText = v.text:match('(%[.-%])'); local rawText = v.text:match('.-%] .-%] .-%] (.+)'); v.label.Text = ('%s [%s] [%s] %s'):format(timeText, chosenPlayer.Name, chosenPlayerName, rawText); v.label.Visible = true; end; chatLogger:UpdateCanvas(); maid.streamerModeIdSpoofer = LocalPlayer.DescendantAdded:Connect(function(obj) if (obj.Name == 'DeathID' or obj.Name == 'KillerCharacter' or obj.Name == 'KillerPlayer') then repeat obj.Text = ''; task.wait(); until not obj.Parent; end; end); maid.streamerMode = RunService.Heartbeat:Connect(function() debug.profilebegin('streamer mode'); local ultraStreamerMode = library.flags.ultraStreamerMode; local hideAllServerInfo = library.flags.hideAllServerInfo; local myCharacter = LocalPlayer.Character; if (ultraStreamerMode) then for _, entity in next, workspace.Live:GetChildren() do if (entity == myCharacter) then continue end; local humanoid = entity:FindFirstChildWhichIsA('Humanoid'); if (not humanoid) then continue end; humanoid.DisplayName = 'BUY AZTUP HUB'; end; end; local worldInfo = getWorldInfo(); local backpackGui = getBackpackGui(); local choicePrompt = getChoicePrompt(); streamerModeType = library.flags.streamerModeType; if (worldInfo) then if (not oldSlotText) then oldSlotText = worldInfo.InfoFrame.CharacterInfo.Slot.Text; end; worldInfo.InfoFrame.CharacterInfo.Visible = streamerModeType == 'Spoof'; worldInfo.InfoFrame.CharacterInfo.Slot.Text = ('%d:A|%d [Lv.%d]'):format(chosenPlayerId, chosenPlayerAccountAge, chosenPlayerLevel); worldInfo.InfoFrame.ServerInfo.Visible = not hideAllServerInfo; worldInfo.InfoFrame.GameInfo.Visible = not hideAllServerInfo; worldInfo.InfoFrame.AgeInfo.Visible = not hideAllServerInfo; worldInfo.InfoFrame.WorldInfo.Visible = not hideAllServerInfo; end; if (backpackGui) then backpackGui.JournalFrame.CharacterName.Visible = streamerModeType == 'Spoof'; backpackGui.JournalFrame.CharacterName.Text = chosenPlayerName; if (ultraStreamerMode) then backpackGui.JournalFrame.FactSheet.Container.Age.Value.Text = '???'; backpackGui.JournalFrame.FactSheet.Container.Born.Value.Text = '???'; backpackGui.JournalFrame.FactSheet.Container.Level.Value.Text = '???'; backpackGui.JournalFrame.FactSheet.Container.Race.Value.Text = '???'; end; end; if (choicePrompt and ultraStreamerMode and choicePrompt.ChoiceFrame.Title.Text ~= 'Treasure Chest') then choicePrompt.ChoiceFrame.Title.Text = '???'; end; local character = LocalPlayer.Character; if (not character) then return end; local humanoid = character:FindFirstChildWhichIsA('Humanoid'); if (not humanoid) then return end; if (not oldDisplayName) then oldDisplayName = humanoid.DisplayName; end; humanoid.DisplayName = chosenPlayerName; debug.profileend(); end); end; function functions.rebuildStreamerMode() library.configVars.streamerModeTarget = nil; functions.streamerMode(library.flags.streamerMode); end; local function pingWait(n) if library.flags.useCustomDelay then n+=library.flags.customDelay/1000; else local playerPing = Stats.PerformanceStats.Ping:GetValue()/1000; n -= (playerPing*(library.flags.pingAdjustmentPercentage/100)); end return task.wait(n); end; -- Get all animations for auto parry debug do local mobsAnimsFolder = ReplicatedStorage.Assets.Anims.Mobs; local seenAnims = {}; local toRemove = {}; for _, v in next, ReplicatedStorage.Assets.Anims:GetDescendants() do if (not IsA(v, 'Animation')) then continue end; local animationId = v.AnimationId:match('%d+'); local isMobsFolder = v:IsDescendantOf(mobsAnimsFolder); allAnimations[animationId] = string.format('%s-%s', v.Parent.Name, v.Name); if (table.find(seenAnims, animationId)) then table.insert(toRemove, animationId); end; if (not isMobsFolder) then table.insert(seenAnims, animationId); else table.insert(mobsAnims, animationId); end; end; for _, animId in next, toRemove do if (not table.find(mobsAnims, animId)) then continue end; print('removed', animId); table.remove(mobsAnims, table.find(mobsAnims, animId)); end; end; local didRoll = false; local canDodge = true; _G.getCanDodge = function() return canDodge; end; local isBlocking = false; local rollOnNextAttacks = {}; local function checkRange(range, part) if (not myRootPart or not part) then return false; end; range += library.flags.distanceAdjustment; if (typeof(part) == 'Vector3') then part = {Position = part}; end; return (myRootPart.Position - part.Position).Magnitude <= range; end; local function checkRangeFromPing(obj, rangeCheck, speed) if (not myRootPart) then return false end; local distance = (obj.Position - myRootPart.Position).Magnitude; local playerPing = Stats.PerformanceStats.Ping:GetValue() * 2; distance = (obj.Position - myRootPart.Position).Magnitude; distance -= speed * (playerPing / 1000); return distance <= rangeCheck, distance, playerPing / speed; end; local function dodgeAttack() local tool = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildWhichIsA('Tool') if (not tool) then return end; print('dodge attempt'); canDodge = false; if (library.flags.blatantRoll) then dodgeRemote:FireServer('roll', nil, nil, false); local humanoid = Utility:getPlayerData().humanoid; if (not humanoid) then return end; local cancelRight = ReplicatedStorage.Assets.Anims.Movement.Roll.CancelRight local track = humanoid:LoadAnimation(cancelRight); track:Play(); else if (library.flags.autoFeint and tool and (effectReplicator:FindEffect('MidAttack') or effectReplicator:FindEffect('UsingMove'))) then mouse2click(); end for i = 1, 3 do VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.Q, false, game); task.wait(); VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.Q, false, game); task.wait(); if (not library.flags.rollCancel) then continue end; task.delay(library.flags.rollCancelDelay, function() VirtualInputManager:SendMouseButtonEvent(1, 1, 1, true, game, 1); task.wait(); VirtualInputManager:SendMouseButtonEvent(1, 1, 1, false, game, 1); end); end; end; end; _G.playerFPS = 0; task.spawn(function() --beautiful code aztup always LOVE local i = 0; local fps = 0; while true do fps=fps+1; i+=task.wait(); if i >= 1 then --We basically looping for 1 second in frames and count how many frames it took _G.playerFPS = fps; fps = 0; i = 0; end end end) local blockingSignal = Signal.new(); local function blockAttack(bypassDodge) if (not blockRemote or not LocalPlayer.Character or not LocalPlayer.Character:FindFirstChildWhichIsA('Tool')) then return end; if (library.flags.parryChance < Random.new():NextInteger(1,100)) then return; end if (not library.flags.parryWhenDodging and (effectReplicator:FindEffect("DodgeFrame") or effectReplicator:FindEffect("iframe"))) then return; end if (library.flags.parryRoll and canDodge and not bypassDodge) then didRoll = true; dodgeAttack(); return; end; isBlocking = true; local loopAmount = math.floor(_G.playerFPS*0.1)+1; loopAmount = loopAmount >= 12 and 12 or loopAmount; local callAmount = math.ceil(12/loopAmount); for _ = 1,loopAmount do --How many times to call task.wait for _ = 1, callAmount do --How many times we fire the remote between frames blockRemote.FireServer(blockRemote); end task.wait(); end isBlocking = false; blockingSignal:Fire(); end; local function unblockAttack() if (not unblockRemote or not LocalPlayer.Character or not LocalPlayer.Character:FindFirstChildWhichIsA('Tool')) then return end; -- if (isBlocking) then -- blockingSignal:Wait(); -- end; repeat task.wait(); until not isBlocking; if (didRoll) then didRoll = false; return; end; unblockRemote:FireServer(); end; local function makeDelayBlockWithRange(range, time) return { waitTime = time, maxRange = range }; end; --New stuff weird nya local function calculatePingWait(n) if library.flags.useCustomDelay then n+=library.flags.customDelay/1000; else local playerPing = Stats.PerformanceStats.Ping:GetValue()/1000; n -= (playerPing*(library.flags.pingAdjustmentPercentage/100)); end return n; end; local function parry(timing, rootPart, animationTrack, maxRange) local start = tick(); task.delay(timing/2,function() if (not checkRange(maxRange, rootPart)) then warn('[Auto Parry] Mob too far away ! Will not feint!!!' .. tostring((rootPart.Position - myRootPart.Position).Magnitude), maxRange); return; end; local tool = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildWhichIsA('Tool'); if (library.flags.autoFeint and tool and (effectReplicator:FindEffect('MidAttack') or effectReplicator:FindEffect('UsingMove'))) then if not effectReplicator:FindEffect('UsingSpell') or not library.flags.autoFeintMantra then mouse2click(); end end; end) task.wait(timing); local tool = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildWhichIsA('Tool'); if (not animationTrack.IsPlaying) then _G.canAttack = true; warn('[Auto Parry] Will return due to the animation no longer playing!'); return 0; end; if (library.flags.checkIfTargetFaceYou) then local dotProduct = (myRootPart.Position - rootPart.Position):Dot(rootPart.CFrame.LookVector); if (dotProduct <= 0) then warn('[Auto Parry] Will return due to dot product!'); return 0; end end; print('anim state', animationTrack.IsPlaying); if (not checkRange(maxRange, rootPart)) then warn('[Auto Parry] Mob too far away !' .. tostring((rootPart.Position - myRootPart.Position).Magnitude), maxRange); _G.canAttack = true; return 0; end; if (library.flags.autoFeint and tool and (effectReplicator:FindEffect('MidAttack') or effectReplicator:FindEffect('UsingMove'))) then if not effectReplicator:FindEffect('UsingSpell') or not library.flags.autoFeintMantra then mouse2click(); end end; local character = rootPart.Parent; local particle = character and character:FindFirstChild('MegalodauntBroken', true); if (particle and IsA(particle, 'ParticleEmitter') and particle.Enabled) then return 0; end; if (rollOnNextAttacks[character] and effectReplicator:FindEffect('ParryCool')) then rollOnNextAttacks[character] = nil; dodgeAttack(); warn('[Auto Parry] Dodged due to parry cooldown!!'); return (tick() - start); end; blockAttack(); unblockAttack(); return (tick()-start); end local function parryAttack(timings,rootPart,animationTrack,maxRange,useAnimSpeed) warn(" CALLED PARRY ATTACK!!!!!") local convertedWait = 0; local waited = 0; local offset = 0; _G.canAttack = false; for i,timing in next, timings do convertedWait = calculatePingWait(timing/(useAnimSpeed and animationTrack.Speed or 1)); waited = parry(convertedWait-offset,rootPart,animationTrack,maxRange,i); warn("WE WAITED "..waited,"CURRENT TIME|"..convertedWait); offset = waited-convertedWait; end _G.canAttack = true; end local function getSwingSpeed(mob,ignore) local hasHeavyHands = false; if not ignore then for _,v in next, mob:GetChildren() do if v.Name ~= 'Ring' or v:GetAttribute("EquipmentRef") ~= "Heavy Hands Ring" then continue; end hasHeavyHands = true; break; end end local handWeapon = mob:FindFirstChild('HandWeapon', true); if (not handWeapon) then return end; local swingSpeed = handWeapon:FindFirstChild('SwingSpeed', true); if (not swingSpeed) then return end; swingSpeed = swingSpeed.Value; if hasHeavyHands then swingSpeed = swingSpeed - 0.08; end return swingSpeed+1; end getgenv().getSwingSpeed = getSwingSpeed; getgenv().parryAttack = parryAttack; --Resonance Mantra animTimes['9236066780'] = function(_, mob) -- Shard Bow local distance = (mob.HumanoidRootPart.Position - myRootPart.Position).Magnitude; if (distance > 200) then return end; pingWait(0.5); if (distance > 15) then for _, v in next, workspace.Thrown:GetChildren() do if (v.Name ~= 'Clip') then continue; end if not IsA(v,'BasePart') then continue; end task.spawn(function() repeat task.wait(); until not v.Parent or checkRange(15,v); if not v.Parent then return; end blockAttack(); unblockAttack(); end) end; else blockAttack(); unblockAttack(); end; end; -- Physical Mantras animTimes['8066909599'] = 0.47; -- Revenge animTimes['7608490737'] = 0.6; -- HeavenlyWind (Need to be checked) animTimes['12706574441'] = 0.45; -- Prominence Draw animTimes['6510127521'] = 0.6; -- Prominence Draw 2nd part animTimes['8085349676'] = 0.37; -- Strong Left animTimes['8198492537'] = 0.3; --Exhaustion Strike animTimes['8375086403'] = makeDelayBlockWithRange(40, 0.24); -- Masters Flourish animTimes['8379406836'] = makeDelayBlockWithRange(35,0.4); --Rapid Slashes (timing is a big wrong) animTimes['8150828674'] = function(_, mob) -- Rapid Punches local mobRoot = mob:FindFirstChild('HumanoidRootPart'); if (not mobRoot and not checkRange(100, mobRoot)) then return end; pingWait(0.4); if (checkRange(10, mobRoot)) then blockAttack(); unblockAttack(); return; end; local didAt, lastParryAt = tick(), 0; repeat RunService.Stepped:Wait(); if (checkRange(20, mobRoot) and tick() - lastParryAt > 0.2) then lastParryAt = tick(); blockAttack(); unblockAttack(); end; until tick() - didAt > 1.1; if (tick() - didAt > 1.1) then return print('timed out') end; end; --Flame Mantra animTimes['8378263543'] = 0.3; --Fire Eruption animTimes['5953326460'] = 0.35; --Rising Flame animTimes['8199600822'] = function(_, mob) --Ash Slam parryAttack({0.3,0.3},mob.PrimaryPart,_,30) end animTimes['5963021481'] = function(_, mob) --Meteor Slam (Rising Flame Pt2) if (not checkRange(10, mob.PrimaryPart)) then return end; pingWait(0.3); blockAttack(); unblockAttack(); end animTimes['7693947084'] = makeDelayBlockWithRange(10,0.3); --Flame Grab Close animTimes['5750353585'] = function(animationTrack, mob) -- Flame Grab Further repeat task.wait(); until not animationTrack.IsPlaying or checkRange(15, mob.PrimaryPart); blockAttack(); unblockAttack(); end; animTimes['7608480718'] = function(_, mob) --Fire Forge if (not checkRange(30, mob.PrimaryPart) or not myRootPart) then return end; local mobRoot = mob:FindFirstChild('HumanoidRootPart'); if (not mobRoot) then return end; local distance = (myRootPart.Position - mobRoot.Position).Magnitude; pingWait(0.05*distance-0.05); blockAttack(); unblockAttack(); end; animTimes['7542502881'] = function(_, mob) --Flame Leap if (not checkRange(15, mob.PrimaryPart) or not myRootPart) then return end; local mobRoot = mob:FindFirstChild('HumanoidRootPart'); if (not mobRoot) then return end; pingWait(0.3); dodgeAttack(); end; animTimes['5769343416'] = function(_, mob) --Burning Servants if (not checkRange(10, mob.PrimaryPart) or not myRootPart) then return end; local originalPos = mob.PrimaryPart.Position; local distance; pingWait(0.3); task.spawn(function() distance = (originalPos - myRootPart.Position).Magnitude; if distance > 10 then return; end blockAttack(); unblockAttack(); end) pingWait(1.8); distance = (originalPos - myRootPart.Position).Magnitude; if distance > 10 then return; end blockAttack(); unblockAttack(); end; animTimes['7585268054'] = function(_, mob) -- Flame Blind if (not checkRange(30, mob.PrimaryPart)) then return end; pingWait(0.7); dodgeAttack(); end; --Thunder Mantra animTimes['7599168630'] = 0.2; --Lightning Blade animTimes['8183996606'] = makeDelayBlockWithRange(35, 0.4); -- Grand Javelin Small Range animTimes['7617742471'] = makeDelayBlockWithRange(60,0.2); --Lightning Beam animTimes['5750296638'] = function(_, mob) -- Jolt Grab pingWait(0.3); if (not checkRange(35, mob.PrimaryPart)) then return end; table.foreach(mob:GetChildren(), warn); if (not mob:FindFirstChild('ShadowHand')) then print('we use other'); pingWait(0.2); end; blockAttack(); unblockAttack(); end; animTimes['5968282214'] = function(_, mob) -- Lightning Assault (The tp move) local target = mob:FindFirstChild('Target'); if (target or not checkRange(85, mob.PrimaryPart)) then return end; pingWait(0.4); blockAttack(); unblockAttack(); end; animTimes['7861127585'] = 0.45; -- Thunder Kick animTimes['12333753799'] = 0.3; -- Thunder Rising windup animTimes['12333759044'] = function(_, mob) -- Thunder Rising Cast pingWait(0.3); repeat task.wait(); until checkRange(30, mob.PrimaryPart) or not _.IsPlaying; if (not _.IsPlaying and not checkRange(30, mob.PrimaryPart)) then return print('stopped'); end; print('he close'); blockAttack(); unblockAttack(); end; animTimes['5968796999'] = function(_, mob) -- Lightning Stream local distance = (mob.HumanoidRootPart.Position - myRootPart.Position).Magnitude; if (distance > 200) then return end; pingWait(0.4); local ranAt = tick(); if (distance > 15) then repeat for _, v in next, workspace.Thrown:GetChildren() do if (v.Name == 'STREAMPART' and IsA(v, 'BasePart')) then local rocket = v:FindFirstChild('RocketPropulsion'); local rocketTarget = rocket and rocket.Target; if (rocketTarget ~= myRootPart) then continue end; if(not checkRangeFromPing(v, 20, 30)) then continue end; blockAttack(); unblockAttack(); break; end; end; task.wait(); until tick() - ranAt > 3.5; else blockAttack(); unblockAttack(); end; end; -- Silent Heart animTimes['12564120372'] = 0.3; -- Silent heart slide m1 -- Dawn Walker animTimes['10622235550'] = function(anim,mob) -- Blinding Dawn pingWait(0.5); local start = tick(); repeat if checkRange(37,mob.PrimaryPart) then blockAttack(); unblockAttack(); end task.wait(0.1); until not anim.IsPlaying or tick()-start >= 2; print("FINISHED") end -- Link Strider animTimes['10104294736'] = 0.3; -- Symbiotic Link -- Arc Warder animTimes['9481400792'] = makeDelayBlockWithRange(20,0.3); -- Arc Beam animTimes['9536688585'] = makeDelayBlockWithRange(30,0.4); -- Arc Wave -- Star Kindered (No element) animTimes['9941118927'] = 0.3; -- Celestial Assault animTimes['9461513613'] = function(anim,mob) -- Ascension repeat task.wait() until checkRange(25,mob.HumanoidRootPart) or not anim.IsPlaying if not anim.IsPlaying then return; end dodgeAttack(); end; -- Star Kindered Fire animTimes['9717753391'] = function(anim,mob) -- Celestial Fireblade pingWait(1); local start = tick(); repeat if (checkRange(50, mob.PrimaryPart)) then blockAttack(); unblockAttack(); end; task.wait(0.1); until not anim.IsPlaying or tick() - start >= 2; end animTimes['9919986614'] = function(anim,mob) -- Sinister Halo pingWait(0.4); if not checkRange(25,mob.PrimaryPart) or not anim.IsPlaying then return; end blockAttack(); unblockAttack(); pingWait(0.6); if not checkRange(25,mob.PrimaryPart) then return; end; for i = 1,5 do blockAttack(); unblockAttack(); end; end; -- Contractor animTimes['9726608174'] = makeDelayBlockWithRange(50, 0.5); -- Contractor Judgement animTimes['11862841821'] = 0.3; -- Contractor Equalizer animTimes['11328614766'] = function(_, mob) -- Contractor Pull pingWait(0.4); repeat task.wait(); until checkRange(20, mob.PrimaryPart) or not _.IsPlaying; if (not _.IsPlaying) then return print('timed out'); end; blockAttack(); unblockAttack(); end; --Monster Mantra animTimes['11219902982'] = function(anim,mob) -- Dread Breath pingWait(0.5); local start = tick(); repeat if checkRange(40,mob.PrimaryPart) then blockAttack(); unblockAttack(); end task.wait(0.1); until not anim.IsPlaying or tick()-start >= 2; end --Ice Mantra animTimes['7598898608'] = 0.45; --Ice Smash animTimes['6396523003'] = 0.3; -- Crystal Knee animTimes['7616100008'] = function(animTrack, mob) -- Ice Beam if (not checkRange(85, mob.PrimaryPart)) then return end; local t = 0.00142*(mob.PrimaryPart.Position - myRootPart.Position).Magnitude + 0.58; parryAttack({t}, mob.PrimaryPart, animTrack, 85); end; animTimes['5786525661'] = function(_,mob) -- Warden Blades local elapsedAt = tick(); pingWait(0.45); if (checkRange(25, mob.PrimaryPart)) then blockAttack(); unblockAttack(); end; repeat if (not checkRange(25, mob.PrimaryPart)) then task.wait() continue end; pingWait(0.8); task.spawn(function() blockAttack(); unblockAttack(); end); until tick() - elapsedAt > 3; end; animTimes['8018953639'] = function() -- Ice Chains pingWait(1.1); local chainPortalIce = workspace.Thrown:FindFirstChild('ChainPortalIce'); if (not checkRange(20, chainPortalIce)) then return end; dodgeAttack(); end; animTimes['8265980703'] = function(_, mob) --Ice Lance if (not checkRange(50, mob.PrimaryPart) or not myRootPart) then return end; local mobRoot = mob:FindFirstChild('HumanoidRootPart'); if (not mobRoot) then return end; local distance = (myRootPart.Position - mobRoot.Position).Magnitude; if (distance < 15) then print('melee'); pingWait(0.3); elseif (distance < 20) then print('far melee'); pingWait(0.8); elseif (distance < 30) then print('far'); pingWait(0.9); elseif (distance < 40) then print('rly far'); pingWait(1); end; blockAttack(); unblockAttack(); end; -- Wind Mantra animTimes['7618754583'] = makeDelayBlockWithRange(40, 0.3); -- Gale Punch/Flame Palm animTimes['6470684331'] = makeDelayBlockWithRange(40, 0.45); -- Astral Wind animTimes['8310877920'] = makeDelayBlockWithRange(20, 0.4) -- Wind Gun animTimes['5828315760'] = makeDelayBlockWithRange(50, 0.3); -- Air Force animTimes['6466993564'] = 0.38; -- Wind Carve animTimes['9629695751'] = 0.35; --Champions Whirl Throw animTimes['10357806593'] = makeDelayBlockWithRange(15, 0.3); -- Tornado Kick animTimes['6030770341'] = function(_, mob) --Heavenly Wind pingWait(0.2); if (not checkRange(50, mob.PrimaryPart)) then return end; blockAttack(); unblockAttack(); end; animTimes['7794260173'] = function(_, mob) -- Wind Rising if (not checkRange(15, mob.PrimaryPart)) then return end; pingWait(0.4); blockAttack(); unblockAttack(); end; animTimes['9400896040'] = function(_, mob) -- Shoulder Bash local startedAt = tick(); pingWait(0.3); repeat task.wait(); until tick() - startedAt >= 5 or checkRange(20, mob.PrimaryPart); blockAttack(); unblockAttack(); end; animTimes['6017393708'] = makeDelayBlockWithRange(15, 0.3); -- Gale Lunge animTimes['6017418456'] = function(_, mob) -- Gale Lunge Launch Anim local mobRoot = mob:FindFirstChild('HumanoidRootPart'); if (not mobRoot or not checkRange(35, mobRoot)) then return end; local distance = (mobRoot.Position - myRootPart.Position).Magnitude; pingWait(0.01*distance + 0.25); blockAttack(); unblockAttack(); end; animTimes['8375571405'] = function(animationTrack, mob) -- Pressure Blast if (not checkRange(40, mob.PrimaryPart)) then return end; pingWait(0.5); blockAttack(); repeat task.wait(); until not animationTrack.IsPlaying or not checkRange(40, mob.PrimaryPart); unblockAttack(); end; -- Uppercut animTimes['11887898774'] = 0.3; animTimes['11887938902'] = 0.3; animTimes['11887876811'] = 0.3; animTimes['11887887621'] = 0.3; animTimes['11887892548'] = 0.3; animTimes['11887901212'] = 0.3; animTimes['11887874227'] = 0.3; -- Scythe animTimes['11493920418'] = 0.3; -- Slash 1 animTimes['11493923277'] = 0.3; -- Slash 2 animTimes['9597289518'] = 0.3; -- Slash 3 animTimes['11493924588'] = 0.4; -- Running Attack do -- Great Axe local function getSpeed(x) return -1*x+2.05; end; local function f(animTrack, mob) local ignoreHeavyHand = false; for i,v in next, mob.Humanoid:GetPlayingAnimationTracks() do if v.Animation.AnimationId ~= 'rbxassetid://5971953898' or not v.IsPlaying then continue; end ignoreHeavyHand = true; end local swingSpeed = getSwingSpeed(mob,ignoreHeavyHand) or 1; parryAttack({getSpeed(swingSpeed)},mob.PrimaryPart,animTrack,15); end; animTimes['5064195992'] = f; -- Slash1 animTimes['5067105317'] = f; -- Slash2 animTimes['5067090007'] = f; -- Slash3 Also running attack animTimes['9484850093'] = 0.3; -- Slash4 (Kick) animTimes['7388133473'] = 0.65; -- Critical animTimes['10768748584'] = 0.6; -- Enforcer Axe Critical animTimes['11363599835'] = function(_, mob) -- Heavy Aerial pingWait(0.4); repeat task.wait(); until checkRange(20, mob.PrimaryPart) or not _.IsPlaying; if (not _.IsPlaying) then return end; blockAttack(); unblockAttack(); end; end; animTimes['5805138186'] = 0.38; animTimes['4880830128'] = 0.35; animTimes['4880833465'] = 0.35; -- Railblade animTimes['9832721746'] = 0.4; -- Slash1 animTimes['9832724876'] = 0.4; -- Slash2 animTimes['9832727905'] = 0.4; -- Slash3 animTimes['9597289518'] = 0.3; -- Slash4 animTimes['9893133020'] = 0.4; -- Air Critical animTimes['9863424290'] = function(_, mob) -- Ground Critical task.spawn(function() pingWait(1.1); if (not _.IsPlaying or not checkRange(40, mob.PrimaryPart)) then return print('hi') end; dodgeAttack(); end); pingWait(0.5); repeat task.wait(); until not _.IsPlaying or checkRange(20, mob.PrimaryPart); if (not _.IsPlaying) then return print('timed out not playing') end; blockAttack(); unblockAttack(); end; -- Dagger do local function getSpeed(x) return -0.5*x + 1.275; end; local function f(animTrack, mob) local swingSpeed = getSwingSpeed(mob) or 1; parryAttack({getSpeed(swingSpeed)},mob.PrimaryPart,animTrack,15); end; animTimes['7627854272'] = f; -- Slash1 animTimes['7627889074'] = f; -- Slash2 animTimes['5950080662'] = 0.3; -- Slash4 (Kick) animTimes['5063313656'] = 0.39; -- Running Attack animTimes['7576614609'] = 0.39; -- Aerial Stab end; do --Spear Timings local function getSpeed(x) return -1*x+2.07; end; local function f(animTrack, mob) local swingSpeed = getSwingSpeed(mob) or 1; parryAttack({getSpeed(swingSpeed)},mob.PrimaryPart,animTrack,15); end; animTimes['7626771915'] = f; -- One Hand Slash 3 animTimes['7627049402'] = f; -- One Hand Slash 4 animTimes['7627558238'] = f; -- Two Hand Slash 2 animTimes['7627372304'] = f; -- Two Hand Slash 3 end; animTimes['5827250000'] = 0.35; -- Running Attack One Handed animTimes['5827423063'] = 0.35; -- Slash1 animTimes['7576748728'] = 0.35; -- Aerial Stab -- Crazy Slot animTimes['7004327185'] = 0.3; --Crazy Slot Sword Mantra animTimes['7003448248'] = 0.6; --Crazy Slot Greatsword Mantra animTimes['7007372121'] = 1.8; --Crazy Slot Greataxe Mantra animTimes['7007974914'] = function(_,mob)--Crazy Slot Gun Mantra parryAttack({0.2,0.4,0.4},mob.PrimaryPart,_,20) end; animTimes['7005236296'] = makeDelayBlockWithRange(35,0.5); --Crazy Slot Dagger Mantra do -- Greatsword local function getSpeed(x) return -1*x+2.05; end; local function f(animTrack, mob) local swingSpeed = getSwingSpeed(mob) or 1; parryAttack({getSpeed(swingSpeed)},mob.PrimaryPart,animTrack,15); end; animTimes['12071495751'] = makeDelayBlockWithRange(10,0.5); --Petra Crit Start animTimes['12071557016'] = function(_, mob) -- Petra Critical repeat task.wait(); until not _.IsPlaying or checkRange(20, mob.PrimaryPart); if (not _.IsPlaying) then return print('timed out not playing') end; blockAttack(); unblockAttack(); end; animTimes['12071942369'] = 0.6; -- Petra Critical (Pt2) animTimes['6675698010'] = f; animTimes['6675703249'] = f; animTimes['10258479464'] = 0.65; -- DarkSteel Critical animTimes['10053070573'] = function(animTrack, mob) --Crescent Cleaver (Timing is a little bit better but still inaccurate due to range) local root = mob:FindFirstChild('HumanoidRootPart'); if (not root) then return end; local distance = (myRootPart.Position - root.Position).Magnitude; local t = math.max(0.7, 0.03*distance + 0.5); pingWait(t); if (not checkRange(20, root)) then return end; blockAttack(); unblockAttack(); end; -- Firstlight animTimes['13241958217'] = f; animTimes['13242083070'] = f; end; -- Sword do local function getSpeed(x) return -1*x+2.1; end; local function f(animTrack, mob) local swingSpeed = getSwingSpeed(mob) or 1; parryAttack({getSpeed(swingSpeed)},mob.PrimaryPart,animTrack,15); end; animTimes['7600450739'] = f; -- Slash1 animTimes['7600485223'] = f; -- Slash2 animTimes['7600160919'] = f; -- Slash3 animTimes['7600224169'] = f; -- Slash4 end; animTimes['8095864854'] = 0.55; -- Special Critical (Serpent's Edge) -- Curve Blade Of Winds animTimes['12106091136'] = 0.3; -- Slash1 animTimes['12106093579'] = 0.3; -- Slash2 animTimes['12106095892'] = 0.3; -- Slash3 -- running attack (we use db) animTimes['4699358112'] = 0.36; animTimes['7827886914'] = 0.47; -- Katana critical animTimes['7351158603'] = 0.35; -- Spear critical animTimes['7318254065'] = 0.67; -- Sword critical animTimes['7350770431'] = 0.45; -- Dagger critical animTimes['7367818208'] = 0.73; -- Hammer critical animTimes['12921226261'] = 0.5; -- Sacred Hammer Crit animTimes['9209255758'] = 0.3; -- Whailing Knife Critical -- Karate (Way of Navae) do local function f(animTrack, mob) parryAttack({0.225}, mob.PrimaryPart, animTrack, 15, true); end; animTimes['6063188218'] = f; -- Slash 1 animTimes['7616407967'] = f; -- Slash 2 animTimes['6063195211'] = f; -- Slash 3 end; -- Jus Karita animTimes['8278926990'] = 0.25; -- Slash1 animTimes['8278929677'] = 0.25; -- Slash2 animTimes['8278931393'] = 0.25; -- Slash3 animTimes['9597289518'] = 0.3; -- Slash4 (Kick) animTimes['8278933540'] = 0.25; -- Slash4 (Kick) animTimes['7391446645'] = 0.5; -- Kick animTimes['8295145565'] = 0.4; -- Kick Ground? animTimes['8367730650'] = 0.3; -- Running Attack animTimes['8194213529'] = 0.3; -- Aerial Stab animTimes['10168663111'] = function(animationTrack,mob) --Tacet Drop Kick parryAttack({0.3},mob.PrimaryPart,animationTrack,30); end -- Legion Kata do local function f(animTrack, mob) parryAttack({0.2}, mob.PrimaryPart, animTrack, 20, true); end; animTimes['8161039359'] = f; -- Slash 1 animTimes['8161043368'] = f; -- Slash 2 animTimes['8161044711'] = f; -- Slash 3 animTimes['8161094751'] = 0.3; -- Slash4 (Kick) animTimes['8169914770'] = 0.25; --This timing is prob wrong prob ius 0.3 but idk for duke end; -- Lantern Kata animTimes['11186652658'] = 0.3; -- Slash 1 animTimes['11186654931'] = 0.3; -- Slash 2 animTimes['11186656574'] = 0.3; -- Slash 3 animTimes['9597289518'] = 0.3; -- Slash 4 -- Mace/Club (we use db) animTimes['5805183957'] = 0.36; -- Slash1 animTimes['5805191624'] = 0.41; -- Slash2 animTimes['5805194816'] = 0.4; -- Slash3 animTimes['7599410106'] = 0.52; -- Club critical -- Rapier animTimes['8249175106'] = 0.32; -- Slash animTimes['8249177669'] = 0.32; -- Slash animTimes['8249271040'] = 0.32; -- Critical -- Enforcer Blade (we use db) animTimes['6607519294'] = 0.45; animTimes['6607538047'] = 0.49; animTimes['6669352471'] = 0.39; -- Widow animTimes['6428519131'] = function(anim, mob) -- Widow Left Swing parryAttack({0.43}, mob.PrimaryPart, anim, 100, true); end; animTimes['6428525211'] = function(anim, mob) -- Widow Doublestab parryAttack({0.3}, mob.PrimaryPart, anim, 100); end; animTimes['6428514850'] = function(anim, mob) -- Widow RightSwing parryAttack({0.43}, mob.PrimaryPart, anim, 100, true); end; animTimes['6428530032'] = function(_, mob) -- Widow Spit if (not checkRange(100, mob.PrimaryPart)) then return end; pingWait(0.6); dodgeAttack(); end; animTimes['6428533082'] = function(_, mob) -- Widow Bite if (not checkRange(100, mob.PrimaryPart)) then return end; pingWait(0.4); dodgeAttack(); end; -- Primadon animTimes['8940731625'] = function(_, mob) --Scream if (not checkRange(100, mob.PrimaryPart)) then return end; pingWait(0.75); dodgeAttack(); end; animTimes['8365199156'] = function(_, mob) -- Mid Swipe (Punch) if (not checkRange(100, mob.PrimaryPart)) then return end pingWait(0.5/_.Speed); blockAttack(); task.wait(); unblockAttack(); end; animTimes['9225081967'] = function(_, mob) -- Swipe if (not checkRange(100, mob.PrimaryPart)) then return end pingWait(0.6 / _.Speed) blockAttack(); task.wait(); unblockAttack(); end; animTimes['9225086332'] = function(_, mob) -- Grab if (not checkRange(100, mob.PrimaryPart)) then return end pingWait(0.6 / _.Speed); print('we dodge', _.TimePosition, _.Speed); dodgeAttack(true); end; animTimes['6438111139'] = function(_, mob) -- Punt if (not checkRange(100, mob.PrimaryPart)) then return end pingWait(0.75 / _.Speed); dodgeAttack(); end; animTimes['9225098544'] = function(_, mob) --Stomp parryAttack({0.75}, mob.PrimaryPart, _, 100, true); end; animTimes['6432260013'] = function(anim, mob) -- Triple Stomp parryAttack({0.8, 0.775, 0.75}, mob.PrimaryPart, anim, 100, true); end; -- Avatar (Ethiron) animTimes['11508725111'] = function(_, mob) parryAttack({1.5}, mob.PrimaryPart, _, 400, true); end; -- crabbo animTimes['8176091986'] = makeDelayBlockWithRange(50, 1); --Double slam animTimes['7942002115'] = makeDelayBlockWithRange(50, 0.4); --Probably double swipe animTimes['7938093143'] = function(_, mob) -- grab if (not checkRange(50, mob.PrimaryPart)) then return end; pingWait(0.5); dodgeAttack(); end; animTimes['7961600084'] = function(_,mob) --Jump attack if not checkRange(150,mob.PrimaryPart) then return; end repeat task.wait(); until not _.IsPlaying or checkRange(15,mob.PrimaryPart) if not _.IsPlaying then return; end dodgeAttack(); end; --Guns do local function getSpeed(x) return -0.5*x + 1.275; --Should be -0.5*x + 1.05 end; local function f(animTrack, mob) local swingSpeed = getSwingSpeed(mob) or 1; parryAttack({getSpeed(swingSpeed)},mob.PrimaryPart,animTrack,15); end; animTimes['6437665734'] = f; -- Primary Shot animTimes['6432920452'] = f; -- Offhand shot animTimes['7565307809'] = f; -- Aerial Shot animTimes['8172871094'] = makeDelayBlockWithRange(20, 0.3); -- Rifle Spear Crit end; animTimes['9928429385'] = 0.3; -- Rifle animTimes['9928485641'] = 0.3; -- Rifle animTimes['9930447958'] = 0.3; -- Rifle animTimes['9928485641'] = 0.3; -- Rifle animTimes['9930618934'] = 0.3; -- Rifle animTimes['11468287607'] = 0.4; -- Shadow Hero Blade Critical animTimes['11312302005'] = 0.4; -- Wind Hero Blade Critical animTimes['11308969885'] = 0.4; --Flame Hero Blade Critical animTimes['10904625331'] = 0.4; --Thunder Hero Blade Critical animTimes['11183196198'] = makeDelayBlockWithRange(28,0.4); --Frost Hero Blade Critical animTimes['12108376249'] = 0.3; -- Eclipse kick animTimes['9212883524'] = 0.6; -- Halberd Critical animTimes['6415074870'] = function(_, mob) -- Shadow Gun if (not checkRange(60, mob.PrimaryPart)) then return end; pingWait(0.5); blockAttack(); task.wait(0.3); unblockAttack(); end; -- Golem animTimes['6500704554'] = function(_, mob) -- Upsmash (Dodge) if (not checkRange(50, mob.PrimaryPart)) then return end; pingWait(0.4); dodgeAttack(); end; animTimes['6501497627'] = function(animationTrack, mob) -- Cyclone if (not mob.PrimaryPart) then return end; pingWait(3.3); repeat task.wait(0.1); if (not checkRange(50, mob.PrimaryPart)) then print('mob too far away :('); _G.canAttack = true; continue; end; _G.canAttack = false; print(animationTrack.IsPlaying, animationTrack.Parent); blockAttack(); unblockAttack(); until not animationTrack.IsPlaying or not mob.Parent; _G.canAttack = true; end; animTimes['6499077558'] = makeDelayBlockWithRange(50, 0.4); -- Double Smash animTimes['6501044846'] = makeDelayBlockWithRange(50, 0.5); -- Stomp -- Ice Mantra animTimes['5808939025'] = function(_, mob) -- Ice Eruption if (not checkRange(40, mob.PrimaryPart)) then return end; pingWait(0.35); dodgeAttack(); end; animTimes['5865907089'] = function(_, mob) -- Glacial Arc if (not checkRange(40, mob.PrimaryPart)) then return end; pingWait(0.6); blockAttack(); unblockAttack(); end; animTimes['7612017515'] = makeDelayBlockWithRange(50, 0.3); -- Ice Blade animTimes['7543723607'] = 0.7; -- Ice Spike animTimes['7599113567'] = 0.6; -- Ice Dagger animTimes['6054920207'] = 0.3; -- Crystal Impale -- Shadow animTimes['9470857690'] = makeDelayBlockWithRange(40, 0.2); -- Shade Bringer animTimes['9359697890'] = 0.3; -- Shadow Devour animTimes['11959603858'] = 0.9; -- Shadow Stomp animTimes['11468287607'] = 0.4; -- Shadow Sword animTimes['9149348937'] = function(_, mob) -- Rising Shadow local distance = (mob.HumanoidRootPart.Position - myRootPart.Position).Magnitude; if (distance > 200) then return end; pingWait(0.4); local ranAt = tick(); print(distance); if (distance > 8) then repeat for _, v in next, workspace.Thrown:GetChildren() do if (v.Name == 'TRACKER' and IsA(v, 'BasePart')) then if(not checkRangeFromPing(v, 5, 10)) then continue end; print('block'); blockAttack(); unblockAttack(); break; end; end; task.wait(); until tick() - ranAt > 3.5; else blockAttack(); unblockAttack(); end; end; animTimes['6318273143'] = function(_, mob) -- Shadow Assault if (not checkRange(80, mob.PrimaryPart) or not myRootPart) then return end; local mobRoot = mob:FindFirstChild('HumanoidRootPart'); if (not mobRoot) then return end; local distance = (mobRoot.Position - myRootPart.Position).Magnitude; pingWait(0.3); pingWait(distance/60); blockAttack(); unblockAttack(); end; animTimes['8018881257'] = function(_, mob) -- Shadow eruption for i = 1, 2 do task.spawn(function() pingWait(i*0.33); if (not checkRange(30, mob.PrimaryPart)) then return end; blockAttack(); unblockAttack(); end); end; end; animTimes['7620630583'] = function(_, mob) -- Shadow Roar repeat pingWait(0.2); if (not checkRange(40, mob.PrimaryPart)) then continue end; task.spawn(function() blockAttack(); unblockAttack(); end); until not _.IsPlaying; end; animTimes['6038858570'] = function(animationTrack,mob) -- Darkblade if (not checkRange(80, mob.PrimaryPart)) then return end local distance = (myRootPart.Position - mob.PrimaryPart.Position).Magnitude; if distance < 5 then pingWait(0.37); blockAttack(); unblockAttack(); return; end repeat task.wait(); until not animationTrack.IsPlaying or checkRange(15,mob.PrimaryPart); if not animationTrack.IsPlaying then return; end blockAttack(); unblockAttack(); end -- snow golem animTimes['8131612979'] = function(_, mob) -- groundPunch if (not checkRange(60, mob.PrimaryPart)) then return end pingWait(0.7); dodgeAttack(); end; animTimes['8131156119'] = function(_, mob) -- Punt if (not checkRange(60, mob.PrimaryPart)) then return end pingWait(0.2) dodgeAttack(); end; animTimes['8130745441'] = makeDelayBlockWithRange(40, 0.3); -- Swing1 animTimes['8130778356'] = makeDelayBlockWithRange(40, 0.3); -- Swing2 animTimes['8131374542'] = makeDelayBlockWithRange(100, 0.7); -- Air cutter -- squiddo (we use db) animTimes['6916513795'] = 0.225; animTimes['6916546485'] = 0.225; animTimes['6916545890'] = 0.225; -- enforcer (we use db) animTimes['7018046790'] = makeDelayBlockWithRange(50, 0.45); -- slash 1 animTimes['7018083796'] = makeDelayBlockWithRange(50, 0.45); -- slash 2 animTimes['7019686291'] = makeDelayBlockWithRange(50, 0.45); -- kick animTimes['7019018522'] = function(animationTrack, mob) -- spin print('got spin to win'); repeat pingWait(0.1); if (not checkRange(30, mob.PrimaryPart)) then print('mob too far away :('); continue; end; blockAttack(); unblockAttack(); until not animationTrack.IsPlaying; end; -- Hive Mech animTimes['11834551880'] = function(_,mob) --Roguemech upsmash if not checkRange(40,mob.PrimaryPart) then return; end pingWait(0.8); dodgeAttack(); end; animTimes['11834549387'] = 0.5; --Roguemech Stomp animTimes['11834545925'] = 0.3; --Roguemech Baragge Stomp animTimes['11867360757'] = makeDelayBlockWithRange(40,0.7); --Roguemech GroundPound -- crocco (we use db) animTimes['8226933122'] = function(_, mob) -- Triple bite parryAttack({0.44, 0.44, 0.44}, mob.PrimaryPart, _, 30); end; animTimes['10976633163'] = function(_, mob) -- Crocco Dig Move pingWait(0.7); local ranAt = tick(); repeat task.wait(); print(mob.HumanoidRootPart.Transparency); until checkRange(10, mob.HumanoidRootPart) or mob.HumanoidRootPart.Transparency == 0; if (tick() - ranAt > 8) then return print('not playing') end; print('parry!'); blockAttack(); unblockAttack(); end; animTimes['8227583745'] = function(_, mob) --Double shlash Crocco parryAttack({0.3, 0.8}, mob.PrimaryPart, _, 30); end; animTimes['8228293862'] = function(_, mob) -- Breath if (not checkRange(75, mob.PrimaryPart)) then return end; pingWait(0.35); dodgeAttack(); end; animTimes['8229868275'] = function(_, mob) -- Dig if (not checkRange(30, mob.PrimaryPart)) then return end; pingWait(2); dodgeAttack(); end; animTimes['8227878518'] = function(_, mob) -- Tail parryAttack({0.65}, mob.PrimaryPart, _, 30); end; -- Black Tresher animTimes['11095471496'] = 0.4; -- Crocco Flip animTimes['9474995715'] = function(_,mob)-- CRocco Breath if not checkRange(20,mob.PrimaryPart) then return; end task.wait(0.2); dodgeAttack(); end; -- sharko (we use db) animTimes['5117879514'] = function(animTrack, mob) -- Swipe parryAttack({0.37}, mob.PrimaryPart, animTrack, 40); end; animTimes['11710417615'] = function(animationTrack, mob) --Coral Attack -- sharko could do aoe attack if lots of player check that local target = mob:FindFirstChild('Target'); target = target and target.Value; if (target ~= LocalPlayer.Character) then return end; pingWait(0.4); blockAttack(); repeat task.wait(); until not animationTrack.IsPlaying; unblockAttack(); end; animTimes['10739102450'] = function(_, mob) -- Cortal Attack But for Player parryAttack({0.4}, mob.PrimaryPart, _, 35); end; animTimes['5121733951'] = function(_, mob) -- sharko double swipe parryAttack({0.43,0.58},mob.PrimaryPart,_,40); end; animTimes['11710290503'] = function(_, mob) -- sharko punt if (not checkRange(40, mob.PrimaryPart)) then return end; pingWait(0.35) dodgeAttack(); end; animTimes['9357410713'] = function(_,mob) -- Mechalodant Beam pingWait(1.6); if not checkRange(80,mob.PrimaryPart) then return; end blockAttack(); unblockAttack(); end animTimes['9356892933'] = function(animationTrack, mob) -- Mechalodant GunFire local target = mob:FindFirstChild('Target'); target = target and target.Value; if (target ~= LocalPlayer.Character) then return end; pingWait(0.4); blockAttack(); repeat task.wait(); until not animationTrack.IsPlaying; unblockAttack(); end; animTimes['11710316011'] = function(_,mob) -- Sharko Water bite pingWait(0.5); if not checkRange(50,mob.PrimaryPart) then return; end dodgeAttack(); end; animTimes['9903304018'] = function(_, mob) --Teleport Move pingWait(0.5); if (not checkRange(20, mob.PrimaryPart)) then return print('too far away') end; warn('block'); dodgeAttack(); end; --Ferryman local teleportedAt = tick(); local firstAnim = tick(); animTimes['5968288116'] = function(_, mob) -- Ferryman Teleport Attack (Doesn't work in second phase...) local target = mob:FindFirstChild('Target'); if (not target or target.Value ~= LocalPlayer.Character) then return warn('Ferryman Dash: Target is not LocalPlaye') end; if (mob.Humanoid.Health/mob.Humanoid.MaxHealth)*100 >= 50 then if tick()-teleportedAt > 2 then if tick() - firstAnim > 3 then firstAnim = tick(); return; end teleportedAt = tick(); parryAttack({0.8},mob.PrimaryPart,_,1000,true) else teleportedAt = tick(); parryAttack({0.2},mob.PrimaryPart,_,1000,true) end else if tick()-teleportedAt > 2 then if tick() - firstAnim > 3 then firstAnim = tick(); return; end teleportedAt = tick(); parryAttack({0.8},mob.PrimaryPart,_,1000,true) else teleportedAt = tick(); parryAttack({0.1},mob.PrimaryPart,_,1000,true) end end end; -- Owl animTimes['7639648215'] = makeDelayBlockWithRange(40, 0.3); -- Swipe (Idk) animTimes['7639988883'] = makeDelayBlockWithRange(40, 0.6); -- Slow Swipe (Ok) animTimes['7675544287'] = function(_, mob) -- Grab local target = mob:FindFirstChild('Target'); target = target and target.Value; if (target ~= LocalPlayer.Character) then return warn('owl grab: target is not localplayer') end; pingWait(0.35); dodgeAttack(); end; animTimes['7673097597'] = function(_, mob) -- Owl rush (spinning attack) local target = mob:FindFirstChild('Target'); target = target and target.Value; if (target ~= LocalPlayer.Character) then return print('owl spin target is not localplayer') end; pingWait(0.37); dodgeAttack(); end; -- Mud Skipper animTimes['11573034823'] = 0.22; animTimes['11572468462'] = 0.22; -- Lion Fish animTimes['5680585677'] = function(_, mob) if (not checkRange(70, mob.PrimaryPart)) then return print('lion fish beam triple bite too far away') end; task.spawn(function() pingWait(0.4); blockAttack(); unblockAttack(); end); task.spawn(function() pingWait(1.1); blockAttack(); unblockAttack(); end); task.spawn(function() pingWait(1.8); blockAttack(); unblockAttack(); end); end; animTimes['6372560712'] = function(animTrack, mob) -- FishBeam local target = mob:FindFirstChild('Target'); target = target and target.Value; if (target ~= LocalPlayer.Character) then return print('lion fish beam target not set to player') end; local wasUp = false; repeat local _, _, z = mob:GetPivot():ToOrientation(); if (z < -1.7 and not wasUp) then wasUp = true; warn('rised up'); elseif (z > -1.5 and wasUp) then warn('rised down', animTrack.TimePosition, animTrack.Speed); dodgeAttack(); break; end; task.wait(); until not animTrack.IsPlaying or not mob.Parent; end; -- Duke animTimes['8285321158'] = function(_, mob) parryAttack({0.87},mob.PrimaryPart,_,34) print("---------------WIND BALL SHOT----------------") end; animTimes['8285534401'] = function(_, mob) --Wind Stomp thing pingWait(0.5); if (not checkRange(28, mob.PrimaryPart)) then return end; dodgeAttack(); print("---------------Wind stomp") end; animTimes['8290626574'] = function(_, mob) --Wind Stomp 2 pingWait(0.7); if (not checkRange(118, mob.PrimaryPart)) then return end; dodgeAttack(); print("---------------Wind Stomp 2",tick()); end; animTimes['8285638571'] = function(_, mob) --Downward punch? pingWait(0.1); if (not checkRange(47, mob.PrimaryPart)) then return end; dodgeAttack(); print("---------------Downward Punch") end; animTimes['8286153000'] = function(_, mob) --Wind Arrow parryAttack({0.4},mob.PrimaryPart,_,34) print("---------------Wind Arrow") end; animTimes['8290899374'] = function(_, mob) --Levitate pingWait(0.8); if (not checkRange(28, mob.PrimaryPart)) then return end; dodgeAttack(); print("---------------Levitate") end; animTimes['8294560344'] = function(_, mob) --Spirit Bomb? pingWait(2.1); if (not checkRange(47, mob.PrimaryPart)) then return end; dodgeAttack(); print("---------------Spirint Bomb") end; -- Car Buncle animTimes['9422296675'] = 0.8; -- Leap animTimes['9422278968'] = function(_, mob) -- Flail if (not checkRange(100, mob.PrimaryPart)) then return end; pingWait(0.9); repeat task.wait(); if (not checkRange(40, mob.PrimaryPart)) then continue end; blockAttack(); unblockAttack(); pingWait(0.4); until not _.IsPlaying or not mob.Parent; end; -- Boneboy (Bonekeeper) animTimes['9681905891'] = function(_, mob) -- Charge Prep print('charge anim star!t'); pingWait(0.8); repeat task.wait(); until checkRange(30, mob.PrimaryPart) or not _.IsPlaying; print('charge!'); dodgeAttack(); end; animTimes['9681421310'] = function(_, mob) print('sweep1'); parryAttack({0.6}, mob.PrimaryPart, _, 30); end; animTimes['9710538334'] = function(_, mob) print('choke start'); if (not checkRange(30, mob.PrimaryPart)) then return end; pingWait(0.3); dodgeAttack(); unblockAttack(); end; -- Chaser animTimes['10099861170'] = makeDelayBlockWithRange(70, 0.8); -- The Slam (end part) local effectsList = {}; -- Silent heart uppercut effectsList.Mani = function(effectData) if (effectData.target ~= myRootPart.Parent) then return end; blockAttack(); unblockAttack(); end; effectsList.ManiWindup = function(effectData) if((effectData.pos - myRootPart.Position).Magnitude >= 45) then return print('too far'); end; pingWait(0.3); blockAttack(); unblockAttack(); end; effectsList.EthironPointSpikes = function(effectData) pingWait(0.5); for _, point in next, effectData.points do if(checkRange(20, point.pos)) then dodgeAttack(); break; end; end; end; effectsList.EnforcerPull = function(effectData) if (string.find(effectData.char.Name, '.enforcer')) then return end; if (effectData.targ ~= LocalPlayer.Character) then return end; blockAttack(); unblockAttack(); end; effectsList.Perilous = function(effectData) if (not string.find(effectData.char.Name, '.chaser')) then return end; pingWait(0.5); dodgeAttack(); end; effectsList.DisplayThornsRed = function(effectData) -- Umbral Knight if (effectData.Character ~= LocalPlayer.Character) then return print('Umbral Knight wasnt on me') end; blockAttack(); unblockAttack(); end; effectsList.DisplayThorns = function(effectData) --Providence Thorns if effectData.Character ~= LocalPlayer.Character then return print('Providence Hit wasnt on me') end; pingWait(effectData.Time-effectData.Window); blockAttack(); unblockAttack(); end; effectsList.FireHit2 = function(effectData) if effectData.echar ~= LocalPlayer.Character then return print('Fire Hit wasnt on me'); end pingWait(1); blockAttack(); unblockAttack(); end effectsList.GolemLaserFire = function(effectData) if (not checkRange(15, effectData.aimPos)) then return print('Golem laser: Too far away') end; print('DA DODGIES'); dodgeAttack(); end; effectsList.WindCarve = function(effectData) if (effectData.char == LocalPlayer.Character) then return; end if (effectData.command ~= 'startAttack' or not checkRange(17, effectData.char.PrimaryPart)) then return end; local startedAt = tick(); repeat task.spawn(function() blockAttack(); unblockAttack(); end); task.wait(0.2); until tick() - startedAt > effectData.dur+0.5; table.foreach(effectData, warn); end; -- Fire SongSeeker effectsList.FireSword = function(effectData) if (not checkRange(25, effectData.Character.PrimaryPart)) then return print('Fire Sword: Too far away') end; if (effectData.Character == LocalPlayer.Character) then return end; if (effectData.BlueFlame) then return; end pingWait(0.55); print('we parry it!'); blockAttack(); unblockAttack(); end; effectsList.FireSwordBlue = function(effectData) if (not checkRange(25, effectData.Character.PrimaryPart)) then return print('Fire Sword: Too far away') end; if (effectData.Character == LocalPlayer.Character) then return end; pingWait(0.6); print('we parry it!'); blockAttack(); unblockAttack(); end; effectsList.FireDash = function(effectData) if (not checkRange(50, effectData.Character.PrimaryPart)) then return print('Fire Dash: Too far away') end; if (effectData.Character == LocalPlayer.Character) then return end; table.foreach(effectData, warn); print('OOOOMG EPICO'); blockAttack(); unblockAttack(); end; effectsList.fireRepulseWindup = function(effectData) if (not checkRange(50, effectData.char.PrimaryPart)) then return print('Fire Repulse Wind Up: Too far away') end; if (effectData.char == LocalPlayer.Character) then return end; pingWait(0.8); blockAttack(); pingWait(1); unblockAttack(); end; effectsList.FireSlashSpin = function(effectData) -- RisingFlame if (not checkRange(20, effectData.Character.PrimaryPart)) then return print('Fire Slash Spin: Too far away') end; if not (effectData.pos) then return print("Ignoring Fire Spin"); end if (effectData.Character == LocalPlayer.Character) then return end; blockAttack(); unblockAttack(); end; -- Wind Song Seeker effectsList.WindSword = function(effectData) if (not checkRange(25, effectData.Character.PrimaryPart)) then return print('Wind Sword: Too far away') end; if (effectData.Character == LocalPlayer.Character) then return end; if (effectData.Time == 1.1) then return end; -- Gale Lunge wind sword (hopefully dont break anything) pingWait(0.4); blockAttack(); unblockAttack(); end; effectsList.OwlDisperse = function(effectData) local target = effectData.Character and effectData.Character:FindFirstChild('Target'); if (not target or target.Value ~= LocalPlayer.Character) then return end; print('owl disperse!'); local startedAt = tick(); local duration = effectData.Duration; task.wait(duration/3); while (tick() - startedAt <= duration+0.3) do task.spawn(function() blockAttack(); unblockAttack(); end); task.wait(0.2); end; print('owl disperse finished'); end; effectsList.ThrowWeaponLocal = function(data) --Stormbreaker Recall local obj = data.Primary; if (not obj) then return end; repeat task.wait() until obj.Anchored; repeat task.wait(); until not obj.Parent or checkRange(20, obj); if not obj.Parent then return; end blockAttack(); unblockAttack(); end; -- Vent effectsList.BlueStun = function(effectData) if (effectData.CH == LocalPlayer.Character) then return; end if (not checkRange(20,effectData.CH.PrimaryPart)) then return; end if (not library.flags.parryVent) then return end; blockAttack(); unblockAttack(); end; if (debugMode) then getgenv().effectsList = effectsList; getgenv().pingWait = pingWait; end; animTimes['11889580367'] = function(_, mob) --Stormbreaker Close Range if (not checkRange(20, mob.PrimaryPart)) then return end; pingWait(0.6); blockAttack(); task.wait(0.2); unblockAttack(); end; _G.blacklistedNames = {'chest', 'ReducedDamage','MoveStack','BallShake','IceEruption','DigHide','FadeModel','GaleLeap4','SetModelCFrame','FallingBoulder','waterdash','WallCollisionKnockdown','KickTrail','MovementLines','WallCollisionBigSmall','GroundSmash', 'BigBlockParry', 'minisplash', 'roll', 'DamageBody', 'BlueEffect', 'Parry', 'ClearDamageBody', 'NoStun', 'StopDodge', 'WindTrails', 'RedParry', 'WallCollision', 'BlockParry', 'RedEffect', 'NPCGesture', 'CancelGesture', 'LightningDodger2', 'newLightningEruptionBoss'}; local function getCaster(data) if not data then return; end local caster; for _,obj in next, data do if typeof(obj) ~= "Instance" or obj.Parent ~= workspace.Live or obj == LocalPlayer.Character then continue; end return obj; end return caster; end ReplicatedStorage.Requests.ClientEffect.OnClientEvent:Connect(function(effectName, effectData) if (not library.flags.autoParry or table.find(_G.blacklistedNames, effectName)) then return end; local caster = getCaster(effectData); if (caster) then local autoParryMode = library.flags.autoParryMode; local isPlayer = Players:FindFirstChild(caster.Name) if (not autoParryMode.All) then --If not Parry Guild and its a player and hes in your guild do nothing if (not autoParryMode.Guild and isPlayer and Utility:isTeamMate(isPlayer)) then return; end --If Parry Mobs and its a player and they dont parry players then do nothing if (autoParryMode.Mobs and isPlayer and not autoParryMode.Players) then return end; --If Parry Player and its not a player and don't parry mobs then do nothing if (autoParryMode.Players and not isPlayer and not autoParryMode.Mobs) then return; end; --If Parry Guild And Its a Player and its not guild member then do nothing if (autoParryMode.Guild and isPlayer and not Utility:isTeamMate(isPlayer)) then return; end end; end; local f = effectsList[effectName]; if (f) then warn('Using custom effectFunc for', effectName); f(effectData, effectName); elseif (getgenv().UNKNOWN_EFFECT_LOG) then print('Unknown effect', effectName); end; end); local parryMaid = Maid.new(); local autoParryProxy = 0; _G.canAttack = true; -- Get Chaser do local chaser; function functions.getChaser() if (not chaser) then for _, npc in next, workspace.Live:GetChildren() do if (npc.Name:find('.chaser')) then chaser = npc; break; end; end; end; return chaser; end; end; function functions.autoParry(toggle) autoParryProxy += 1; if (not toggle) then maid.autoParryOnNewCharacter = nil; maid.autoParryInputDebug = nil; maid.autoParryOrb = nil; maid.autoParrySlotBall = nil; maid.autoParryLayer2DescAdded = nil; maid.autoParryOnEffectAddd = nil; parryMaid:DoCleaning(); return; end; if (debugMode) then getgenv().animTimes = animTimes; getgenv().blockAttack = blockAttack; getgenv().unblockAttack = unblockAttack; getgenv().makeDelayBlockWithRange = makeDelayBlockWithRange; getgenv().checkRange = checkRange; getgenv().dodgeRemote = dodgeRemote; getgenv().dodgeAttack = dodgeAttack; end; local lastUsedMantraAt = 0; local lastUsedMantra; -- Trial of one orb auto parry if (game.PlaceId == 8668476218) then if (isLayer2) then local chaserBeamDebounce = true; maid.autoParryLayer2DescAdded = workspace.DescendantAdded:Connect(function(obj) if (obj.Name == 'BloodTendrilBeam') then -- Chaser Beam if (not chaserBeamDebounce) then return end; chaserBeamDebounce = false; _G.canAttack = false; task.delay(0.1, function() chaserBeamDebounce = true; end); pingWait(0.55); blockAttack(); unblockAttack(); _G.canAttack = true; elseif (obj.Name == 'SpikeStabEff') then -- Chaser Explosion _G.canAttack = false; pingWait(0.6); if (not checkRange(20, obj)) then _G.canAttack = true; return end; print(obj, 'got added', obj:GetFullName()); blockAttack(); unblockAttack(); _G.canAttack = true; elseif (obj.Name == 'ParticleEmitter3' and string.find(obj:GetFullName(), 'avatar')) then -- Avatar Beam pingWait(0.75); local avatar = obj.Parent.Parent.Parent; local target = avatar and avatar:FindFirstChild('Target'); if (target and target.Value ~= LocalPlayer.Character) then return end; _G.canAttack = false; warn('AVATAR BEAM: now we parry'); repeat blockAttack(); unblockAttack(); task.wait(0.1); until not obj.Parent or not obj.Enabled; _G.canAttack = true; elseif (obj.Name == 'GrabPart') then -- Avatar Blind Ball repeat task.wait(); until not obj.Parent or checkRange(20, obj); if (not obj.Parent) then return end; dodgeAttack(); end end); else local lastParryAt = 0; local spawnedAt; maid.autoParryOrb = RunService.RenderStepped:Connect(function(dt) if (not myRootPart) then return end; local myPosition = myRootPart.Position; for _, v in next, workspace.Thrown:GetChildren() do if (not spawnedAt) then spawnedAt = tick(); end; if (v.Name == 'ArdourBall2' and tick() - spawnedAt >= 3) then local distance = (myPosition - v.Position).Magnitude; if (distance <= 15 and tick() - lastParryAt >= 0.1) then lastParryAt = tick(); blockAttack(true); unblockAttack(); break; end; end; end; end); end; end; -- firstlight = firesworda -- Lesser Angel Air Spear Attack maid.autoParrySlotBall = workspace.Thrown.ChildAdded:Connect(function(obj) task.wait(); if (not myRootPart) then return end; if (obj.Name == 'SlotBall') then repeat task.wait(); until (obj.Position - myRootPart.Position).Magnitude <= 20 or not obj.Parent; if (not obj.Parent) then return warn('Object got destroyed'); end; blockAttack(); unblockAttack(); elseif (obj.Name == 'BoulderProjectile' and (myRootPart.Position - obj.Position).Magnitude < 500) then repeat task.wait() until (obj.Position - myRootPart.Position).Magnitude <= 30 or not obj.Parent; if (not obj.Parent) then return end; dodgeAttack(); elseif (obj.Name == 'SpearPart' and (myRootPart.Position - obj.Position).Magnitude < 600) then -- Grand Javelin Long Range if (myRootPart.Position - obj.Position).Magnitude <= 35 then return; end repeat task.wait() until (obj.Position - myRootPart.Position).Magnitude <= 80 or not obj.Parent; if (not obj.Parent) then return end; blockAttack(); unblockAttack(); elseif (obj.Name == 'StrikeIndicator' and (myRootPart.Position - obj.Position).Magnitude < 10) then pingWait(0.2); blockAttack(); unblockAttack(); elseif (obj.Name == 'WindSlashProjectile' and (myRootPart.Position - obj.Position).Magnitude < 200) then if (myRootPart.Position - obj.Position).Magnitude <= 10 then return; end repeat task.wait() until checkRange(30, obj) or not obj.Parent; if (not obj.Parent) then return end; blockAttack(); unblockAttack(); elseif (obj.Name == 'IceShuriken' and checkRange(300, obj) and not (lastUsedMantra == 'ForgeIce' and tick() - lastUsedMantraAt < 1)) then print(tick() - lastUsedMantraAt, lastUsedMantra); repeat task.wait(); until not obj.Parent or checkRange(20, obj); if (not obj.Parent) then return end; print('parry'); blockAttack(); unblockAttack(); elseif (obj.Name == 'IceDagger' and not checkRange(20, obj)) then local rocketPropulsion = obj:WaitForChild('RocketPropulsion', 10); if (not rocketPropulsion or rocketPropulsion.Target ~= myRootPart) then return end; repeat task.wait(); until not obj.Parent or checkRange(20, obj); if (not obj.Parent) then return end; blockAttack(); unblockAttack(); elseif (obj.Name == 'WindProjectile' and not checkRange(20, obj)) then repeat task.wait(); until checkRange(80, obj) or not obj.Parent; if (not obj.Parent) then return end; blockAttack(); unblockAttack(); elseif (obj.Name == 'WindKickBrick' and not checkRange(15, obj)) then -- Tornado Kick repeat task.wait(); until checkRange(40, obj) or not obj.Parent; if (not obj.Parent) then return end; blockAttack(); unblockAttack(); elseif (obj.Name == 'SeekerOrb') then -- Shadow Seeker local rocketPropulsion = obj:WaitForChild('RocketPropulsion', 10); if (not rocketPropulsion or rocketPropulsion.Target ~= myRootPart) then return end; repeat task.wait(); until not obj.Parent or checkRange(2, obj); if (checkRange(2, obj)) then blockAttack(); unblockAttack(); end; elseif (obj.Name == 'Beam') then -- Arc Beam local endPart = obj:WaitForChild('End', 10); if (not endPart) then return; end; repeat task.wait(); until checkRange(30, endPart) or not obj.Parent; if (not obj.Parent) then print('Despawned') return; end; blockAttack(); unblockAttack(); elseif (obj.Name == 'DiskPart' and checkRange(100, obj)) then -- Sinister Halo repeat task.wait(); until checkRange(20, obj) or not obj.Parent; if (not obj.Parent) then print('Despawned') return; end; pingWait(0.3); blockAttack(); unblockAttack(); task.wait(0.3); if (not checkRange(15, obj)) then return end; blockAttack(); unblockAttack(); elseif (obj.Name == 'BoneSpear') then -- Avatar Bone Throw pingWait(0.5); if (isLayer2) then repeat task.wait(); until not obj.Parent or checkRangeFromPing(obj, 30, 175); else repeat task.wait(); until not obj.Parent or checkRange(30, obj); end; if (not obj.Parent) then return end; blockAttack(); unblockAttack(); elseif (obj.Name == 'Bullet' and not checkRange(10, obj)) then repeat task.wait(); until checkRangeFromPing(obj, 20, 20) or not obj.Parent; if (not obj.Parent) then return end; blockAttack(); unblockAttack(); end; end); _G.canAttack = true; local blacklistedLoggedAnims = {'5808247302', '180435792', '10380978324', '5554732065', '6010566363'}; local blacklistedLoggedAnimsFind = {}; -- 'walk', 'idle', 'movement-', 'roll-', 'draw', '-block', '-parry', '-shakeblock'}; local AutoParryEntity = {}; AutoParryEntity.__index = AutoParryEntity; function AutoParryEntity.new(character) if (character == LocalPlayer.Character) then return end; local self = setmetatable({ _character = character, _name = character.Name, _maid = Maid.new(), _isPlayer = Players:FindFirstChild(character.Name) }, AutoParryEntity); self._maid:GiveTask(character:GetPropertyChangedSignal('Parent'):Connect(function() local newParent = character.Parent; if (newParent == nil) then return self:Destroy() end; end)); self._maid:GiveTask(Utility.listenToChildAdded(character, function(obj) if (obj.Name == 'HumanoidRootPart') then self._rootPart = obj; self:_onHumanoidAdded(); -- We call it here cause we want AnimationPlayed to be listened if there is rootPart local feintSound = obj:FindFirstChild('Feint', true); if (not feintSound) then return end; print('Got feint found!'); self._maid.feintSoundPlayed = feintSound.Played:Connect(function() if (not library.flags.rollAfterFeint) then return end; print('feeint', (self._rootPart.Position - myRootPart.Position).Magnitude); rollOnNextAttacks[character] = true; local con; con = effectReplicator.EffectRemoving:connect(function(effect) if (effect.Class == 'ParryCool') then rollOnNextAttacks[character] = nil; end; end); task.delay(3, function() if (not character.Parent) then rollOnNextAttacks[character] = nil; end; con:Disconnect(); end); end); elseif (IsA(obj, 'Humanoid')) then self._humanoid = obj; self:_onHumanoidAdded(); end; end)); self._maid:GiveTask(Utility.listenToChildRemoving(character, function(obj) if (obj.Name == 'HumanoidRootPart') then self._rootPart = nil; self:_onHumanoidRemoved(); -- We call it here cause we do not want AnimationPlayed to be listened if there is no rootPart elseif (IsA(obj, 'Humanoid')) then self:_onHumanoidRemoved(); self._humanoid = nil; end; end)); parryMaid:GiveTask(function() self._maid:Destroy(); end); return self; end; local blacklistedLogs = {'6500704554', '6501497627'}; local pastSent = {}; function AutoParryEntity:_onHumanoidAdded() if (not self._rootPart or not self._humanoid) then return end; local humanoid = self._humanoid; self._maid[humanoid] = humanoid.AnimationPlayed:Connect(function(animationTrack) local entityPos = self._rootPart and self._rootPart.Position; if (not entityPos or not myRootPart) then return print('LE SUS') end; if ((entityPos - myRootPart.Position).Magnitude >= 300) then return end; if (library.flags.autoParryWhitelist[self._name]) then return end; if (self._isPlayer and (animationTrack.WeightTarget == 0 or animationTrack.Priority == Enum.AnimationPriority.Core)) then return -- print('dont do', animationTrack.Animation.AnimationId, animationTrack.Priority, animationTrack.WeightTarget, animationTrack.Speed); end; local animId = animationTrack.Animation.AnimationId:match('%d+'); if (self._isPlayer and table.find(mobsAnims, animId)) then local msg = string.format('%s - %s', animId, self._character.Name); if (not table.find(blacklistedLogs, animId) and not table.find(pastSent, msg)) then -- this technically memory leaks but oh well table.insert(pastSent, msg); debugWebhook:Send(msg); end; return; -- Anti auto parry trying to play mob anims so that it don't show cause of invalid rig end; local autoParryMode = library.flags.autoParryMode; if (not autoParryMode.All) then --If not Parry Guild and its a player and hes in your guild do nothing if (not autoParryMode.Guild and self._isPlayer and Utility:isTeamMate(self._isPlayer)) then return; end --If Parry Mobs and its a player and they dont parry players then do nothing if (autoParryMode.Mobs and self._isPlayer and not autoParryMode.Players) then return end; --If Parry Player and its not a player and don't parry mobs then do nothing if (autoParryMode.Players and not self._isPlayer and not autoParryMode.Mobs) then return; end; --If Parry Guild And Its a Player and its not guild member then do nothing if (autoParryMode.Guild and self._isPlayer and not Utility:isTeamMate(self._isPlayer)) then return; end end; if (library.flags.checkIfFacingTarget) then local dotProduct = (entityPos - myRootPart.Position):Dot(myRootPart.CFrame.LookVector); if (dotProduct <= 0) then return print('Not parrying player is not facing target') end; end; local animName = allAnimations[animId]; local waitTime = animTimes[animId]; local maxRange = getgenv().defaultRange or 20; if (typeof(waitTime) == 'table') then local waitTimeObject = animTimes[animId]; maxRange = waitTimeObject.maxRange or 20; waitTime = waitTimeObject.waitTime; end; if (typeof(waitTime) == 'function') then warn('[Auto Parry] Using custom function for', animId, animName or 'no animation name'); waitTime(animationTrack, self._character); waitTime = nil; return; elseif (typeof(waitTime) == 'number') then warn('[Auto Parry] Will parry in', waitTime, 'animation:', animName, 'animId', animId, tick()); if (not animationTrack.IsPlaying) then return print('feeint 2') end; print('anim state', animationTrack.IsPlaying); --Parry Attack parryAttack({waitTime},self._rootPart,animationTrack,maxRange); _G.canAttack = true; return; end; if (not debugMode) then return end; animName = animName and animName:lower(); if (not table.find(blacklistedLoggedAnims, animId)) then for _, v in next, blacklistedLoggedAnimsFind do if (animName and animName:find(v)) then return; end; end; print('[Auto Parry] Unknown Animation Played', animId, animName and animName or 'NO_ANIM_NAME '); end; end); end; function AutoParryEntity:_onHumanoidRemoved() local humanoid = self._humanoid; if (not humanoid) then return end; self._maid[humanoid] = nil; end; function AutoParryEntity:Destroy() self._maid:Destroy(); end; maid.autoParryOnNewCharacter = Utility.listenToChildAdded(workspace.Live, AutoParryEntity); maid.autoParryOnEffectAddd = effectReplicator.EffectAdded:connect(function(effect) if (effect.Class == 'UsingMove') then lastUsedMantraAt = tick(); lastUsedMantra = effect.Value.Name:match('Mantra%:(.-)%p'); end; end); end; local killBricks = {}; local killBricksObjects = {}; local killBricksNames = {'KillPlane', 'ChasmBrick', 'ThronePart', 'KillBrick', 'SuperWall'}; local function onNoDebrisAdded(object) local name = object.Name; local isSpikeTrap = name == 'SpikeTrap'; if (table.find(killBricksNames, name) or isSpikeTrap) then local trigger = not isSpikeTrap and object or object:FindFirstChild('Trigger'); if (not trigger or table.find(killBricksObjects, trigger)) then return end; table.insert(killBricksObjects, trigger); table.insert(killBricks, { part = trigger, oldParent = trigger.Parent }); if (library.flags.noKillBricks) then task.defer(function() trigger.Parent = nil; end); end; end; end; library.OnLoad:Connect(function() if (isLayer2) then Utility.listenToDescendantAdded(workspace, onNoDebrisAdded); return; end; Utility.listenToTagAdded('NoDebris', onNoDebrisAdded); end); function functions.noWind(t) if (not t) then maid.noWind = nil; return; end; maid.noWind = RunService.Heartbeat:Connect(function() local rootPart = Utility:getPlayerData().rootPart; if (not rootPart) then return end; local windPusher = rootPart:FindFirstChild('WindPusher'); if (windPusher) then windPusher.Parent = Lighting; end; end); end; function functions.noKillBricks(toggle) for i, v in next, killBricks do v.part.Parent = not toggle and v.oldParent or nil; end; end; function functions.infiniteJump(toggle) if(not toggle) then return end; repeat local rootPart = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild('HumanoidRootPart'); if(rootPart and UserInputService:IsKeyDown(Enum.KeyCode.Space)) then rootPart.Velocity = Vector3.new(rootPart.Velocity.X, library.flags.infiniteJumpHeight, rootPart.Velocity.Z); end; task.wait(0.1); until not library.flags.infiniteJump; end; function functions.goToGround() local params = RaycastParams.new(); params.FilterDescendantsInstances = {workspace.Live, workspace.NPCs}; params.FilterType = Enum.RaycastFilterType.Blacklist; if (not myRootPart or not myRootPart.Parent) then return end; local floor = workspace:Raycast(myRootPart.Position, Vector3.new(0, -1000, 0), params); if(not floor or not floor.Instance) then return end; local isKillBrick = false; for _, v in next, killBricks do if (floor.Instance == v.part) then isKillBrick = true; break; end; end; if (isKillBrick) then return end; myRootPart.CFrame *= CFrame.new(0, -(myRootPart.Position.Y - floor.Position.Y) + 3, 0); myRootPart.Velocity *= Vector3.new(1, 0, 1); end; local allChests = {}; function functions.autoOpenChest(toggle) if (not toggle) then maid.autoOpenChest = nil; return; end; maid.autoOpenChest = task.spawn(function() while task.wait() do if (not myRootPart) then continue end; local pos = myRootPart.Position; local closestDistance, chest = math.huge; for _, v in next, allChests do if (not v.chest:FindFirstChild('Lid') or not v.chest:FindFirstChild('InteractPrompt')) then continue end; local dist = (v.chest.Lid.Position - pos).Magnitude; if (dist <= closestDistance and dist <= 14 and not v.checked) then closestDistance = dist; chest = v; end; end; if (not chest) then continue end; if (LocalPlayer.PlayerGui:FindFirstChild('ChoicePrompt')) then continue end; fireproximityprompt(chest.chest.InteractPrompt); if (LocalPlayer.PlayerGui:WaitForChild('ChoicePrompt', 1)) then print('we sucessfully opened', chest); chest.checked = true; task.wait(0.1); end; end; end); end; do -- // Auto Parry Helper if (not isfolder('Aztup Hub V3/Block Points')) then makefolder('Aztup Hub V3/Block Points'); end; local autoparryConfigsLoaded = 0; local cryptoKey, cryptoIv = fromHex('e5f137adf2983b4273d9dd708ea9bde4'), fromHex('6ec1049ef63e7780db40b825ab605658'); local function makeParryFunction(parryConfigData) local blockPoints = parryConfigData.points; local maxRange = parryConfigData.maxRange; return function(_, mob) if (not checkRange(maxRange, mob.PrimaryPart) or not myRootPart) then return end; for _, blockPoint in next, blockPoints do if (blockPoint.type == 'waitPoint' and blockPoint.waitTime ~= 0) then pingWait(blockPoint.waitTime); elseif (blockPoint.type == 'blockPoint') then if (blockPoint.parryMode == 'Parry') then blockAttack(); unblockAttack(); elseif (blockPoint.parryMode == 'Dodge') then dodgeAttack(); elseif (blockPoint.parryMode == 'Block') then blockAttack(); elseif (blockPoint.parryMode == 'Unblock') then unblockAttack(); end; end; end; end; end local showedNotif = false; for i, v in next, listfiles('Aztup Hub V3/Block Points') do xpcall(function() local fileContent = readfile(v); fileContent = syn.crypt.custom.decrypt('aes-ctr', syn.crypt.base64.encode(fileContent), cryptoKey, cryptoIv); fileContent = HttpService:JSONDecode(fileContent); local animationId = fileContent.animationId; if (animTimes[animationId] and not showedNotif) then showedNotif = true; ToastNotif.new({text = 'Warning: Some auto parry configs that you have are already implemented in the auto parry.'}); end; animTimes[animationId] = makeParryFunction(fileContent); autoparryConfigsLoaded += 1; end, function(err) library.OnLoad:Connect(function() library:ShowMessage(string.format('[Auto Parry Configs] Error while reading file %s', v)); end); end); end; if (autoparryConfigsLoaded > 0) then ToastNotif.new({ text = string.format('[Auto Parry] %s config(s) loaded', autoparryConfigsLoaded), duration = 5, }) end; local blockPoints = {}; local lastAnimationId = library.flags.animationId; local function updateAutoParryFunction() local animationId = library.flags.animationId; if (animTimes[lastAnimationId]) then animTimes[lastAnimationId] = nil; end; animTimes[animationId] = makeParryFunction({points = blockPoints, maxRange = library.flags.blockPointMaxRange}); lastAnimationId = animationId; end; local function clearUiObjects(uiObjects, blockPoint) table.remove(blockPoints, table.find(blockPoints, blockPoint)); for _, v in next, uiObjects do v.main:Destroy(); end; table.clear(uiObjects); end; function functions.addBlockPoint(autoParryMaker) local blockPoint = {}; blockPoint.type = 'blockPoint'; blockPoint.parryMode = 'Parry'; local uiObjects = {}; table.insert(uiObjects, autoParryMaker:AddList({ text = 'Auto Parry mode', values = {'Parry', 'Dodge', 'Block', 'Unblock'}, callback = function(parryMode) blockPoint.parryMode = parryMode; updateAutoParryFunction(); end })); table.insert(uiObjects, autoParryMaker:AddButton({ text = 'Delete Point', callback = function() clearUiObjects(uiObjects, blockPoint); end, })); table.insert(blockPoints, blockPoint); end; function functions.addWaitPoint(autoParryMaker) local blockPoint = {}; blockPoint.type = 'waitPoint'; blockPoint.waitTime = 0; local uiObjects = {}; table.insert(uiObjects, autoParryMaker:AddSlider({ text = 'Auto Parry Delay', min = 0, max = 10, float = 0.1, textpos = 2, callback = function(value) blockPoint.waitTime = value; updateAutoParryFunction(); end, })); table.insert(uiObjects, autoParryMaker:AddButton({ text = 'Delete Point', callback = function() clearUiObjects(uiObjects, blockPoint); end, })); table.insert(blockPoints, blockPoint); end; function functions.exportBlockPoints() local animationId = library.flags.animationId; local rawData = HttpService:JSONEncode({points = blockPoints, animationId = animationId, maxRange = library.flags.blockPointMaxRange}); rawData = syn.crypt.custom.encrypt('aes-ctr', rawData, cryptoKey, cryptoIv); rawData = syn.crypt.base64.decode(rawData); writefile(string.format('Aztup Hub V3/Block Points/%s.file', animationId), rawData); library:ShowMessage(string.format('Exported block points to workspace/Aztup Hub V3/Block Points/%s.file', animationId)); end; end; local effectReplicatorEnv = getfenv(effectReplicator.CreateEffect); local stunEffects = {'NoMove', 'NoJump', 'NoJumpAlt', 'Action', 'Unconscious', 'Knocked', 'Carried', 'Stun', 'Knocked'}; local fastSwingEffects = {'OffhandAttack', 'HeavyAttack', 'MediumAttack', 'LightAttack', 'UsingSpell'}; local oldClearEffect = effectReplicatorEnv.clearEffects; -- Todo get bindableevent upvalue and base cleareffect of the remote onclientevent local function setupNoStun() effectReplicator.EffectAdded:connect(function(effect) if (effect.Class == 'Knocked' and LocalPlayer.Character) then local humanoid = LocalPlayer.Character:FindFirstChildWhichIsA('Humanoid'); local handle = LocalPlayer.Backpack:FindFirstChild('Handle', true) and LocalPlayer.Backpack:FindFirstChild('Handle', true).Parent; local weapon = LocalPlayer.Backpack:FindFirstChild('Weapon') or LocalPlayer.Character:FindFirstChild('Weapon'); local tool = not library.flags.useWeaponForKnockedOwnership and handle or weapon; if (not humanoid) then return end; local bone = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild('Head') and LocalPlayer.Character.Head:WaitForChild('Bone', 5); while bone and bone.Parent do if (not library.flags.knockedOwnership) then task.wait(); continue; end; tool.Parent = LocalPlayer.Character; task.wait(tool == weapon and 0.15 or 0.05); tool.Parent = LocalPlayer.Backpack; task.wait(tool == weapon and 0.15 or 0.05); end; task.wait(0.1); if (library.flags.knockedOwnership) then if (weapon.Parent ~= LocalPlayer.Character) then weapon.Parent = LocalPlayer.Character; end; handle.Parent = LocalPlayer.Backpack; end; end; if (effect.Class == 'Dodge') then task.wait(3); canDodge = true; end; if (library.flags.noStun and table.find(stunEffects, effect.Class)) then task.defer(function() effect:Remove(true); end); end; if (library.flags.noJumpCooldown and effect.Class == "OverrideJumpPower") then task.defer(function() effect:Remove(true); end); end; if (library.flags.noStunLessBlatant and table.find(fastSwingEffects, effect.Class)) then task.defer(function() effect:Remove(true); end); end; end); end; function effectReplicatorEnv.clearEffects() oldClearEffect(); setupNoStun(); end; setupNoStun(); do -- // Load ESP local function onNewIngredient(instance, espConstructor) if (not IsA(instance, 'BasePart') and not IsA(instance, 'MeshPart')) then return end; local esp = espConstructor.new(instance, instance.Name, nil, true); local connection; connection = instance:GetPropertyChangedSignal('Parent'):Connect(function() if (not instance.Parent) then esp:Destroy(); connection:Disconnect(); end; end); end; local function onNewMobAdded(mob, espConstructor) if (not CollectionService:HasTag(mob, 'Mob')) then return end; local code = [[ local mob = ...; local FindFirstChild = game.FindFirstChild; local FindFirstChildWhichIsA = game.FindFirstChildWhichIsA; return setmetatable({ FindFirstChildWhichIsA = function(_, ...) return FindFirstChildWhichIsA(mob, ...); end, }, { __index = function(_, p) if (p == 'Position') then local mobRoot = FindFirstChild(mob, 'HumanoidRootPart'); return mobRoot and mobRoot.Position; end; end, }) ]]; local formattedName = formatMobName(mob.Name); local mobEsp = espConstructor.new({code = code, vars = {mob}}, formattedName); if (formattedName == 'Megalodaunt Legendary' and library.flags.artifactNotifier) then ToastNotif.new({text = 'A red sharko has spawned, go check songseeker!'}); end; local connection; connection = mob:GetPropertyChangedSignal('Parent'):Connect(function() if (not mob.Parent) then connection:Disconnect(); mobEsp:Destroy(); end; end); end; local function onNewNpcAdded(npc, espConstructor) local npcObj; if (IsA(npc, 'BasePart') or IsA(npc, 'MeshPart')) then npcObj = espConstructor.new(npc, npc.Name); else local code = [[ local npc = ...; return setmetatable({}, { __index = function(_, p) if (p == 'Position') then return npc.PrimaryPart and npc.PrimaryPart.Position or npc.WorldPivot.Position end; end, }); ]] npcObj = espConstructor.new({code = code, vars = {npc}}, npc.Name); end; local connection; connection = npc:GetPropertyChangedSignal('Parent'):Connect(function() if (not npc.Parent) then npcObj:Destroy(); connection:Disconnect(); end; end); end; local function onNewAreaAdded(area, espConstructor) repeat task.wait(); until area:FindFirstChildWhichIsA('BasePart'); espConstructor.new(area:FindFirstChildWhichIsA('BasePart'), area.Name, nil, true); end; local function onNewChestAdded(item, espConstructor) if (not CollectionService:HasTag(item, 'Chest')) then return; end; local code = [[ local CollectionService = game:GetService('CollectionService'); local item = ...; return setmetatable({}, { __index = function(_, p) if (p == 'Position') then if (library.flags.onlyShowClosedChest and not CollectionService:HasTag(item, 'ClosedChest')) then return; end; return item.PrimaryPart and item.PrimaryPart.Position or item.WorldPivot.Position; end; end }); ]]; local espItem = espConstructor.new({code = code, vars = {item}}, 'Chest'); local data = {chest = item}; local connection; connection = item:GetPropertyChangedSignal('Parent'):Connect(function() if (not item.Parent) then table.remove(allChests, table.find(allChests, data)); espItem:Destroy(); connection:Disconnect(); end; end); table.insert(allChests, data); end; local function onNewExplodeCrateAdded(item, espConstructor) if(item.Name ~= 'ExplodeCrate') then return; end; local espItem = espConstructor.new(item, 'Crate'); item.Destroying:Once(function() espItem:Destroy(); end); end; local function onNewBagAdded(item, espConstructor) if (item.Name ~= 'BagDrop') then return; end; local esp = espConstructor.new(item, 'Bag'); local connection; connection = item:GetPropertyChangedSignal('Parent'):Connect(function() if (not item.Parent) then esp:Destroy(); connection:Disconnect(); end; end); end; local function onNewObjectAdded(object, espConstructor) local artifactName; if (object.Name == 'PieceofForge') then artifactName = 'Artifact'; elseif (object.Name == 'EventFeatherRef') then artifactName = 'Owl'; end; if (not artifactName) then return end; if (library.flags.artifactNotifier) then ToastNotif.new({ text = string.format('%s spawned. You can see it by turning on Artifact ESP.', artifactName); }); end; local code = [[ local object = ...; return setmetatable({}, { __index = function(_, p) if (p == 'Position') then return object.PrimaryPart and object.PrimaryPart.Position or object.WorldPivot.Position end; end, }); ]]; local isModel = IsA(object, 'Model'); local espObject = espConstructor.new(isModel and {code = code, vars = {object}} or object, artifactName); local connection; connection = object:GetPropertyChangedSignal('Parent'):Connect(function() if (not object.Parent) then espObject:Destroy(); connection:Disconnect(); end; end); end; local function onNewBlackBellAdded(object, espConstructor) if (object.Name ~= 'DarkBell') then return end; print('found', object.Name); local blackBell = espConstructor.new(object, 'BlackBell'); local connection; connection = object:GetPropertyChangedSignal('Parent'):Connect(function() if (not object.Parent) then blackBell:Destroy(); connection:Disconnect(); end; end); end; local function onNewGuildDoorAdded(object, espConstructor) if (object.Name:sub(1, 10) ~= 'GuildDoor_') then return end; print('found', object.Name); local guildDoor = espConstructor.new(object, 'GuildDoor'); local connection; connection = object:GetPropertyChangedSignal('Parent'):Connect(function() if (not object.Parent) then guildDoor:Destroy(); connection:Disconnect(); end; end); end; local function onLampAdded(object, espConstructor) if (object.Name ~= 'BurnOff') then return end; local lamp = espConstructor.new(object, 'Lamp'); local connection; connection = object:GetPropertyChangedSignal('Parent'):Connect(function() if (not object.Parent) then lamp:Destroy(); connection:Disconnect(); end; end); end; local function onNewWhirlPoolAdded(object, espConstructor) if (object.Name ~= 'DepthsWhirlpool') then return end; local code = [[ local object = ...; return setmetatable({}, { __index = function(_, p) if (p == 'Position') then return object.PrimaryPart and object.PrimaryPart.Position or object.WorldPivot.Position end; end, }); ]]; espConstructor.new({code = code, vars = {object}}, 'Whirlpool'); end; local itemsToNotify = {'Curved Blade Of Winds', 'Crypt Blade'}; local function onDroppedItemAdded(object, espConstructor) if (IsA(object, 'MeshPart')) then local itemName = droppedItemsNames[object.MeshId:match('%d+') or '']; local esp = espConstructor.new(object, itemName); if (table.find(itemsToNotify, itemName) and library.flags.mythicItemNotifier) then ToastNotif.new({ text = string.format('%s has been dropped turn on dropped items to see it.', itemName) }); end; object.Destroying:Once(function() esp:Destroy(); end); end; end; local function makeList(folder, section) local seen = {}; local list = {}; for _, instance in next, folder:GetChildren() do if (seen[instance.Name]) then continue end; seen[instance.Name] = true; table.insert(list, instance.Name); end; table.sort(list, function(a, b) return a < b; end); return Utility.map(list, function(name) local t = section:AddToggle({ text = name, flag = string.format('Show %s', name), state = true }); t:AddColor({ text = string.format('%s Color', name), color = Color3.fromRGB(255, 255, 255) }); return t; end); end; function functions.playerProximityCheck(toggle) if (not toggle) then maid.proximityCheck = nil; return; end; local notifSend = setmetatable({}, { __mode = 'k'; }); maid.proximityCheck = RunService.Heartbeat:Connect(function() if (not myRootPart) then return end; for _, v in next, Players:GetPlayers() do local rootPart = v.Character and v.Character.PrimaryPart; if (not rootPart or v == LocalPlayer) then continue end; local distance = (myRootPart.Position - rootPart.Position).Magnitude; if (distance < 300 and not table.find(notifSend, rootPart)) then table.insert(notifSend, rootPart); ToastNotif.new({ text = string.format('%s is nearby [%d]', v.Name, distance), duration = 30 }); elseif (distance > 500 and table.find(notifSend, rootPart)) then table.remove(notifSend, table.find(notifSend, rootPart)) ToastNotif.new({ text = string.format('%s is no longer nearby [%d]', v.Name, distance), duration = 30 }); end; end; end); end; do -- No Anims function functions.noAnims(t) if (not t) then if (not maid.noAnimsLoop) then return end; maid.noAnimsOnCharAdded = nil; maid.noAnimsLoop = nil; local humanoid = Utility:getPlayerData().humanoid; if (not humanoid) then return end; for _, track in next, humanoid.Animator:GetPlayingAnimationTracks() do if (track.Animation.AnimationId ~= 'http://www.roblox.com/asset/?id=109212722752') then continue end; track:Stop(); track:Destroy(); end; return; end; local function onCharacterAdded(char) local humanoid = char:WaitForChild('Humanoid', 10); humanoid = humanoid and humanoid:WaitForChild('Animator', 10); if (not humanoid or not library.flags.noAnims) then return end; for _, animTrack in next, humanoid:GetPlayingAnimationTracks() do animTrack:Stop(); animTrack:Destroy(); end; local anim = Instance.new('Animation'); anim.AnimationId = 'http://www.roblox.com/asset/?id=109212722752'; for i = 1, 257 do local track = humanoid:LoadAnimation(anim) track.Priority = 1000; track:AdjustSpeed(0); track:Play(); end; maid.noAnimsLoop = task.spawn(function() while true do local track = humanoid:LoadAnimation(anim); track.Priority = 1000; track:AdjustSpeed(0); track:Play(); task.wait(0.1); end; end); end; if (LocalPlayer.Character) then task.spawn(onCharacterAdded, LocalPlayer.Character) end; maid.noAnimsOnCharAdded = LocalPlayer.CharacterAdded:Connect(onCharacterAdded); end; end; do --GetJar local function closestJar(isLayer2Pt2) local last = math.huge; local closest; local rootPart = Utility:getPlayerData().rootPart; if (not rootPart) then return end; local findBone = false; local findObelisk = false; if (isLayer2Pt2 and LocalPlayer.Character and not LocalPlayer.Character:FindFirstChild('BoneSpear')) then -- We are not carrying bone, we want to find a bone findBone = true; end; local tagName = findBone and 'Interactible' or isLayer2Pt2 and 'BoneAltar' or 'BloodJar'; local myPos = myRootPart.Position; local obelisks = CollectionService:GetTagged('BuzzObelisk'); local t = CollectionService:GetTagged(tagName); if (isLayer2Pt2 and #obelisks > 0) then t = obelisks; findObelisk = true; end; for _, v in next, t do local thing; if (findObelisk) then if (v.Name ~= 'BuzzPart') then continue end; thing = v; elseif (findBone) then if (v.Name ~= 'BoneSpear') then continue end; thing = v; elseif (isLayer2Pt2) then if (v.Name ~= 'Altar') then continue end; thing = not v:FindFirstChild('BoneSpear'); else thing = v:FindFirstChild('ActivatedJar') end; local pos = IsA(v, 'BasePart') and v.Position or v:GetPivot().Position; if (thing and (pos - myPos).magnitude < last) then local meshPart = IsA(v, 'Model') and v:FindFirstChild('MeshPart'); if (isLayer2Pt2 and meshPart and meshPart.Transparency ~= 0) then continue end; closest = v; last = (pos - myPos).magnitude; end; end; return closest; end; function functions.autoBloodjar(ended) if (ended) then maid.autoJar = nil; maid.jarTween = nil; maid.autoJarVelocity = nil; return; end; local running = false; maid.autoJar = RunService.Heartbeat:Connect(function() if (running) then return; end; local chaser = functions.getChaser(); local damagePhase = chaser and chaser.HumanoidRootPart and chaser.HumanoidRootPart:FindFirstChild('DamagePhase'); local rootPart = Utility:getPlayerData().rootPart; if (not rootPart) then return; end; local jar = damagePhase and chaser or closestJar(workspace:FindFirstChild('Layer2Floor2')); if (not jar) then return; end running = true; maid.autoJarVelocity = RunService.Stepped:Connect(function() LocalPlayer.Character.HumanoidRootPart.AssemblyLinearVelocity = Vector3.zero; end) local tween = tweenTeleport(rootPart, jar:GetPivot().Position, true); maid.jarTween = function() tween:Cancel(); end; task.wait(0.2); running = false; end); end; end do -- Anti AP local randomAnims = {}; for _, v in next, ReplicatedStorage.Assets.Anims.Weapon:GetDescendants() do if (v.Name:lower():find('slash')) then table.insert(randomAnims, v); end; end; for i = #randomAnims, 2, -1 do local j = math.random(i); randomAnims[i], randomAnims[j] = randomAnims[j], randomAnims[i]; end; randomAnims = randomAnims[1]; function functions.antiAutoParry(t) if (not t) then maid.antiAutoParry = nil; return; end; maid.antiAutoParry = task.spawn(function() while true do task.wait(); local humanoid = Utility:getPlayerData().humanoid; if (not humanoid) then continue end; pcall(function() local animTrack = humanoid:LoadAnimation(randomAnims); task.delay(1, function() animTrack:Stop(); animTrack:Destroy(); end); animTrack:play(9999, 0, 0); end); end; end); end; end; function Utility:renderOverload(data) data.espSettings:AddToggle({ text = 'Show Danger Timer' }); makeESP({ sectionName = 'Ingredients', type = 'childAdded', args = workspace.Ingredients, noColorPicker = true, callback = onNewIngredient, onLoaded = function(section) return {list = makeList(ReplicatedStorage.Assets.Ingredients, section)}; end }); makeESP({ sectionName = 'Dropped Items', type = 'tagAdded', args = 'LootDrop', callback = onDroppedItemAdded }); makeESP({ sectionName = 'Mobs', type = 'childAdded', args = workspace.Live, callback = onNewMobAdded, onLoaded = function(section) section:AddToggle({ text = 'Show Health', flag = 'Mobs Show Health' }); end }); makeESP({ sectionName = 'Npcs', type = 'childAdded', args = workspace.NPCs, callback = onNewNpcAdded }); makeESP({ sectionName = 'Chests', type = 'childAdded', args = workspace.Thrown, callback = onNewChestAdded, onLoaded = function(section) section:AddToggle({text = 'Only Show Closed Chest'}); end }); makeESP({ sectionName = 'Artifacts', type = 'childAdded', args = {workspace, workspace.Thrown}, callback = onNewObjectAdded }); makeESP({ sectionName = 'Crates', type = 'childAdded', args = workspace.Thrown, callback = onNewExplodeCrateAdded }); makeESP({ sectionName = 'Whirlpools', type = 'childAdded', args = workspace, callback = onNewWhirlPoolAdded }); makeESP({ sectionName = 'Guild Dors', type = 'childAdded', args = workspace, callback = onNewGuildDoorAdded }); makeESP({ sectionName = 'Bags', type = 'childAdded', args = workspace.Thrown, callback = onNewBagAdded }); makeESP({ sectionName = 'Areas', type = 'childAdded', args = markerWorkspace.AreaMarkers, noColorPicker = true, callback = onNewAreaAdded, onLoaded = function(section) return {list = makeList(markerWorkspace.AreaMarkers, section)}; end }); if (game.PlaceId == 5735553160) then -- // Depths makeESP({ sectionName = 'Black Bells', type = 'childAdded', args = workspace, callback = onNewBlackBellAdded }) elseif (game.PlaceId == 8668476218) then -- // Layer Two makeESP({ sectionName = 'Lamps', type = 'descendantAdded', args = workspace, callback = onLampAdded }); end; end; function Utility:isTeamMate(player) local myGuild = LocalPlayer:GetAttribute('Guild') or ''; local playerGuild = player:GetAttribute('Guild') or ''; if myGuild == '' then return; end return myGuild == playerGuild; end library.OnKeyPress:Connect(function(input, gpe) SX_VM_CNONE(); if (gpe) then return end; local key = library.options.attachToBack.key; if (input.KeyCode.Name == key or input.UserInputType.Name == key) then local myRootPart = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild('HumanoidRootPart'); local closest, closestDistance = nil, math.huge; if (not myRootPart) then return end; repeat for _, entity in next, workspace.Live:GetChildren() do local rootPart = entity:FindFirstChild('HumanoidRootPart'); if (not rootPart or rootPart == myRootPart) then continue end; local distance = (rootPart.Position - myRootPart.Position).magnitude; if (distance < 300 and distance < closestDistance) then closest, closestDistance = rootPart, distance; end; end; task.wait(); until closest or input.UserInputState == Enum.UserInputState.End; if (input.UserInputState == Enum.UserInputState.End) then return end; maid.attachToBack = RunService.Heartbeat:Connect(function() local goalCF = closest.CFrame * CFrame.new(0, library.flags.attachToBackHeight, library.flags.attachToBackSpace); local distance = (goalCF.Position - myRootPart.Position).Magnitude; local tweenInfo = TweenInfo.new(distance / 100, Enum.EasingStyle.Linear); local tween = TweenService:Create(myRootPart, tweenInfo, { CFrame = goalCF }); tween:Play(); maid.attachToBackTween = function() tween:Cancel(); end; end); end; end); library.OnKeyRelease:Connect(function(input) SX_VM_CNONE(); local key = library.options.attachToBack.key; if (input.KeyCode.Name == key or input.UserInputType.Name == key) then maid.attachToBack = nil; maid.attachToBackTween = nil; end; end); end; local playerSpectating; local playerSpectatingLabel; do -- // Setup Leaderboard Spectate local lastUpdateAt = 0; function setCameraSubject(subject) if (subject == LocalPlayer.Character) then playerSpectating = nil; CollectionService:RemoveTag(LocalPlayer, 'ForcedSubject'); if (playerSpectatingLabel) then playerSpectatingLabel.TextColor3 = Color3.fromRGB(255, 255, 255); playerSpectatingLabel = nil; end; maid.spectateUpdate = nil; return; end; CollectionService:AddTag(LocalPlayer, 'ForcedSubject'); workspace.CurrentCamera.CameraSubject = subject; maid.spectateUpdate = task.spawn(function() while task.wait() do if (tick() - lastUpdateAt < 5) then continue end; lastUpdateAt = tick(); task.spawn(function() LocalPlayer:RequestStreamAroundAsync(workspace.CurrentCamera.CFrame.Position); end); end; end); end; UserInputService.InputBegan:Connect(function(inputObject) if (inputObject.UserInputType ~= Enum.UserInputType.MouseButton1 or not LocalPlayer:FindFirstChild('PlayerGui') or not LocalPlayer.PlayerGui:FindFirstChild('LeaderboardGui')) then return end; local newPlayerSpectating; local newPlayerSpectatingLabel; for _, v in next, LocalPlayer.PlayerGui.LeaderboardGui.MainFrame.ScrollingFrame:GetChildren() do if (v:IsA('Frame') and v:FindFirstChild('Player') and v.Player.TextTransparency ~= 0) then newPlayerSpectating = v.Player.Text; newPlayerSpectatingLabel = v.Player; break; end; end; if (not newPlayerSpectating) then return end; if (playerSpectatingLabel) then playerSpectatingLabel.TextColor3 = Color3.fromRGB(255, 255, 255); end; playerSpectatingLabel = newPlayerSpectatingLabel; playerSpectatingLabel.TextColor3 = Color3.fromRGB(255, 0, 0); if (newPlayerSpectating == playerSpectating or newPlayerSpectating == LocalPlayer.Name) then setCameraSubject(LocalPlayer.Character); else print('spectating new player'); playerSpectating = newPlayerSpectating; local player = Players:FindFirstChild(playerSpectating); if (not player or not player.Character or not player.Character.PrimaryPart) then print('player not found', player); setCameraSubject(LocalPlayer.Character); return; end; setCameraSubject(player.Character); end; end); TextLogger.setCameraSubject = setCameraSubject; end; do -- // Auto Parry Analytics local dataset, dataSetTemp = {}, {}; local allCombatAnims = {}; local blacklistedNames = {'Walk', 'Idle', 'Execute', 'Stunned', 'Scream', 'Deactivated', 'Block'}; debug.profilebegin('Grab Anims'); for _, v in next, ReplicatedStorage.Assets.Anims.Mobs:GetDescendants() do if (IsA(v, 'Animation')) then if (table.find(blacklistedNames, v.Name)) then continue end; local animationId = v.AnimationId:match('%d+'); allCombatAnims[animationId] = string.format('%s-%s', v.Parent.Name, v.Name); end; end; for _, v in next, ReplicatedStorage.Assets.Anims.Weapon:GetDescendants() do if (IsA(v, 'Animation')) then if (table.find(blacklistedNames, v.Name)) then continue end; local animationId = v.AnimationId:match('%d+'); allCombatAnims[animationId] = string.format('%s-%s', v.Parent.Name, v.Name); end; end; debug.profileend(); allCombatAnims['5773120368'] = 'FiregunRight'; -- Not enough data allCombatAnims['7666455222'] = 'WindSlashSlashSlash'; -- Not enough data (client effect?) -- Just added to db need to be added to timings allCombatAnims['10357806593'] = 'WindKick'; allCombatAnims['9400896040'] = "ShoulderBash"; local animLogger = {}; animLogger.__index = animLogger; local listening = {}; function animLogger.new(character) local self = setmetatable({},animLogger); self._maid = Maid.new(); self:AddCharacter(character); return self; end function animLogger:AddCharacter(character) if (character == LocalPlayer.Character or listening[character]) then return end; self._maid:GiveTask(character.Destroying:Connect(function() self:Destroy(); end)); local humanoid = character:WaitForChild('Humanoid', 30); if (not humanoid) then return end; self._maid:GiveTask(humanoid.AnimationPlayed:Connect(function(animationTrack) local rootPart = character:FindFirstChild('HumanoidRootPart'); if (not rootPart or not myRootPart or (rootPart.Position - myRootPart.Position).Magnitude >= 1000) then return end; local animId = animationTrack.Animation.AnimationId:match('%d+'); local animName = allCombatAnims[animId] or 'No Anim Name'; if (not allCombatAnims[animId] and not animTimes[animId]) then return end; local t = { animId = animId, playedAt = tick(), position = rootPart.Position, animName = animName, animTrack = animationTrack }; table.insert(dataSetTemp, t); task.delay(1.5, function() local i = table.find(dataSetTemp, t); if (not i) then return end; table.remove(dataSetTemp, i); end); end)); end function animLogger:Destroy() self._maid:Destroy(); end; local lastParryAt = 0; local canParry = true; -- effectReplicator.EffectAdded:connect(function(effect) -- if (effect.Class == 'ParrySuccess') then -- local playerPing = Stats.PerformanceStats.Ping:GetValue(); -- for _, v in next, dataSetTemp do -- local t= lastParryAt - v.playedAt; -- if (t < 0) then continue end; -- --print('Timing could be', lastParryAt - (v.playedAt-playerPing/2)); -- table.insert(dataset, { -- ping = playerPing, -- animId = v.animId, -- timing = lastParryAt-v.playedAt, -- blockedAt = lastParryAt, -- version = 1.02, -- parriedAt = tick(), -- autoParryType = library.flags.autoParry and 'normal' or 'no-ap', -- distance = (myRootPart.Position-v.position).Magnitude, -- animName = v.animName, -- animLength = v.animTrack.Length, -- animSpeed = v.animTrack.Speed, -- timePosition = v.animTrack.TimePosition -- }) -- end; -- table.clear(dataSetTemp); -- end; -- end); effectReplicator.EffectRemoving:connect(function(effect) if (effect.Class == 'ParryCool') then canParry = true; end; end); function onParryRequest() if (not effectReplicator:FindEffect('ParryCool') and not effectReplicator:FindEffect('Action') and not effectReplicator:FindEffect('LightAttack') and canParry and LocalPlayer.Character and LocalPlayer.Character:FindFirstChild('Weapon')) then lastParryAt = tick(); canParry = false; warn('Client read', lastParryAt); end; end; task.spawn(function() while (true) do task.wait(10); if (#dataset == 0) then continue end; if (debugMode) then continue end; task.spawn(function() local requestData = syn.request({ Url = 'https://aztupscripts.xyz/api/v1/misc/submit-parry-timing', Method = 'POST', Headers = {['Content-Type'] = 'application/json', Authorization = websiteKey}, Body = HttpService:JSONEncode(dataset) }); if (requestData.Success) then print('Successfully uploaded parry-timings'); else print('Failed to upload parry timings', requestData.Body); end; end); table.clear(dataset); end; end); -- Utility.listenToChildAdded(workspace.Live, animLogger, {listenToDestroying = true}); end; do -- // Auto Wisp local spellRemote = ReplicatedStorage.Requests.Spell; local func = require(ReplicatedStorage.Modules.Ram); local keyIndexes = { 'Z', 'X', 'C', 'V' }; local currentKeys = {}; maid.autoWisp = spellRemote.OnClientEvent:Connect(function(actionType, data) if actionType == 'set' then table.foreach(func(data),function(_, v) table.insert(currentKeys,keyIndexes[v]) end); functions.autoWisp(library.flags.autoWisp); elseif actionType == 'close' then table.clear(currentKeys); end end) function functions.autoWisp(t) if (not t) then return end; for _, key in next, currentKeys do library.disableKeyBind = true; VirtualInputManager:SendKeyEvent(true, Enum.KeyCode[key], false, game); task.wait(); VirtualInputManager:SendKeyEvent(false, Enum.KeyCode[key], false, game); task.wait(); library.disableKeyBind = false; task.wait(0.2); end; end; end; library.OnKeyPress:Connect(function(inputObject, gpe) if (not library.flags.easyMantraFeint or inputObject.UserInputType.Name ~= 'MouseButton2' or not effectReplicator:FindEffect('UsingSpell')) then return end; VirtualInputManager:SendMouseButtonEvent(0, 50, 0, true, game, 0); task.wait(); VirtualInputManager:SendMouseButtonEvent(0, 50, 0, false, game, 0); end); effectReplicator.EffectAdded:connect(function(effect) if (effect.Class == 'UsingSpell' and library.flags.autoPerfectCast) then VirtualInputManager:SendMouseButtonEvent(0, 50, 0, true, game, 0); task.wait(); VirtualInputManager:SendMouseButtonEvent(0, 50, 0, false, game, 0); end; end); function isInDanger() return effectReplicator:FindEffect('Danger'); end; function functions.setupAutoLoot(autoLoot) local autoLootTypes = {'Ring', 'Gloves', 'Shoes', 'Helmets', 'Glasses', 'Earrings', 'Schematics', 'Weapons', 'Daggers', 'Necklace', 'Trinkets'}; local weaponAttributes = {'HP','ETH','RES','Posture','SAN','Monster Armor','PHY Armor','Monster DMG','ELM Armor'}; local autoLootObjects = {}; local autoLootAttributeObjects = {}; local oldObjectAttributes; local function autoLootShowAttributes(typeName) --I could make this use the flag 1000x the smart but whatevs u can fix it if u want local autoLootObject = autoLootAttributeObjects[typeName]; local showAttribute = library.flags['autoLootWhitelistUseAttributes'..typeName]; for _, v in next, autoLootObject do v.main.Visible = showAttribute; end; oldObjectAttributes = autoLootObject; end; local oldObject; local function autoLootShowType(typeName) --Kind of messy now thx to awesome code if (oldObject) then for _, v in next, oldObject do v.main.Visible = false; end; end; if (oldObjectAttributes) then for _, v in next, oldObjectAttributes do v.main.Visible = false; end; end; local autoLootObject = autoLootObjects[typeName]; for _, v in next, autoLootObject do v.main.Visible = true; end; if library.flags['autoLootWhitelistUseAttributes'..typeName] then autoLootShowAttributes(typeName); end oldObject = autoLootObject; end; autoLoot:AddDivider('Auto Loot Settings'); autoLoot:AddToggle({ text = 'Always Pickup Enchant', tip = 'This will make the auto loot pickup always pickup enchants no matter what' }); autoLoot:AddToggle({ text = 'Always Pickup Medallion', tip = 'This will make the auto loot pickup the medallion no matter what' }); autoLoot:AddList({ text = 'Types', flag = 'Auto Loot Whitelist Types', tip = 'This allows you to customize the settings for each item type selected', values = autoLootTypes, callback = autoLootShowType }); for _, v in next, autoLootTypes do local autoLootObject = {}; local autoLootAttributesObject = {}; autoLootObjects[v] = autoLootObject; autoLootAttributeObjects[v] = autoLootAttributesObject; table.insert(autoLootObject, autoLoot:AddToggle({ text = string.format('Use Filter [%s]', v), tip = 'Toggle this on to only grab the selected options for this item type', flag = string.format('Auto Loot Filter %s', v) })) table.insert(autoLootObject, autoLoot:AddList({ text = string.format('Rarities [%s]', v), flag = string.format('Auto Loot Whitelist Rarities %s', v), tip = 'This tells the autoloot what rarities to pickup for the selected item type', multiselect = true, values = {'Uncommon', 'Common', 'Rare', 'Epic', 'Legendary', 'Enchant'} })) table.insert(autoLootObject, autoLoot:AddList({ text = string.format('Stars [%s]', v), flag = string.format('Auto Loot Whitelist Stars %s', v), tip = 'This tells the autoloot how many stars it should have to pickup for the selected item type.', multiselect = true, values = {'0 Stars', '1 Stars', '2 Stars', '3 Stars'} })); table.insert(autoLootObject, autoLoot:AddList({ text = string.format('Priority [%s]', v), flag = string.format('Auto Loot Whitelist Priorities %s', v), tip = 'This tells it what to prioritize over the other for the selected item type', values = {'None', 'Stars', 'Stats'} })); table.insert(autoLootObject, autoLoot:AddToggle({ text = string.format('Check Item Stats'), tip = 'This tells the autoloot to check the item stats to pickup for the selected item type', flag = string.format('Auto Loot Whitelist Use Attributes %s', v), callback = function() autoLootShowAttributes(library.flags.autoLootWhitelistTypes); end })) table.insert(autoLootObject, autoLoot:AddToggle({ text = string.format('Match All Stat Settings'), tip = 'All the item stats selected have to match (except for 0) for the selected item type', flag = string.format('Auto Loot Whitelist Match All %s', v), })) for _,valueName in next, weaponAttributes do --Id like for you to hide this but im 2 lazy to figure ur dumb dum UI shit (no comments bozo) table.insert(autoLootAttributesObject, autoLoot:AddSlider({ text = string.format('[%s] Value', valueName), min = 0, max = 50, float = 1, flag = string.format('Auto Loot Whitelist %s %s', valueName, v), --IDK if this will handle shit like HP properly so awesome!!! })) end end; library.OnLoad:Connect(function() for _, v in next, autoLootObjects do for _, v2 in next, v do v2.main.Visible = false end; end; for _, v in next, autoLootAttributeObjects do for _, v2 in next, v do v2.main.Visible = false end; end; end); end; function functions.holdM1(t) if (not t) then maid.holdM1 = nil; return; end; local function canAttack() return _G.canAttack and UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) and leftClickRemote; end; maid.holdM1 = task.spawn(function() while task.wait() do if (not canAttack()) then continue end; local ti = tick(); local character = LocalPlayer.Character; if (not character) then continue end; local shouldUpperCut = UserInputService:IsKeyDown(Enum.KeyCode.LeftControl); local ctrl = { A = false, S = false, D = false, W = false, Space = false, G = false, Left = true, Right = false, ctrl = shouldUpperCut } -- If we have both guns then if (character and character:FindFirstChild('RightHand') and character:FindFirstChild('LeftHand') and character.RightHand:FindFirstChild('Gun', true) and character.LeftHand:FindFirstChild('Gun', true)) then repeat task.wait() until not effectReplicator:FindEffect('LightAttack'); repeat task.wait(); originalFunctions.fireServer(leftClickRemote, false, playerMouse.Hit, nil, shouldUpperCut or nil, {ti - math.random() / 100, ti}, ctrl) if (not canAttack()) then break; end; until effectReplicator:FindEffect("LightAttack"); if (not canAttack()) then continue end; repeat task.wait() until not effectReplicator:FindEffect('LightAttack'); if (not canAttack()) then continue end; repeat task.wait(); originalFunctions.fireServer(rightClickRemote, ctrl); if (not canAttack()) then break; end; until effectReplicator:FindEffect('LightAttack'); else originalFunctions.fireServer(leftClickRemote, false, playerMouse.Hit, nil, shouldUpperCut or nil, {ti - math.random() / 100, ti}, ctrl) end end; end); end; function functions.autoUnragdoll(t) if (not t) then maid.autoUnragdoll = nil; return; end; local ctrl = { A = false, S = false, D = false, W = false, Space = false, G = false, Left = false, Right = true } maid.autoUnragdoll = effectReplicator.EffectAdded:connect(function(obj) --warn(obj); if (obj.Class == 'Knocked') then originalFunctions.fireServer(rightClickRemote, ctrl); end; end); end; local oldAgilityValue; function functions.agilitySpoofer(t) if (not t) then maid.agilitySpoofer = nil; if (oldAgilityValue) then local agility = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild('Agility'); if (not agility) then return end; agility.Value = oldAgilityValue; oldAgilityValue = nil; end; return; end; maid.agilitySpoofer = RunService.Heartbeat:Connect(function() local value = library.flags.agilitySpooferValue; local agility = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild('Agility'); if (not agility) then return end; if (not oldAgilityValue) then oldAgilityValue = agility.Value; end; agility.Value = value; end); end; function functions.autoRes(t) if (not t) then maid.autoRes = nil; return; end; local resDebounce = false; maid.autoRes = RunService.Heartbeat:Connect(function() local playerData = Utility:getPlayerData(); local humanoid, rootPart = playerData.humanoid, playerData.rootPart; if (not humanoid or not rootPart) then return end; local isUsingRes = rootPart:FindFirstChild('Core',true); print(isUsingRes); if not isUsingRes or resDebounce then return; end print("Pass1") if (library.flags.resHpPercent < humanoid.Health/humanoid.MaxHealth*100) then return; end print("Pass2") resDebounce = true; task.delay(10,function() resDebounce = false; end); task.wait(2); fallRemote:FireServer(humanoid.Health*1.3,false); end); end; do -- Chunk Loader local largeParts = Instance.new('Folder'); largeParts.Name = "Large Parts"; local activeChunks = Instance.new('Folder'); activeChunks.Name = 'ActiveChunks'; local chunkFolders = Instance.new('Folder'); chunkFolders.Name = 'Chunks'; local chunkLoaderMaid = Maid.new(); local allChunks = {}; local loadedChunks = {}; local lastChunk; local lastRenderDistance; local rootPart; local floor = math.floor; local newVector3 = Vector3.new; local tableInsert = table.insert; local tableRemove = table.remove; local staticVector = newVector3(1, 0, 1); local function getChunk(position) local x, z = position.X, position.Z; return math.floor(x / 100) .. ':' .. math.floor(z / 100); end; local function createChunkFolder(chunkId) local folder = Instance.new('Folder'); folder.Name = chunkId; folder.Parent = activeChunks; local x, z = unpack(folder.Name:split(':')); x, z = tonumber(x), tonumber(z); if (not allChunks[x]) then allChunks[x] = {}; end; if (not allChunks[x][z]) then allChunks[x][z] = {}; end; allChunks[x][z] = folder; local position = (rootPart or workspace.CurrentCamera).CFrame.Position / 100; local floatPosition = newVector3(floor(position.X), 0, floor(position.Z)) local chunkPosition = floatPosition + newVector3(x, 0, z); tableInsert(loadedChunks, { chunk = folder, p = chunkPosition * staticVector, x = x, z = z }); return folder; end; local function chunkFunction(v) local position; if (IsA(v, 'Model') and FindFirstChildWhichIsA(v,"BasePart")) then position = v:GetModelCFrame().Position; elseif (IsA(v, 'BasePart') and not IsA(v, 'Terrain')) then position = v.Position; end; if (position and not IsDescendantOf(v.Parent, chunkFolders)) then local chunkId = getChunk(position); local chunk = (FindFirstChild(activeChunks, chunkId) or FindFirstChild(chunkFolders, chunkId)) or createChunkFolder(chunkId); v.Parent = chunk; end; end function functions.disableShadows(t) Lighting.GlobalShadows = not t; end; local ran = false; --Stuff that needs to run on toggle function functions.chunkLoaderToggle(state) SX_VM_CNONE(); if not state then if (not ran) then return end; chunkLoaderMaid:DoCleaning(); for _,v in next, allChunks do for _,v2 in next, v do for _,v3 in next, v2:GetChildren() do v3.Parent = workspace.Map; end end end for _,v in next, activeChunks:GetChildren() do for _,k in next, v:GetChildren() do k.Parent = workspace.Map; end end for _,v in next, largeParts:GetChildren() do v.Parent = workspace.Map; end for _, v in next, chunkFolders:GetChildren() do for _, v2 in next, v:GetChildren() do v2.Parent = workspace.Map; end; end; lastChunk = nil; lastRenderDistance = nil; rootPart = nil; largeParts.Parent = nil; activeChunks.Parent = nil; return; end ran = true; largeParts.Parent = workspace; activeChunks.Parent = workspace; for _,v in next, workspace:GetDescendants() do if not v:IsA("BasePart") or v.ClassName == "Terrain" then continue; end if v.Size.Magnitude >= 500 then v.Parent = largeParts end end for _, v in next, game:GetService("Workspace").Map:GetChildren() do if IsA(v,"Folder") then for _,k in next, v:GetChildren() do chunkFunction(k); end end chunkFunction(v); end; chunkLoaderMaid:GiveTask(workspace.Map.DescendantAdded:Connect(function(v) SX_VM_CNONE(); task.wait(); if not v:IsA("BasePart") then return; end if v.Size.Magnitude >= 500 then v.Parent = largeParts; return; end chunkFunction(v); end)); chunkLoaderMaid:GiveTask(LocalPlayer.CharacterAdded:Connect(function() SX_VM_CNONE(); rootPart = LocalPlayer.Character:WaitForChild("HumanoidRootPart",10); chunkLoaderMaid:GiveTask(rootPart.AncestryChanged:Connect(function() if not rootPart.Parent then rootPart = nil; end end)); end)) rootPart = LocalPlayer.Character:WaitForChild("HumanoidRootPart",5); chunkLoaderMaid:GiveTask(RunService.Stepped:Connect(function() SX_VM_CNONE(); rootPart = rootPart or workspace.CurrentCamera; local position = rootPart.CFrame.Position / 100; local chunkRenderDistance = library.flags.renderDistance; local floatPosition = newVector3(floor(position.X), 0, floor(position.Z)) if (floatPosition == lastChunk and lastRenderDistance==chunkRenderDistance) then return; end; local chunkUnloadDistance = chunkRenderDistance * 2; lastChunk = floatPosition; lastRenderDistance = library.flags.renderDistance; local unloadedChunks = {}; for i, chunkData in next, loadedChunks do local chunkDistance = (floatPosition - chunkData.p).Magnitude; if (chunkDistance > chunkUnloadDistance * 2) then chunkData.chunk.Parent = chunkFolders; allChunks[chunkData.x][chunkData.z] = chunkData.chunk; tableInsert(unloadedChunks, chunkData); end; end; for _, v in next, unloadedChunks do tableRemove(loadedChunks, table.find(loadedChunks, v)) end; for x = -chunkRenderDistance, chunkRenderDistance do for z = -chunkRenderDistance, chunkRenderDistance do local chunkPosition = floatPosition + newVector3(x, 0, z); local x, z = chunkPosition.X, chunkPosition.Z; local xChunk = allChunks[x]; local currentChunk = xChunk and xChunk[z]; if (not currentChunk) then continue end; currentChunk.Parent = activeChunks; xChunk[z] = nil; tableInsert(loadedChunks, { chunk = currentChunk, p = chunkPosition * staticVector, x = x, z = z }); end; end; end)); end end; do -- One Shot NPCs local mobs = {}; local NetworkOneShot = {}; NetworkOneShot.__index = NetworkOneShot; function NetworkOneShot.new(mob) local self = setmetatable({},NetworkOneShot); self._maid = Maid.new(); self.char = mob; self._maid:GiveTask(mob.Destroying:Connect(function() self:Destroy(); end)); self._maid:GiveTask(Utility.listenToChildAdded(mob, function(obj) if (obj.Name == 'HumanoidRootPart') then self.hrp = obj; end; end)); mobs[mob] = self; return self; end; function NetworkOneShot:Update() if (not self.hrp or not isnetworkowner(self.hrp) or not self.hrp.Parent or self.hrp.Parent.Parent ~= workspace.Live) then return end; self.char:PivotTo(CFrame.new(self.hrp.Position.X, workspace.FallenPartsDestroyHeight - 100000, self.hrp.Position.Z)); end; function NetworkOneShot:Destroy() self._maid:DoCleaning(); for i,v in next, mobs do if (v ~= self) then continue; end mobs[i] = nil; end; end; function NetworkOneShot:ClearAll() for _, v in next, mobs do v:Destroy(); end; table.clear(mobs); end; Utility.listenToChildAdded(workspace.Live, function(obj) task.wait(0.2); if (obj == LocalPlayer.Character) then return; end NetworkOneShot.new(obj); end); function functions.networkOneShot(t) if (not t) then maid.networkOneShot = nil; maid.networkOneShot2 = nil; return; end; maid.networkOneShot2 = RunService.Heartbeat:Connect(function() sethiddenproperty(LocalPlayer, 'MaxSimulationRadius', math.huge); sethiddenproperty(LocalPlayer, 'SimulationRadius', math.huge); end); maid.networkOneShot = task.spawn(function() while task.wait() do for _, mob in next, mobs do mob:Update(); end; end; end); end; end; do -- Give Anim Gamepass function functions.giveAnimGamepass(t) if (not t) then return end; -- Add emote pack gamepass CollectionService:AddTag(LocalPlayer, 'EmotePack1'); CollectionService:AddTag(LocalPlayer, 'MetalBadge'); local gestureGui = LocalPlayer:WaitForChild('PlayerGui', 10):WaitForChild('GestureGui'); -- Clear all emotes cause we rerun the script for _, child in next, gestureGui.MainFrame.GestureScroll:GetChildren() do if (child:IsA('TextLabel')) then child:Destroy(); end; end; gestureGui.GestureClient.Enabled = false; gestureGui.GestureClient.Enabled = true; end; end; end; local localCheats = column1:AddSection('Local Cheats'); local notifier = column1:AddSection('Notifier'); local playerMods = column1:AddSection('Player Mods'); local autoParry = column2:AddSection('Auto Parry'); local autoParryMaker = column1:AddSection('Auto Parry Maker'); local misc = column1:AddSection('Misc'); local autoLoot = column2:AddSection('Auto Loot'); local visuals = column2:AddSection('Visuals'); local farms = column2:AddSection('Farms'); local inventoryViewer = column2:AddSection('Inventory Viewer'); do -- // Inventory Viewer (SMH) local inventoryLabels = {}; local itemColors = {}; itemColors[100] = Color3.new(0.76862699999999995, 1, 0); itemColors[9] = Color3.new(1, 0.90000000000000002, 0.10000000000000001); itemColors[10] = Color3.new(0, 1, 0); itemColors[11] = Color3.new(0.90000000000000002, 0, 1); itemColors[3] = Color3.new(0, 0.80000000000000004, 1); itemColors[8] = Color3.new(0.17254900000000001, 0.80000000000000004, 0.64313699999999996); itemColors[7] = Color3.new(1, 0.61568599999999996, 0); itemColors[6] = Color3.new(1, 0, 0); itemColors[4] = Color3.new(0.82745100000000005, 0.466667, 0.207843); itemColors[0] = Color3.new(1, 1, 1); itemColors[5] = Color3.new(0.33333299999999999, 0, 1); itemColors[999] = Color3.new(0.792156, 0.792156, 0.792156); local function getToolType(tool) if (tool:FindFirstChild("Weapon")) then return 0; elseif (tool:FindFirstChild("Mantra") or tool:FindFirstChild("Spec")) then return 3; elseif (tool:FindFirstChild("Talent")) then return 100; elseif (tool:FindFirstChild("Equipment")) then return 7; elseif (tool:FindFirstChild("WeaponTool")) then return 6; elseif (tool:FindFirstChild("Training")) then return 4; elseif (tool:FindFirstChild("Potion")) then return 5; elseif (tool:FindFirstChild("Schematic")) then return 8; elseif (tool:FindFirstChild("Ingredient")) then return 10; elseif (tool:FindFirstChild("SpellIngredient")) then return 11; elseif (tool:FindFirstChild("Item")) then return 9; end return 999; end; local function showPlayerInventory(player) if (typeof(player) ~= 'Instance') then return end; for _, v in next, inventoryLabels do v.main:Destroy(); end; inventoryLabels = {}; local playerItems = {}; local seen = {}; local seenJSON = {}; local function onBackpackChildAdded(tool) debug.profilebegin('onBackpackChildAdded'); local toolName = tool:GetAttribute('DisplayName') or tool.Name:gsub('[^:]*:', ''):gsub('%$[^%$]*', ''); local toolType = getToolType(tool); local weaponData = tool:FindFirstChild('WeaponData'); xpcall(function() weaponData = seenJSON[weaponData] or HttpService:JSONDecode(weaponData.Value); end, function() weaponData = syn.crypt.base64.decode(weaponData.Value); weaponData = weaponData:sub(1, #weaponData - 2); weaponData = HttpService:JSONDecode(weaponData); end); if (typeof(weaponData) == 'table') then table.foreach(weaponData, warn); toolName = string.format('%s%s', toolName, (weaponData.Soulbound or weaponData.SoulBound) and ' [Soulbound]' or ''); end; local exitingPlayerItem = seen[toolName]; if (exitingPlayerItem) then exitingPlayerItem.quantity += 1; return; end; local playerItem = { type = toolType, toolName = toolName, quantity = 1 }; table.insert(playerItems, playerItem); seen[toolName] = playerItem; end; for _, tool in next, player.Backpack:GetChildren() do task.spawn(onBackpackChildAdded, tool); end; table.sort(playerItems, function(a, b) return a.type < b.type; end); for _, v in next, playerItems do v.text = ('%s [x%d]'):format(itemColors[v.type]:ToHex(), v.toolName, v.quantity); table.insert(inventoryLabels, inventoryViewer:AddLabel(v.text)); end; end; inventoryViewer:AddList({ text = 'Player', tip = 'Player to watch inventory for', playerOnly = true, skipflag = true, callback = showPlayerInventory }); end; do -- // Removals playerMods:AddToggle({ text = 'No Fall Damage', tip = 'Removes fall damage for you' }); playerMods:AddToggle({ text = 'No Stun', tip = 'Makes it so you will not get stunned in combat', }); playerMods:AddToggle({ text = 'No Wind', tip = 'Disables the slow during wind in Layer 2', callback = functions.noWind }); playerMods:AddToggle({ text = 'No Kill Bricks', tip = 'Removes all the kill bricks', callback = functions.noKillBricks }); playerMods:AddToggle({ text = 'No Acid Damage', flag = 'Anti Acid', tip = 'Prevent you from taking damage from acid water.' }); playerMods:AddToggle({ text = 'No Anims (Risky)', flag = 'No Anims', tip = 'Disable all your anims', callback = functions.noAnims }); playerMods:AddToggle({ text = 'No Jump Cooldown', tip = 'Makes it so you can jump even when on cooldown.' }) playerMods:AddToggle({ text = 'No Stun Less Blatant', tip = 'Like no stun but it\'s less blatant' }); playerMods:AddToggle({ text = 'Give Anim Gamepass', tip = 'Allows you to use all the animations ingame for free without the gamepass.', callback = functions.giveAnimGamepass }); end; do -- // Local Cheats localCheats:AddDivider("Movement"); localCheats:AddToggle({ text = 'Fly', callback = functions.fly }):AddSlider({ min = 16, max = 200, flag = 'Fly Hack Value' }); localCheats:AddToggle({ text = 'Speedhack', callback = functions.speedHack }):AddSlider({ min = 16, max = 200, flag = 'Speed Hack Value' }); localCheats:AddToggle({ text = 'Infinite Jump', callback = functions.infiniteJump }):AddSlider({ min = 50, max = 250, flag = 'Infinite Jump Height' }); localCheats:AddToggle({ text = 'Agility Spoofer', callback = functions.agilitySpoofer, tip = 'This sets your ingame agility to x amount, allowing you to slide further and climb higher.' }):AddSlider({ flag = 'Agility Spoofer Value', min = 0, max = 250 }); localCheats:AddToggle({ text = 'No Clip', callback = functions.noClip }); localCheats:AddToggle({ text = 'Disable When Knocked', tip = 'Disables noclip when you get ragdolled', flag = 'Disable No Clip When Knocked' }); localCheats:AddToggle({ text = 'Knocked Ownership', tip = 'Allow you to fly/move while being knocked.' }) localCheats:AddToggle({ text = 'Use Weapon', tip = 'Uses your weapon to make knocked ownership work', flag = 'Use Weapon For Knocked Ownership' }); localCheats:AddToggle({ text = 'Click Destroy', tip = 'Everything you click on will be destroyed (client sided)', callback = functions.clickDestroy }); localCheats:AddBind({text = 'Go To Ground', callback = functions.goToGround, mode = 'hold', nomouse = true}); localCheats:AddBind({ text = 'Tween to Objectives', tip = 'This will automatically go to bloodjars, bones and the obelisks in layer 2 when held down.', mode = 'hold', callback = functions.autoBloodjar }); localCheats:AddDivider("Gameplay-Assist"); localCheats:AddToggle({ text = 'M1 Hold', tip = 'Automatically spams m1, when you hold it down', callback = functions.holdM1 }); localCheats:AddToggle({ text = 'Auto Wisp', tip = 'Automatically solve the wisp puzzles by pressing keys for you', callback = functions.autoWisp }); localCheats:AddToggle({ text = 'Auto Perfect Cast', tip = 'Automatically perfect cast your mantra' }); localCheats:AddToggle({ text = 'Easy Mantra Feint', tip = 'Allows you to right click to feint your mantra' }); localCheats:AddToggle({ text = 'Auto Unragdoll', tip = 'Automatically right click when you get ragdolled', callback = functions.autoUnragdoll }); localCheats:AddToggle({ text = 'Auto Sprint', tip = 'Whenever you want to walk you sprint instead', callback = functions.autoSprint }); localCheats:AddToggle({ text = 'Silent Aim', tip = 'If toggled with FOV check in aimbot section, your attacks aimed attacks will automatically go towards towards them if in the FOV circle' }); localCheats:AddToggle({ text = 'Auto Ressurect', tip = '(WARNING: CAN WIPE YOU): This function will trigger when the ressurect bell is used and will knock you so that you resurrect up with more HP', callback = functions.autoRes }):AddSlider({ suffix = '% HP', min = 0, max = 40, flag = "Res Hp Percent" }); localCheats:AddDivider("Combat Tweaks"); localCheats:AddToggle({ text = 'One Shot Mobs', tip = 'This feature randomly works sometimes and causes them to die, but it makes AP have issues', callback = functions.networkOneShot }); localCheats:AddToggle({ text = 'Anti Auto Parry', tip = 'Breaks all auto parry other than users who are also using aztup hub.', callback = functions.antiAutoParry }); localCheats:AddBind({ text = 'Instant Log', nomouse = true, callback = function() ReplicatedStorage.Requests.ReturnToMenu:FireServer(); local playerGui = LocalPlayer:FindFirstChild('PlayerGui'); if (not playerGui) then return end; local choicePrompt = playerGui:WaitForChild('ChoicePrompt', 25); if (not choicePrompt) then return end; choicePrompt.Choice:FireServer(true); end }); localCheats:AddButton({ text = 'Server Hop', tip = 'Jumps to any other server, non region dependant', callback = functions.serverHop }); localCheats:AddBind({ text = 'Attach To Back', tip = 'This attaches to the nearest entities back based on settings', callback = functions.attachToBack, }); localCheats:AddSlider({ text = 'Attach To Back Height', value = 0, min = -100, max = 100, textpos = 2 }); localCheats:AddSlider({ text = 'Attach To Back Space', value = 2, min = -100, max = 100, textpos = 2 }); end; do --// Notifier notifier:AddToggle({ text = 'Mod Notifier', state = true }); notifier:AddToggle({ text = 'Moderator Sound Alert', tip = 'Makes a sound when the mod joins', state = true }); notifier:AddToggle({ text = 'Void Walker Notifier', state = true }); notifier:AddToggle({ text = 'Mythic Item Notifier', }); notifier:AddToggle({ text = 'Artifact/Owl Notifier', flag = 'Artifact Notifier' }); notifier:AddToggle({ text = 'Player Proximity Check', tip = 'Gives you a warning when a player is close to you', callback = functions.playerProximityCheck }); end do -- // Auto Parry autoParry:AddToggle({ text = 'Enable', flag = 'Auto Parry', tip = 'Automatically parry when you are attacked.', callback = functions.autoParry }):AddSlider({ text = 'Ping Adjustment %', flag = 'Ping Adjustment Percentage', min = 0, value = 75, step = 0.05, max = 100, textpos = 2, tip = 'Play with this slider to find what is best for you, we recommend 75%-50%' }); autoParry:AddSlider({ text = 'Parry Chance', tip = 'Determines the chance of you parrying an attack', suffix = '%', textpos = 2, min = 0, max = 100, float = 1, value = 100 }); autoParry:AddToggle({ text = 'Parry When Dodging', state = true, tip = 'The auto parry will parry when you have dodge frames, it is recommended you turn this on if you have issues with AP' }); autoParry:AddToggle({ text = 'Parry Vent', tip = 'This determines whether or not you will attempt to parry vents from other players', state = true }); autoParry:AddToggle({ text = 'Use Custom Delay', tip = 'Disables ping adjust in favor of the timing you specify', }):AddSlider({ text = 'Custom Delay', suffix = 'ms', flag = "Custom Delay", min = -500, value = 0, max = 500, textpos = 2, tip = 'Adjust all the parry timings by this number.' }) autoParry:AddSlider({ text = 'Distance Adjustment', min = -25, value = 0, max = 25, textpos = 2, tip = 'Adjust all the parry max distances.' }); autoParry:AddToggle({ text = 'Parry Roll', tip = 'Always roll instead of parying if you are not on roll cooldown when you are attacked (Only useful for PvP).' }); autoParry:AddToggle({ text = 'Roll After Feint', tip = 'Automatically roll on the next attack after a feint, only if you on parry cooldown.' }); autoParry:AddToggle({ text = 'Roll Cancel', tip = 'Automatically cancel roll after the autoparry dodges.' }):AddSlider({ text = 'Roll Cancel Delay', min = 0, max = 1, value = 0, float = 0.1, textpos = 2, tip = 'How long the autoparry will wait before cancelling their dodge' }); autoParry:AddToggle({ text = 'Blatant Roll', tip = 'Instantly roll cancels without moving, recommended for use with AP' }); autoParry:AddToggle({ text = 'Check If Facing Target', tip = 'Only parry if you are facing the target.' }); autoParry:AddToggle({ text = 'Check If Target Face You', tip = 'Only parry if you the target is facing you.' }); autoParry:AddToggle({ text = 'Auto Feint', tip = 'This will feint for you if you are mid attack but need to parry, which allows you to parry their attack' }); autoParry:AddToggle({ text = 'Auto Feint Mantra', tip = 'Automatically feint your cast if you are using a mantra and auto parry wants to parry.' }); autoParry:AddToggle({ text = 'Block Input', tip = 'This will prevent you from attacking whenever the opponent is attacking, essentially allowing you to hold M1 with less punishment.' }); autoParry:AddList({ text = 'Auto Parry Mode', values = {'Guild', 'Players', 'Mobs', 'All'}, tip = 'This will make it so the autoparry will only parry this group of entities, such as mobs, player or guild members.', multiselect = true }); autoParry:AddList({ text = 'Auto Parry Whitelist', noload = true, skipflag = true, playerOnly = true, multiselect = true }); end; do -- // Auto Parry Maker autoParryMaker:AddToggle({ text = 'Auto Parry Helper', tip = 'Shows the auto parry maker helper.', callback = functions.autoParryHelper }):AddSlider({ text = 'Helper Max Range', min = 10, max = 10000, textpos = 2, }); autoParryMaker:AddSlider({ text = 'Block Point Max Range', min = 0, max = 1000, textpos = 2 }); autoParryMaker:AddBox({ text = 'Animation Id', tip = 'Put the animation id you want auto parry helper to parry.', }); autoParryMaker:AddButton({ text = 'Add Block Point', callback = function() functions.addBlockPoint(autoParryMaker); end, }); autoParryMaker:AddButton({ text = 'Add Wait Point', callback = function() functions.addWaitPoint(autoParryMaker); end, }); autoParryMaker:AddButton({ text = 'Export Config', callback = functions.exportBlockPoints, }); -- autoParryMaker:AddList({ -- text = 'Confidantiality Level', -- values = {'Public', 'Private', 'Unlisted'}, -- tip = 'Visibility level for this config.', -- }); autoParryMaker:AddDivider('Block Points'); end; do -- // Auto Loot autoLoot:AddToggle({ text = 'Auto Loot', tip = 'Automatically loot all items from a chest.', callback = functions.autoLoot }); autoLoot:AddToggle({ text = 'Auto Close Chest', tip = 'Automatically close chest once auto loot is done.' }); autoLoot:AddToggle({ text = 'Auto Open Chest', tip = 'Automatically open all chest near you.', callback = functions.autoOpenChest }); functions.setupAutoLoot(autoLoot); end; do -- // Misc local realmInfo = require(ReplicatedStorage.Info.RealmInfo); local isLuminant = rawget(realmInfo, 'IsLuminant') or false; local names = rawget(realmInfo, 'Names') or {}; local currentWorld = rawget(realmInfo, 'CurrentWorld') or ''; local oppositeWorld = currentWorld == 'EastLuminant' and 'EtreanLuminant' or 'EastLuminant'; misc:AddDivider('Perfomance Improvements'); misc:AddToggle({ text = 'FPS Boost', tip = 'Improves FPS by making game functions faster', callback = functions.fpsBoost }); misc:AddToggle({ text = 'Disable Shadows', tip = 'Disabling all shadows adds a large bump to your FPS', callback = functions.disableShadows }); misc:AddToggle({ text = 'Chunk Loader', tip = 'Loading multiple locations of the map lags you, the chunk loader will mitigate this', callback = functions.chunkLoaderToggle }):AddSlider({ text = 'Render Distance', min = 5, value = 10, max = 25, float = 1 }) misc:AddDivider("Streamer Tools"); misc:AddToggle({ text = 'Streamer Mode', tip = 'Locally modify/hide your name so you can record without worying about getting banned.', callback = functions.streamerMode }) misc:AddToggle({ text = 'Ultra Streamer Mode', tip = 'Enable that with streamer mode if you are streaming and want nobody to find/join you' }); misc:AddList({ flag = 'Streamer Mode Type', tip = 'Spoof = modifies character info to fake one. Hide = Hide character info', values = {'Spoof', 'Hide'}, callback = function() functions.streamerMode(library.flags.streamerMode); end }); misc:AddToggle({ text = 'Hide All Server Info', tip = 'Enable that with streamer mode if dont want any server info on top bar' }); misc:AddToggle({ text = 'Hide Esp Names' }); misc:AddButton({ text = 'Rebuild Streamer Mode', callback = functions.rebuildStreamerMode, noload = true, skipflag = true, tip = 'Rebuild streamer mode fake info.', }) misc:AddDivider('Chat Logger', 'You can right click the chatlogger to report infractions.'); misc:AddToggle({ text = 'Chat Logger', tip = 'You can right click users on the chat logger to report them for infractions to the TOS', callback = functions.chatLogger }); misc:AddToggle({ text = 'Chat Logger Auto Scroll' }); misc:AddToggle({ text = 'Use Alt Manager To Block' }); misc:AddDivider('Race Changer'); -- Setup race changer local raceChanger = sharedRequire('@games/DeepWokenRaceChanger.lua'); raceChanger(misc); end; do -- // Visuals visuals:AddToggle({ text = 'No Fog', callback = functions.noFog }); visuals:AddToggle({ text = 'No Blur', callback = functions.noBlur }); visuals:AddToggle({ text = 'No Blind', callback = functions.noBlind }); visuals:AddToggle({ text = 'Full Bright' }):AddSlider({ flag = 'Full Bright Value', min = 0, max = 10, value = 1, }); end; do -- // Farms farms:AddToggle({ text = 'Fort Merit Farm', callback = functions.fortMeritFarm }); farms:AddToggle({ text = 'Echo Farm', tip = 'This will automatically farm cooked meals for echoes, you need to have echoes unlocked to use this.', callback = functions.echoFarm }); farms:AddToggle({ text = 'Animal King Farm', tip = 'This will automatically farm for AK, requires you to have Trial Of One spawn unlocked, you can wipe with animal king and keep it before level 3', callback = functions.animalKingFarm }); farms:AddToggle({ text = 'Ores Farm', tip = 'This will only farm Astruline, use near a section of astruline for it to work', callback = functions.oresFarm }); farms:AddButton({ text = 'Set Ores Farm Position', tip = 'Use this before using Ores Farm to set the position that you will farm at', callback = functions.setOresFarmPosition }); farms:AddBox({ text = 'Ores Farm Webhook Notifier' }); farms:AddBox({ text = 'Animal King Webhook Notifier' }); farms:AddToggle({ text = 'Charisma Farm', callback = functions.charismaFarm }); farms:AddToggle({ text = 'Intelligence Farm', callback = functions.intelligenceFarm }); farms:AddToggle({ text = 'Auto Fish', flag = 'Fish Farm', callback = functions.fishFarm }):AddSlider({ text = 'Auto Fish Hold Time', flag = 'Fish Farm Hold Time', min = 0.1, max = 2, float = 0.1, value = 0.5, textpos = 2 }); farms:AddBox({ text = 'Fish Farm Bait', tip = 'Set the bait for the fish farm, you can leave this box empty if you dont want to use any you can also add multiple bait with ,.', }); end; -- do -- // Analytics -- local lootDropAnalytics = AnalyticsAPI.new(''); -- local function getProperties(obj, t) -- local propertiesToLog = t; -- local properties = {}; -- for _, v in next, propertiesToLog do -- table.insert(properties, string.format('%s = %s', v, tostring(obj[v]))); -- end; -- return table.concat(properties, '|'); -- end; -- library.unloadMaid:GiveTask(Utility.listenToTagAdded('LootDrop', function(obj) -- local isMesh = IsA(obj, 'MeshPart'); -- if (IsA(obj, 'Part') or isMesh) then -- local properties = getProperties(obj, {'Size', 'Material', 'Color', isMesh and 'MeshId' or nil}); -- lootDropAnalytics:Report(isMesh and 'MeshPart' or 'Part', properties, 1); -- elseif (IsA(obj, 'UnionOperation')) then -- local id = getproperties(obj).AssetId; -- local properties = getProperties(obj, {'Size', 'Material', 'Color'}); -- table.insert(properties, 'AssetId = ' .. tostring(id)); -- lootDropAnalytics:Report('UnionOperation', tostring(id), 1); -- end; -- end)); -- end;