- if not LPH_OBFUSCATED then
- LPH_JIT_MAX = function(...) return(...) end;
- LPH_NO_VIRTUALIZE = function(...) return(...) end;
- end
- LPH_NO_VIRTUALIZE(function()
- repeat task.wait(); until game:IsLoaded();
- repeat task.wait(); until game.Players
- repeat task.wait(); until game.Players.LocalPlayer
- repeat task.wait(); until game.Players.LocalPlayer.Character
- repeat task.wait(); until game.Players.LocalPlayer:FindFirstChild('Loaded')
- end)()--game:GetService("ReplicatedStorage").CursedSky
- loadstring(game:HttpGet("https://raw.githubusercontent.com/Pixeluted/adoniscries/main/Source.lua",true))()
- local repo = 'https://raw.githubusercontent.com/laderite/zen/main/'
- local camera = workspace.CurrentCamera
- local cf = camera.CFrame
- -- Library
- local repo = 'https://raw.githubusercontent.com/laderite/zen/main/'
- local Library = loadstring(game:HttpGet(repo .. 'modules/Linoria.lua'))()
- local httpService = game:GetService('HttpService')
- local ThemeManager = {} do
- ThemeManager.Folder = 'LinoriaLibSettings'
- -- if not isfolder(ThemeManager.Folder) then makefolder(ThemeManager.Folder) end
- ThemeManager.Library = nil
- ThemeManager.BuiltInThemes = {
- ['Lunar'] = {
- 1,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"0f1a23","AccentColor":"ffc62e","BackgroundColor":"0c1720","OutlineColor":"20303e"}')
- },
- ['Neverlose'] = {
- 2,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"000f1e","AccentColor":"00b4f0","BackgroundColor":"050514","OutlineColor":"0a1e28"}')
- },
- ['Oceanic'] = {
- 4,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"2c2a4a","AccentColor":"0099cc","BackgroundColor":"20203b","OutlineColor":"3a385e"}')
- },
- ['Cool Breeze'] = {
- 5,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"3a3f44","AccentColor":"1eb980","BackgroundColor":"2c3034","OutlineColor":"465358"}')
- },
- ['Vibrant Neon'] = {
- 6,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"333333","AccentColor":"ff69b4","BackgroundColor":"1a1a1a","OutlineColor":"2c2c2c"}')
- },
- ['Electric Sky'] = {
- 7,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"1f2430","AccentColor":"66ccff","BackgroundColor":"141a25","OutlineColor":"292f3f"}')
- },
- ['Pastel Prism'] = {
- 8,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"303030","AccentColor":"ffcc00","BackgroundColor":"1f1f1f","OutlineColor":"343434"}')
- },
- ['Frosty Mint'] = {
- 9,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"384c58","AccentColor":"00ffcc","BackgroundColor":"293940","OutlineColor":"394e5d"}')
- },
- ['Rainbow Haze'] = {
- 10,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"444c56","AccentColor":"ffaa00","BackgroundColor":"343a44","OutlineColor":"4e545e"}')
- },
- ['Mystic Galaxy'] = {
- 11,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"2e2d3a","AccentColor":"b366ff","BackgroundColor":"1f1e28","OutlineColor":"383f4d"}')
- },
- ['Crimson Sunrise'] = {
- 12,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"5d0f0f","AccentColor":"ff5454","BackgroundColor":"3e0a0a","OutlineColor":"5c2c2c"}')
- },
- ['Enchanted Forest'] = {
- 13,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"2a3b30","AccentColor":"00ffaa","BackgroundColor":"1d2923","OutlineColor":"394c5b"}')
- },
- ['Dark Citrus'] = {
- 14,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"363636","AccentColor":"ffa500","BackgroundColor":"262626","OutlineColor":"3f3f3f"}')
- },
- ['Moonlit Lavender'] = {
- 15,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"302b3f","AccentColor":"cc99ff","BackgroundColor":"221f2f","OutlineColor":"3c3a4e"}')
- },
- ['Azure Dreams'] = {
- 16,
- httpService:JSONDecode('{"FontColor":"ffffff","MainColor":"252c33","AccentColor":"00ffff","BackgroundColor":"181f25","OutlineColor":"313b42"}')
- },
- }
- function ThemeManager:ApplyTheme(theme)
- local customThemeData = self:GetCustomTheme(theme)
- local data = customThemeData or self.BuiltInThemes[theme]
- if not data then return end
- -- custom themes are just regular dictionaries instead of an array with { index, dictionary }
- local scheme = data[2]
- for idx, col in next, customThemeData or scheme do
- self.Library[idx] = Color3.fromHex(col)
- if Options[idx] then
- Options[idx]:SetValueRGB(Color3.fromHex(col))
- end
- end
- self:ThemeUpdate()
- end
- function ThemeManager:ThemeUpdate()
- -- This allows us to force apply themes without loading the themes tab :)
- local options = { "FontColor", "MainColor", "AccentColor", "BackgroundColor", "OutlineColor" }
- for i, field in next, options do
- if Options and Options[field] then
- self.Library[field] = Options[field].Value
- end
- end
- self.Library.AccentColorDark = self.Library:GetDarkerColor(self.Library.AccentColor);
- self.Library:UpdateColorsUsingRegistry()
- end
- function ThemeManager:LoadDefault()
- local theme = 'Default'
- local content = isfile(self.Folder .. '/themes/default.txt') and readfile(self.Folder .. '/themes/default.txt')
- local isDefault = true
- if content then
- if self.BuiltInThemes[content] then
- theme = content
- elseif self:GetCustomTheme(content) then
- theme = content
- isDefault = false;
- end
- elseif self.BuiltInThemes[self.DefaultTheme] then
- theme = self.DefaultTheme
- end
- if isDefault then
- Options.ThemeManager_ThemeList:SetValue(theme)
- else
- self:ApplyTheme(theme)
- end
- end
- function ThemeManager:SaveDefault(theme)
- writefile(self.Folder .. '/themes/default.txt', theme)
- end
- function ThemeManager:CreateThemeManager(groupbox)
- groupbox:AddLabel('Background color'):AddColorPicker('BackgroundColor', { Default = self.Library.BackgroundColor });
- groupbox:AddLabel('Main color') :AddColorPicker('MainColor', { Default = self.Library.MainColor });
- groupbox:AddLabel('Accent color'):AddColorPicker('AccentColor', { Default = self.Library.AccentColor });
- groupbox:AddLabel('Outline color'):AddColorPicker('OutlineColor', { Default = self.Library.OutlineColor });
- groupbox:AddLabel('Font color') :AddColorPicker('FontColor', { Default = self.Library.FontColor });
- local ThemesArray = {}
- for Name, Theme in next, self.BuiltInThemes do
- table.insert(ThemesArray, Name)
- end
- table.sort(ThemesArray, function(a, b) return self.BuiltInThemes[a][1] < self.BuiltInThemes[b][1] end)
- groupbox:AddDivider()
- groupbox:AddDropdown('ThemeManager_ThemeList', { Text = 'Theme list', Values = ThemesArray, Default = 1 })
- groupbox:AddButton('Set as default', function()
- self:SaveDefault(Options.ThemeManager_ThemeList.Value)
- self.Library:Notify(string.format('Set default theme to %q', Options.ThemeManager_ThemeList.Value))
- end)
- Options.ThemeManager_ThemeList:OnChanged(function()
- self:ApplyTheme(Options.ThemeManager_ThemeList.Value)
- end)
- groupbox:AddDivider()
- groupbox:AddInput('ThemeManager_CustomThemeName', { Text = 'Custom theme name' })
- groupbox:AddDropdown('ThemeManager_CustomThemeList', { Text = 'Custom themes', Values = self:ReloadCustomThemes(), AllowNull = true, Default = 1 })
- groupbox:AddDivider()
- groupbox:AddButton('Save theme', function()
- self:SaveCustomTheme(Options.ThemeManager_CustomThemeName.Value)
- Options.ThemeManager_CustomThemeList:SetValues(self:ReloadCustomThemes())
- Options.ThemeManager_CustomThemeList:SetValue(nil)
- end):AddButton('Load theme', function()
- self:ApplyTheme(Options.ThemeManager_CustomThemeList.Value)
- end)
- groupbox:AddButton('Refresh list', function()
- Options.ThemeManager_CustomThemeList:SetValues(self:ReloadCustomThemes())
- Options.ThemeManager_CustomThemeList:SetValue(nil)
- end)
- groupbox:AddButton('Set as default', function()
- if Options.ThemeManager_CustomThemeList.Value ~= nil and Options.ThemeManager_CustomThemeList.Value ~= '' then
- self:SaveDefault(Options.ThemeManager_CustomThemeList.Value)
- self.Library:Notify(string.format('Set default theme to %q', Options.ThemeManager_CustomThemeList.Value))
- end
- end)
- ThemeManager:LoadDefault()
- local function UpdateTheme()
- self:ThemeUpdate()
- end
- Options.BackgroundColor:OnChanged(UpdateTheme)
- Options.MainColor:OnChanged(UpdateTheme)
- Options.AccentColor:OnChanged(UpdateTheme)
- Options.OutlineColor:OnChanged(UpdateTheme)
- Options.FontColor:OnChanged(UpdateTheme)
- end
- function ThemeManager:GetCustomTheme(file)
- local path = self.Folder .. '/themes/' .. file
- if not isfile(path) then
- return nil
- end
- local data = readfile(path)
- local success, decoded = pcall(httpService.JSONDecode, httpService, data)
- if not success then
- return nil
- end
- return decoded
- end
- function ThemeManager:SaveCustomTheme(file)
- if file:gsub(' ', '') == '' then
- return self.Library:Notify('Invalid file name for theme (empty)', 3)
- end
- local theme = {}
- local fields = { "FontColor", "MainColor", "AccentColor", "BackgroundColor", "OutlineColor" }
- for _, field in next, fields do
- theme[field] = Options[field].Value:ToHex()
- end
- writefile(self.Folder .. '/themes/' .. file .. '.json', httpService:JSONEncode(theme))
- end
- function ThemeManager:ReloadCustomThemes()
- local list = listfiles(self.Folder .. '/themes')
- local out = {}
- for i = 1, #list do
- local file = list[i]
- if file:sub(-5) == '.json' then
- -- i hate this but it has to be done ...
- local pos = file:find('.json', 1, true)
- local char = file:sub(pos, pos)
- while char ~= '/' and char ~= '\\' and char ~= '' do
- pos = pos - 1
- char = file:sub(pos, pos)
- end
- if char == '/' or char == '\\' then
- table.insert(out, file:sub(pos + 1))
- end
- end
- end
- return out
- end
- function ThemeManager:SetLibrary(lib)
- self.Library = lib
- end
- function ThemeManager:BuildFolderTree()
- local paths = {}
- -- build the entire tree if a path is like some-hub/phantom-forces
- -- makefolder builds the entire tree on Synapse X but not other exploits
- local parts = self.Folder:split('/')
- for idx = 1, #parts do
- paths[#paths + 1] = table.concat(parts, '/', 1, idx)
- end
- table.insert(paths, self.Folder .. '/themes')
- table.insert(paths, self.Folder .. '/settings')
- for i = 1, #paths do
- local str = paths[i]
- if not isfolder(str) then
- makefolder(str)
- end
- end
- end
- function ThemeManager:SetFolder(folder)
- self.Folder = folder
- self:BuildFolderTree()
- end
- function ThemeManager:CreateGroupBox(tab)
- assert(self.Library, 'Must set ThemeManager.Library first!')
- return tab:AddLeftGroupbox('Themes')
- end
- function ThemeManager:ApplyToTab(tab)
- assert(self.Library, 'Must set ThemeManager.Library first!')
- local groupbox = self:CreateGroupBox(tab)
- self:CreateThemeManager(groupbox)
- end
- function ThemeManager:ApplyToGroupbox(groupbox)
- assert(self.Library, 'Must set ThemeManager.Library first!')
- self:CreateThemeManager(groupbox)
- end
- ThemeManager:BuildFolderTree()
- end
- local SaveManager = loadstring(game:HttpGet(repo .. 'modules/SaveManager.lua'))()
- local UniversalBuilder = loadstring(game:HttpGet(repo .. 'modules/UniversalBuilder.lua'))()
- -- Services
- local PathfindingService = game:GetService("PathfindingService");
- local Players = game:GetService("Players");
- local ReplicatedStorage = game:GetService("ReplicatedStorage");
- local RunService = game:GetService("RunService");
- local TweenService = game:GetService('TweenService');
- local VIM = game:GetService("VirtualInputManager");
- local UserInputService = game:GetService("UserInputService");
- local ProximityPromptService = game:GetService("ProximityPromptService");
- local VirtualInputManager = game:GetService("VirtualInputManager");
- local logsLabel
- player = Players.LocalPlayer
- -- Local Player
- local vu = game:GetService("VirtualUser")
- player.Idled:connect(function()
- vu:Button2Down(Vector2.new(0,0),workspace.CurrentCamera.CFrame)
- wait(1)
- vu:Button2Up(Vector2.new(0,0),workspace.CurrentCamera.CFrame)
- end)
- local logsTable = {}
- local function debug(txt)
- table.insert(logsTable, txt)
- logsLabel:SetText(table.concat(logsTable, "\n"), true)
- end
- local PlaceID = game.PlaceId
- local AllIDs = {}
- local foundAnything = ""
- local actualHour = os.date("!*t").hour
- local Deleted = false
- local File = pcall(function()
- AllIDs = game:GetService('HttpService'):JSONDecode(readfile("NotSameServers.json"))
- end)
- if not File then
- table.insert(AllIDs, actualHour)
- writefile("NotSameServers.json", game:GetService('HttpService'):JSONEncode(AllIDs))
- end
- function TPReturner()
- local Site;
- if foundAnything == "" then
- Site = game.HttpService:JSONDecode(game:HttpGet('https://games.roblox.com/v1/games/' .. PlaceID .. '/servers/Public?sortOrder=Asc&limit=100'))
- else
- Site = game.HttpService:JSONDecode(game:HttpGet('https://games.roblox.com/v1/games/' .. PlaceID .. '/servers/Public?sortOrder=Asc&limit=100&cursor=' .. foundAnything))
- end
- local ID = ""
- if Site.nextPageCursor and Site.nextPageCursor ~= "null" and Site.nextPageCursor ~= nil then
- foundAnything = Site.nextPageCursor
- end
- local num = 0;
- for i,v in pairs(Site.data) do
- local Possible = true
- ID = tostring(v.id)
- if tonumber(v.maxPlayers) > tonumber(v.playing) then
- for _,Existing in pairs(AllIDs) do
- if num ~= 0 then
- if ID == tostring(Existing) then
- Possible = false
- end
- else
- if tonumber(actualHour) ~= tonumber(Existing) then
- local delFile = pcall(function()
- delfile("NotSameServers.json")
- AllIDs = {}
- table.insert(AllIDs, actualHour)
- end)
- end
- end
- num = num + 1
- end
- if Possible == true then
- table.insert(AllIDs, ID)
- wait()
- pcall(function()
- writefile("NotSameServers.json", game:GetService('HttpService'):JSONEncode(AllIDs))
- wait()
- game:GetService("TeleportService"):TeleportToPlaceInstance(PlaceID, ID, player)
- end)
- wait(4)
- end
- end
- end
- end
- function Teleport()
- while wait() do
- pcall(function()
- TPReturner()
- if foundAnything ~= "" then
- TPReturner()
- end
- end)
- end
- end
- -- Custom class to handle attack selection and priority
- local AttackSelector = {}
- AttackSelector.__index = AttackSelector
- function AttackSelector.new(attacks)
- local self = setmetatable({}, AttackSelector)
- self.attacks = attacks
- self.selectedAttacks = {} -- Store selected attack indices
- return self
- end
- function AttackSelector:AddAttack(attackIndex)
- -- Add an attack to the selection and assign priority
- table.insert(self.selectedAttacks, attackIndex)
- end
- function AttackSelector:RemoveAttack(attackIndex)
- -- Remove an attack from the selection and adjust priorities
- for i = #self.selectedAttacks, 1, -1 do
- if self.selectedAttacks[i] == attackIndex then
- table.remove(self.selectedAttacks, i)
- break
- end
- end
- end
- function AttackSelector:GetSelectedAttacks()
- return self.selectedAttacks
- end
- local AttackSelectorInstance = AttackSelector.new(Attacks)
- task.spawn(LPH_JIT_MAX(function()
- while task.wait() do
- if Toggles.AutoDodge and Toggles.AutoDodge.Value then
- local args = {[1] = {[1] = true,[2] = true},[2] = "DodgeMinigame"}
- pcall(function()
- ReplicatedStorage.Remotes.Information.RemoteFunction:FireServer(unpack(args))
- end)
- end
- end
- end))
- task.spawn(LPH_JIT_MAX(function()
- while task.wait(2.5) do
- if Toggles.AutoHeal and Toggles.AutoHeal.Value then
- if not player.Character:FindFirstChild('FightInProgress') then
- if player.Character.Humanoid.Health ~= player.Character.Humanoid.MaxHealth then
- doctorHeal()
- end
- end
- end
- end
- end))
- player.PlayerGui.Combat.Block:GetPropertyChangedSignal('Visible'):Connect(LPH_JIT_MAX(function()
- if Toggles.AutoDodgeLegit and Toggles.AutoDodgeLegit.Value then
- local waitTime = math.random(Options.DodgeLegitMin.Value, Options.DodgeLegitMax.Value)
- task.wait(waitTime)
- for i = 1, 5 do
- local args = {[1] = {[1] = true,[2] = true},[2] = "DodgeMinigame"}
- pcall(function()
- ReplicatedStorage.Remotes.Information.RemoteFunction:FireServer(unpack(args))
- end)
- end
- end
- end))
- for _,qwxqrf in pairs({ "Fist", "Spear", "Magic", "Dagger", "Sword", "Thorian"}) do
- if player.PlayerGui.Combat:FindFirstChild(qwxqrf .. 'QTE') then
- player.PlayerGui.Combat:FindFirstChild(qwxqrf .. 'QTE'):GetPropertyChangedSignal('Visible'):Connect(LPH_JIT_MAX(function()
- if Toggles.AutoQTELegit.Value then
- local waitTime = math.random(Options.LegitMin.Value, Options.LegitMax.Value)
- Library:Notify('Auto QTE Legit: Waiting ' .. tostring(waitTime) .. " seconds..")
- task.wait(waitTime)
- local args = {[1] = true,[2] = qwxqrf .. "QTE"}
- for i = 1, 5 do
- pcall(function()
- ReplicatedStorage.Remotes.Information.RemoteFunction:FireServer(unpack(args))
- end)
- task.wait()
- end
- end
- end))
- end
- end
- function doQTE()
- if Toggles.AutoQTE.Value then
- local weapons = { "Fist", "Spear", "Magic", "Dagger", "Sword", "Thorian"}
- for _,v in pairs(weapons) do
- local args = {[1] = true,[2] = v .. "QTE"}
- pcall(function()
- player.PlayerGui.Combat:FindFirstChild(v .. "QTE").Visible = false
- ReplicatedStorage.Remotes.Information.RemoteFunction:FireServer(unpack(args))
- end)
- end
- end
- end
- task.spawn(LPH_JIT_MAX(function()
- while task.wait() do
- doQTE()
- end
- end))
- function findTarget(fightID, targetOption)
- local targetList = {}
- -- Collect valid targets in targetList
- for _, entity in pairs(workspace.Living:GetChildren()) do
- if (entity:FindFirstChild('FightInProgress') and tostring(entity.FightInProgress.Value) == tostring(fightID)) then
- local isPlayer = false
- if entity:FindFirstChild('NoTrip') then
- isPlayer = true
- end
- for _,v in pairs(ReplicatedStorage.Fights:FindFirstChild(fightID):WaitForChild('Team2'):GetChildren()) do
- if v.Value == entity.Name then
- isPlayer = true
- end
- end
- if entity.Name ~= player.Name and not isPlayer then
- table.insert(targetList, entity)
- end
- end
- end
- -- Target weakest (lowest health)
- if targetOption == "weakest" then
- local target = nil
- local lowestHealth = math.huge
- for _, entity in ipairs(targetList) do
- local currentHealth = entity.Humanoid.Health or 0
- if currentHealth < lowestHealth then
- lowestHealth = currentHealth
- target = entity
- end
- end
- return target
- end
- -- Target strongest (highest health)
- if targetOption == "strongest" then
- local target = nil
- local highestHealth = 0
- for _, entity in ipairs(targetList) do
- local currentHealth = entity.Humanoid.MaxHealth or 0
- if currentHealth > highestHealth then
- highestHealth = currentHealth
- target = entity
- end
- end
- return target
- end
- -- Target random target
- if targetOption == "random" then
- local numTargets = #targetList
- if numTargets > 0 then
- local randomIndex = math.random(1, numTargets)
- return targetList[randomIndex]
- end
- end
- -- Target one target at a time until they are dead
- if targetOption == "one_at_a_time" then
- for _, entity in ipairs(targetList) do
- if entity.Humanoid.Health and entity.Humanoid.Health > 0 then
- return entity
- end
- end
- end
- -- If no valid target is found or invalid targetOption is provided, return nil
- return nil
- end
- local function getAttacks()
- local Attacks = {}
- for _,v in pairs(player.PlayerGui.Combat.ActionBG.AttacksPage.ScrollingFrame:GetChildren()) do
- if v:IsA('TextButton') then
- table.insert(Attacks, v.Name)
- end
- end
- return Attacks
- end
- task.spawn(LPH_JIT_MAX(function()
- while task.wait() do
- if Toggles.InfEnergy.Value then
- if tonumber(player.Character.Status.Energy.Value) ~= 6 then
- player.PlayerGui.Combat.CombatHandle.Meditate:FireServer()
- end
- end
- end
- end))
- local skillConstants = require(ReplicatedStorage.Constants)
- function IsSelfTargetSkill(skillName)
- local skillData = skillConstants.Skills[skillName]
- if (skillData and skillData.SelfTarget) then
- return true
- end
- return false
- end
- local Attacks = getAttacks()
- local function attackEntity(initTarget)
- pcall(function()
- local selectedAttacks = AttackSelectorInstance:GetSelectedAttacks()
- local selectedAttacksTable = {}
- for _, attackIndex in ipairs(selectedAttacks) do
- local attackName = Attacks[attackIndex]
- table.insert(selectedAttacksTable, { Name = attackName, Index = attackIndex })
- end
- --[[local concatenatedAttacks = table.concat(selectedAttacksTable, ", ")
- Library:Notify("Selected Attacks: " .. concatenatedAttacks)]]
- task.wait(1)
- for _, attackInfo in ipairs(selectedAttacksTable) do
- local attackTarget = initTarget
- if player.PlayerGui.Combat.ActionBG.AttacksPage.ScrollingFrame:FindFirstChild(attackInfo.Name) then
- if (player.PlayerGui.Combat.ActionBG.AttacksPage.ScrollingFrame[attackInfo.Name]:FindFirstChild('CD')
- and not player.PlayerGui.Combat.ActionBG.AttacksPage.ScrollingFrame[attackInfo.Name]:FindFirstChild('CD').Visible) then
- debug(attackInfo.Name .. " is not on cooldown")
- if IsSelfTargetSkill(attackInfo.Name) then
- attackTarget = player.Character
- debug(attackInfo.Name .. " is a self-target attack")
- else
- debug(attackInfo.Name .. " isn't a self-target attack")
- end
- pcall(function()
- player.PlayerGui.Combat.CombatHandle.RemoteFunction:InvokeServer(
- "Attack", attackInfo.Name, { ["Attacking"] = attackTarget }
- )
- end)
- else
- debug(attackInfo.Name .. " CD not found")
- end
- end
- end
- end)
- end
- function attack()
- pcall(function()
- local fightID = (player.Character:FindFirstChild('FightInProgress') and tostring(player.Character:FindFirstChild('FightInProgress').Value))
- if fightID then
- local fightFolder = ReplicatedStorage.Fights:FindFirstChild(fightID)
- if fightFolder then
- local currentTurn = fightFolder:FindFirstChild('CurrentTurn')
- if (currentTurn and tostring(currentTurn.Value) == player.Name) then
- local target = findTarget(fightID, Options.AttackMethod.Value)
- if target then
- debug("Attacking " .. target.Name)
- attackEntity(target)
- else
- debug('No target found!')
- end
- end
- end
- end
- end)
- end
- task.spawn(LPH_JIT_MAX(function()
- while task.wait(0.05) do
- if Toggles.AutoEscape.Value then
- pcall(function()
- player.PlayerGui.Combat.CombatHandle.Escape:FireServer()
- end)
- end
- if Toggles.AutoAttack.Value then
- attack()
- end
- end
- end))
- task.spawn(LPH_JIT_MAX(function()
- while task.wait() do
- if Toggles.Alluring.Value then
- if not player.Character.Effects:FindFirstChild('AttractOn') then
- if player.Backpack.Tools:FindFirstChild('Alluring Elixir') and not player.Character:FindFirstChild('FightInProgress') then
- debug'Using alluring elixir..'
- local args = {
- [1] = "Use",
- [2] = "Alluring Elixir"
- }
- ReplicatedStorage:WaitForChild("Remotes"):WaitForChild("Information"):WaitForChild("InventoryManage"):FireServer(unpack(args))
- debug'Waiting for alluring elixir to pop.. (5s timeout)'
- local timeout = 5
- local startTime = tick()
- repeat
- task.wait()
- until player.Character.Effects:FindFirstChild('AttractOn') or tick() - startTime >= timeout
- if player.Character.Effects:FindFirstChild('AttractOn') then
- debug'Alluring effect applied!'
- else
- debug'Timeout reached. Alluring effect not applied within 5 seconds.'
- end
- end
- end
- end
- end
- end))
- task.spawn(LPH_JIT_MAX(function()
- while task.wait() do
- if Toggles.lcdi.Value then
- collectDroppedItems()
- end
- end
- end))
- task.spawn(LPH_JIT_MAX(function()
- while task.wait() do
- if Toggles.lcdinear.Value then
- collectDroppedItemsNear()
- end
- end
- end))
- task.spawn(LPH_JIT_MAX(function()
- while task.wait() do
- if Toggles.AutoMineOre.Value then
- local ore
- local selectedMines = Options.SelectMine:GetActiveValues()
- for _, selectedMine in ipairs(selectedMines) do
- if selectedMine == "Aestic" then
- for _,v in pairs(workspace.Ores:GetChildren()) do
- if tostring(v:GetAttributes()['Durability']) ~= "0" and v.Name == "Aestic" then
- ore = v
- break
- end
- end
- elseif selectedMine == "Ferrus" then
- for _,v in pairs(workspace.Ores:GetChildren()) do
- if tostring(v:GetAttributes()['Durability']) ~= "0" and v.Name == "Ferrus" then
- ore = v
- break
- end
- end
- elseif selectedMine == "Laneus" then
- for _,v in pairs(workspace.Ores:GetChildren()) do
- if tostring(v:GetAttributes()['Durability']) ~= "0" and v.Name == "Laneus" then
- ore = v
- break
- end
- end
- end
- end
- if ore then
- repeat task.wait()
- player.Character.HumanoidRootPart.CFrame = ore.Ore.CFrame + Vector3.new(0,-5,0)
- local args = {
- [1] = "Use",
- [2] = "Pickaxe"
- }
- ReplicatedStorage.Remotes.Information.InventoryManage:FireServer(unpack(args))
- until tostring(ore:GetAttributes()['Durability']) == "0" or not Toggles.AutoMineOre.Value
- end
- end
- end
- end))
- function collectDroppedItems()
- for _,v in pairs(workspace.Dropped:GetDescendants()) do
- pickingUpFlowers = true
- if v.ClassName == "TouchTransmitter" then
- local startTime = os.clock()
- local initPos = player.Character.HumanoidRootPart.CFrame
- repeat task.wait()
- pcall(function()
- player.Character.HumanoidRootPart.CFrame = v.Parent.CFrame + Vector3.new(0,-10,0)
- firetouchinterest(player.Character.HumanoidRootPart, v.Parent, 0)
- firetouchinterest(player.Character.HumanoidRootPart, v.Parent, 1)
- end)
- until not v:IsDescendantOf(workspace) or os.clock() - startTime >= 1 or not Toggles.lcdi.Value
- player.Character.HumanoidRootPart.CFrame = initPos
- end
- end
- pickingUpFlowers = false
- end
- function collectDroppedItemsNear()
- for _,v in pairs(workspace.Dropped:GetDescendants()) do
- if v.ClassName == "TouchTransmitter" then
- firetouchinterest(player.Character.HumanoidRootPart, v.Parent, 0)
- firetouchinterest(player.Character.HumanoidRootPart, v.Parent, 1)
- end
- end
- end
- local function getAttackPriority(attackIndex)
- local selectedAttacks = AttackSelectorInstance:GetSelectedAttacks()
- for priority, index in ipairs(selectedAttacks) do
- if index == attackIndex then
- return priority
- end
- end
- return nil
- end
- local doctorNPC = workspace.NPCs:FindFirstChild('Doctor')
- local function getOptionFromDialogue(text)
- local button
- for _,v in pairs(player.PlayerGui.NPCDialogue.BG.Options:GetChildren()) do
- if v:IsA('TextButton') and (v.Text == text or v.Text:match(text)) then
- button = v
- break
- end
- end
- return button
- end
- local function selectOptionFromDialogue(text)
- local button
- for _,v in pairs(player.PlayerGui.NPCDialogue.BG.Options:GetChildren()) do
- if v:IsA('TextButton') and (v.Text == text or v.Text:match(text)) then
- button = v
- break
- end
- end
- player.PlayerGui.NPCDialogue.RemoteEvent:FireServer(button)
- end
- local function isOptionFromDialogue(text)
- local button
- for _, v in pairs(player.PlayerGui.NPCDialogue.BG.Options:GetChildren()) do
- if v:IsA('TextButton') and (v.Text == text or v.Text:match(text)) then
- button = v
- break
- end
- end
- if button then
- return true
- end
- return false
- end
- doctorHealing = false
- startingStats = false
- function doctorHeal()
- if not doctorHealing and not startingStats then
- doctorHealing = true
- local savedCFrame = player.Character.HumanoidRootPart.CFrame
- repeat task.wait()
- camera.CFrame = CFrame.new(cf.Position, cf.Position + Vector3.new(0, 1, 0))
- player.Character.HumanoidRootPart.CFrame = doctorNPC.HumanoidRootPart.CFrame + Vector3.new(0,-9,0)
- fireproximityprompt(doctorNPC.Head.ProximityPrompt)
- until player.PlayerGui:FindFirstChild('NPCDialogue')
- selectOptionFromDialogue('Yes please!')
- task.wait()
- player.Character.HumanoidRootPart.CFrame = savedCFrame
- doctorHealing = false
- end
- end
- workspace.DescendantAdded:Connect(function(v)
- if v.Name == "TouchInterest" then
- if Toggles.KillBrick.Value then
- local parent = v.Parent
- if parent.Name == "Void" or parent.Name == "Fireball"
- or parent.Name == "Faller" or parent.Name == "Geyser" then
- game:GetService("Debris"):AddItem(v,0)
- end
- end
- end
- end)
- function extractEssenceAmountFromText(text)
- local essenceAmount = text:match("%((%d+)%)")
- return tonumber(essenceAmount)
- end
- function hasEnoughEssence(requiredEssenceText)
- local essenceValueText = player.PlayerGui.HUD.Holder.Essence.Text
- local requiredEssence = extractEssenceAmountFromText(requiredEssenceText)
- local currentEssence = tonumber(essenceValueText)
- if requiredEssence and currentEssence then
- return currentEssence >= requiredEssence
- end
- return false
- end
- local function checkAttributeTotal()
- local total = 0
- -- Physical
- local physicalValue = Options.physicalSelector.Value
- total = total + physicalValue
- -- Arcane
- local arcaneValue = Options.arcaneSelector.Value
- total = total + arcaneValue
- -- Endurance
- local enduranceValue = Options.enduranceSelector.Value
- total = total + enduranceValue
- -- Speed
- local speedValue = Options.speedSelector.Value
- total = total + speedValue
- -- Luck
- local luckValue = Options.luckSelector.Value
- total = total + luckValue
- return total
- end
- function allocateStats()
- local totalValue = checkAttributeTotal()
- if totalValue > 4 then
- Library:Notify("Total Stat Allocation is above 4. Readjust your stat allocation values.\nMake sure you have the race that gives +4 stat points. Make sure u are allocating 3 points if you don't",3)
- task.wait(3)
- elseif totalValue < 3 then
- Library:Notify('Total Stat Allocation is below 3. Readjust your stat allocation values.',3)
- task.wait(3)
- elseif not startingStats then
- debug("Starting stat allocation process.")
- if totalValue >= 4 then
- Library:Notify("Make sure you have the race that gives +4 stat points. Make sure u are allocating 3 points if you don't")
- end
- startingStats = true
- local savedCFrame = player.Character.HumanoidRootPart.CFrame
- local Success = false
- local Aborted = false
- local selectedDialogue = false
- task.spawn(LPH_JIT_MAX(function()
- while not Success and task.wait() do
- if Aborted or Success then
- break
- end
- player.Character.HumanoidRootPart.CFrame = workspace.NPCs.Aretim.CFrame + Vector3.new(0,0,0)
- end
- end))
- local timeout = 10 -- Timeout in seconds
- local startTime = os.time()
- repeat
- task.wait(1)
- if selectedDialogue then
- Library:Notify('Waiting for Stat Allocation GUI to pop up..')
- repeat task.wait() until player.PlayerGui.HUD.StatAllocate.Visible
- Library:Notify("Stat GUI popped up")
- Success = true
- elseif player.PlayerGui:FindFirstChild('NPCDialogue') and not selectedDialogue then
- if isOptionFromDialogue('Show me his light') then
- if hasEnoughEssence(getOptionFromDialogue('Show me his light').Text) then
- selectOptionFromDialogue('Show me his light')
- selectedDialogue = true
- else
- Library:Notify('We do not have the required essence to level up.\n(Auto level up loop is on a 60s timer. If you clicked the button version, dw abt this.)')
- if isOptionFromDialogue('Not yet') then
- selectOptionFromDialogue('Not yet')
- end
- Aborted = true
- end
- end
- elseif not player.PlayerGui:FindFirstChild('NPCDialogue') and not selectedDialogue then
- Library:Notify("Dialogue has popped up, selecting dialogue options")
- camera.CFrame = CFrame.new(cf.Position, cf.Position + Vector3.new(0, 1, 0))
- fireproximityprompt(workspace.NPCs.Aretim.ProximityPrompt)
- end
- if os.time() - startTime >= timeout then
- Library:Notify('Timeout reached, exiting the loop.')
- Aborted = true
- end
- until Success or Aborted
- if Success then
- local args = {
- [1] = Options.physicalSelector.Value,
- [2] = Options.arcaneSelector.Value,
- [3] = Options.enduranceSelector.Value,
- [4] = Options.speedSelector.Value,
- [5] = Options.luckSelector.Value
- }
- ReplicatedStorage.Remotes.Information.StatAllocation:FireServer(unpack(args))
- local notifyText = "Allocated: "
- for i, value in ipairs(args) do
- notifyText = notifyText.."["..tostring(i).."] "..tostring(value).." "
- end
- Library:Notify(notifyText)
- end
- startingStats = false
- player.PlayerGui.HUD.StatAllocate.Visible = false
- player.Character.HumanoidRootPart.CFrame = savedCFrame
- end
- end
- local essenceCache = player.PlayerGui.HUD.Holder.Essence.Text
- task.spawn(LPH_JIT_MAX(function()
- while task.wait(0.25) do
- if Toggles.AutoStatAllocate.Value then
- if essenceCache ~= player.PlayerGui.HUD.Holder.Essence.Text and tonumber(player.PlayerGui.HUD.Holder.Essence.Text) > tonumber(essenceCache) then
- if not doctorHealing then
- if player.Character:FindFirstChild('FightInProgress') then
- Library:Notify('Fight in progress, waiting to auto allocate stats...')
- repeat task.wait() until not player.Character:FindFirstChild('FightInProgress')
- end
- Library:Notify('Allocating stats automatically...')
- allocateStats()
- essenceCache = player.PlayerGui.HUD.Holder.Essence.Text
- end
- end
- end
- end
- end))
- local potionRecipes = {
- ["Small Health Potion"] = {"Everthistle", "Slime Chunk"},
- ["Abhorrent Elixir"] = {"Everthistle", "Everthistle", "Cryastem"},
- ["Minor Empowering Elixir"] = {"Sand Core", "Cryastem", "Carnastool"},
- ["Minor Energy Elixir"] = {"Carnastool", "Everthistle"},
- ["Alluring Elixir"] = {"Everthistle", "Everthistle", "Carnastool"},
- ["Heartsoothing Remedy"] = {"Cryastem", "Everthistle", "Everthistle", "Everthistle"},
- ["Minor Absorbing Potion"] = {"Hightail", "Mushroom Cap"},
- ["Heartbreaking Elixir"] = {"Everthistle", "Everthistle", "Everthistle", "Carnastool"},
- ["Invisibility Potion"] = {"Driproot", "Driproot", "Hightail", "Haze Chunk"},
- ["Ferrus Skin Potion"] = {"Carnastool", "Carnastool", "Sand Core", "Mushroom Cap"}
- }
- -- Function to count the items in the player's backpack
- local function countItems()
- local backpack = player.Backpack
- local tools = backpack.Tools:GetChildren()
- local itemTable = {}
- for _, tool in ipairs(tools) do
- local itemName = tool.Name
- local quantity = 1 -- Assume each item counts as one by default
- -- Update the table or add a new entry for the item
- if itemTable[itemName] then
- itemTable[itemName] = itemTable[itemName] + quantity
- else
- itemTable[itemName] = quantity
- end
- end
- return itemTable
- end
- -- Function to check if the player has enough ingredients for a specific potion
- local function canCraftPotion(potionName)
- local playerItems = countItems()
- local ingredients = potionRecipes[potionName]
- if not ingredients then
- return false -- Potion name not found in the potionRecipes table
- end
- for _, item in ipairs(ingredients) do
- local requiredQuantity = 1 -- Assume each ingredient in the recipe counts as one by default
- -- Check if the item exists in the player's backpack
- if playerItems[item] then
- if playerItems[item] < requiredQuantity then
- return false -- Player doesn't have enough of this ingredient
- end
- else
- return false -- Player doesn't have this ingredient at all
- end
- end
- return true -- Player has all the required ingredients for the potion
- end
- local function getAllPotionNames()
- local potionNames = {}
- for potionName, _ in pairs(potionRecipes) do
- table.insert(potionNames, potionName)
- end
- return potionNames
- end
- local function getToolByName(toolName)
- local backpack = player.Backpack
- local tools = backpack.Tools:GetChildren()
- for _, tool in ipairs(tools) do
- if tool.Name == toolName then
- return tool
- end
- end
- return nil
- end
- local function fireproximityprompt(Obj, Amount, Skip)
- if Obj.ClassName == "ProximityPrompt" then
- Amount = Amount or 1
- local PromptTime = Obj.HoldDuration
- if Skip then
- Obj.HoldDuration = 0
- end
- for i = 1, Amount do
- Obj:InputHoldBegin()
- if not Skip then
- wait(Obj.HoldDuration)
- end
- Obj:InputHoldEnd()
- end
- Obj.HoldDuration = PromptTime
- else
- error("userdata<ProximityPrompt> expected")
- end
- end
- local function findNearestCauldron(player)
- local targetPosition = player.Character and player.Character.HumanoidRootPart.Position
- if targetPosition then
- local closestCauldron = nil
- local closestDistanceSquared = math.huge
- local cauldrons = workspace.Cauldrons:GetChildren()
- for _, cauldron in ipairs(cauldrons) do
- if cauldron:IsA('Model') then
- local cauldronPosition = cauldron.Water.Position
- local distanceSquared = (cauldronPosition - targetPosition).Magnitude
- if distanceSquared < closestDistanceSquared then
- closestCauldron = cauldron
- closestDistanceSquared = distanceSquared
- end
- end
- end
- return closestCauldron
- end
- end
- local function craftPotion(selectedPotion)
- task.wait(0.1)
- local cauldron = findNearestCauldron(player)
- local ingredients = potionRecipes[selectedPotion]
- local abortttt = false
- local save = player.Character.HumanoidRootPart.CFrame
- task.spawn(LPH_JIT_MAX(function()
- while not abortttt and task.wait() do
- player.Character.HumanoidRootPart.CFrame = cauldron.Water.CFrame
- local camera = workspace.CurrentCamera
- local cf = camera.CFrame
- camera.CFrame = CFrame.new(cf.Position, cf.Position - Vector3.new(0, 1, 0))
- end
- end))
- for _, ingredient in ipairs(ingredients) do
- local tool = player.Backpack.Tools:FindFirstChild(ingredient)
- workspace.Camera.CameraSubject = cauldron.Water.ProximityPrompt
- if tool then
- repeat task.wait()
- local args = {
- [1] = "Equip",
- [2] = ingredient
- }
- ReplicatedStorage:WaitForChild("Remotes"):WaitForChild("Information"):WaitForChild("InventoryManage"):FireServer(unpack(args))
- until player.Character:FindFirstChild(ingredient)
- repeat task.wait()
- fireproximityprompt(cauldron.Water.ProximityPrompt, 1,true)
- until not player.Character:FindFirstChild(tool)
- end
- end
- for _,v in pairs(cauldron:GetDescendants()) do
- if v.ClassName == "ClickDetector" then
- fireclickdetector(v, 1)
- end
- end
- Library:Notify('Successfully brewed ' .. selectedPotion .. '!')
- abortttt = true
- end
- task.spawn(LPH_JIT_MAX(function()
- while task.wait() do
- if Toggles.AutoBrewPotion.Value then
- if canCraftPotion(Options.SelectPotion.Value) then
- craftPotion(Options.SelectPotion.Value)
- end
- end
- end
- end))
- function useAbhorrent(brew)
- if not player.Character.Effects:FindFirstChild('RepelOn') then
- if player.Backpack.Tools:FindFirstChild('Abhorrent Elixir') then
- repeat
- player.Character.HumanoidRootPart.CFrame = CFrame.new(-345, 30, -3500)
- local args = {
- [1] = "Use",
- [2] = "Abhorrent Elixir"
- }
- ReplicatedStorage.Remotes.Information.InventoryManage:FireServer(unpack(args))
- task.wait(5)
- until player.Character.Effects:FindFirstChild('RepelOn')
- else
- if brew then
- if canCraftPotion('Abhorrent Elixir') then
- craftPotion('Abhorrent Elixir')
- task.wait(2)
- useAbhorrent(true)
- end
- end
- end
- end
- end
- local Noclipping = nil
- Clip = true
- function noclip()
- Clip = false
- wait(0.1)
- local function NoclipLoop()
- if Clip == false and player.Character ~= nil then
- for _, child in pairs(player.Character:GetDescendants()) do
- if child:IsA("BasePart") and child.CanCollide == true and child.Name ~= floatName then
- child.CanCollide = false
- end
- end
- end
- end
- Noclipping = RunService.Stepped:Connect(NoclipLoop)
- end
- function clip()
- if Noclipping then
- Noclipping:Disconnect()
- end
- Clip = true
- end
- task.spawn(LPH_JIT_MAX(function()
- while task.wait() and Toggles do
- local savePos = player.Character.HumanoidRootPart.CFrame
- if Toggles.lcsi2.Value then
- pickingUpFlowers = true
- debug'ITS ON'
- if Toggles.lcsiUseElixir.Value then
- useAbhorrent(true)
- end
- player.Character.HumanoidRootPart.CFrame = savePos
- for _,v in pairs(workspace.SpawnedItems:GetDescendants()) do
- if not Toggles.lcsi2.Value then player.Character.HumanoidRootPart.CFrame = savePos break end
- if Toggles.lcsiUseElixir.Value then
- useAbhorrent(true)
- end
- if v.ClassName == "ClickDetector" then
- local clickPart = v.Parent
- if clickPart then
- repeat task.wait()
- player.Character.HumanoidRootPart.CFrame = clickPart.CFrame + Vector3.new(0,-14,0)
- fireclickdetector(v, 1)
- until not v:IsDescendantOf(workspace) or not Toggles.lcsi2.Value
- end
- end
- end
- player.Character.HumanoidRootPart.CFrame = savePos
- pickingUpFlowers = false
- if Toggles.lcsiServerHop.Value then
- task.wait()
- player.Character.HumanoidRootPart.CFrame = savePos
- Teleport()
- end
- else
- if not workspace.SpawnedItems:FindFirstChildWhichIsA('Model') and Toggles.lcsiServerHop.Value then
- player.Character.HumanoidRootPart.CFrame = savePos
- task.wait(.25)
- player.Character.HumanoidRootPart.CFrame = savePos
- Teleport()
- end
- end
- end
- end))
- local enviroEffects = ReplicatedStorage.Remotes.Information.EnviroEffects
- local old
- old = hookmetamethod(game, "__namecall", LPH_NO_VIRTUALIZE(function(self, ...)
- local method = getnamecallmethod()
- local args = {...}
- local noFallToggle = (Toggles and Toggles.NoFall and Toggles.NoFall.Value) or (pickingUpFlowers) or (startingStats) or (doctorHealing)
- if not checkcaller() and self == enviroEffects and method == "FireServer" and args[2] and type(args[2]) == "number" and args[2] > 0 and (noFallToggle or Toggles.lcsi2.Value) then
- return task.wait(9e9)
- end
- return old(self, ...)
- end))
- -- Helper function to teleport the player to the selected teleport
- local function TeleportToSelectedTeleport(teleportCFrame)
- if teleportCFrame then
- player.Character.HumanoidRootPart.CFrame = teleportCFrame
- end
- end
- player.Character:WaitForChild('HumanoidRootPart').ChildAdded:Connect(function(v)
- if v.Name == "Charge" then
- v:Destroy()
- end
- if v:IsA('ParticleEmitter') then
- v:Destroy()
- end
- end)
- player.CharacterAdded:Connect(function()
- player.Character:WaitForChild('HumanoidRootPart').ChildAdded:Connect(function(v)
- if v.Name == "Charge" then
- v.Parent = nil
- v:Destroy()
- end
- if v:IsA('ParticleEmitter') then
- v.Parent = nil
- v:Destroy()
- end
- end)
- end)
- task.spawn(LPH_JIT_MAX(function()
- while task.wait() do
- if Toggles.DupeRollback.Value then
- ReplicatedStorage.Remotes.Data.UpdateHotbar:FireServer({[1] = "\255"})
- end
- end
- end))
- -- Define the teleports for each category in separate tables
- local spawnsTeleports = {}
- local buyablesTeleports = {}
- local npcTeleports = {}
- local questNPCTeleports = {}
- for _, v in pairs(workspace.Spawns:GetChildren()) do
- table.insert(spawnsTeleports, v.Name)
- end
- for _, v in pairs(workspace.Buyables:GetChildren()) do
- table.insert(buyablesTeleports, v.Name)
- end
- for _, v in pairs(workspace.NPCs:GetChildren()) do
- if v:IsA('Model') or v:IsA('Part') then
- table.insert(npcTeleports, v.Name)
- end
- end
- for _,v in pairs(workspace.NPCs.Quest:GetChildren()) do
- table.insert(questNPCTeleports, v.Name)
- end
- -- Setting up UI
- local Window = Library:CreateWindow({
- Title = 'ZEN X | ARCANE LINEAGE',
- Center = true,
- AutoShow = true,
- })
- local Tabs = {
- Main = Window:AddTab('Main'),
- Teleports = Window:AddTab('Teleports'),
- Dupe = Window:AddTab('Dupe/Rollback'),
- Logs = Window:AddTab('Logs'),
- Universal = Window:AddTab('Universal'),
- ['UI Settings'] = Window:AddTab('UI Settings'),
- }
- local LogsBox = Tabs.Logs:AddLeftGroupbox('Logs')
- local LogsBoxC = Tabs.Logs:AddRightGroupbox('Logs Control')
- logsLabel = LogsBox:AddLabel('', true)
- LogsBoxC:AddButton('Reset Logs', function()
- logsTable = {}
- debug('Reset logs!')
- end)
- local Dupees = Tabs.Dupe:AddLeftGroupbox('Rollback')
- local Rejoins = Tabs.Dupe:AddRightGroupbox('Rejoin')
- Rejoins:AddButton('Rejoin Server', function()
- game:GetService('TeleportService'):TeleportToPlaceInstance(game.PlaceId, game.JobId)
- end)
- Dupees:AddToggle('DupeRollback', {Text = 'Stop Saving Data',Default = false, Tooltip = "Stop saving data (meaning your data wont be saved when this is toggled)" })
- Dupees:AddLabel('Guide on how to dupe:\n\n1.) Turn on "Stop Saving Data"\n\n2.) Drop your items to someone\n(you have a short time window to do this or else the rollback may not work..)\n\n3.) Have the account pick it up\n\n4.) Click rejoin server\n\nWait a bit after toggling off to save data.', true)
- -- Create the dropdowns for each category
- Tabs.Teleports:AddLeftGroupbox('Spawns'):AddDropdown('SpawnsDropdown', {
- Text = 'Select a spawn teleport',
- Tooltip = 'Choose a spawn teleport destination',
- Values = spawnsTeleports,
- AllowNull = true,
- Callback = function(Value)
- local teleportName = Value
- if teleportName then
- -- Retrieve the CFrame for the selected spawn teleport based on its name
- local selectedTeleportCFrame = workspace.Spawns:FindFirstChild(teleportName)
- TeleportToSelectedTeleport(selectedTeleportCFrame and selectedTeleportCFrame.CFrame)
- end
- end
- })
- Tabs.Teleports:AddRightGroupbox('Buyables'):AddDropdown('BuyablesDropdown', {
- Text = 'Select a buyable teleport',
- Tooltip = 'Choose a buyable teleport destination',
- Values = buyablesTeleports,
- AllowNull = true,
- Callback = function(Value)
- local teleportName = Value
- if teleportName then
- -- Retrieve the CFrame for the selected buyable teleport based on its name
- local selectedTeleportCFrame = workspace.Buyables:FindFirstChild(teleportName)
- TeleportToSelectedTeleport(selectedTeleportCFrame and selectedTeleportCFrame:GetPivot())
- end
- end
- })
- Tabs.Teleports:AddRightGroupbox('NPCs'):AddDropdown('NPCDropdown', {
- Text = 'Select an npc teleport',
- Tooltip = 'Choose an npc teleport destination',
- Values = npcTeleports,
- AllowNull = true,
- Callback = function(Value)
- local teleportName = Value
- if teleportName then
- -- Retrieve the CFrame for the selected encounter teleport based on its name
- local selectedTeleportCFrame = workspace.NPCs:FindFirstChild(teleportName)
- TeleportToSelectedTeleport(selectedTeleportCFrame and selectedTeleportCFrame:GetPivot())
- end
- end
- })
- Tabs.Teleports:AddLeftGroupbox('Quest NPCs'):AddDropdown('QuestNPCDropdown', {
- Text = 'Select an quest npc teleport',
- Tooltip = 'Choose an quest npc teleport destination',
- Values = questNPCTeleports,
- AllowNull = true,
- Callback = function(Value)
- local teleportName = Value
- -- Retrieve the CFrame for the selected encounter teleport based on its name
- if teleportName then
- local selectedTeleportCFrame = workspace.NPCs.Quest:FindFirstChild(teleportName)
- TeleportToSelectedTeleport(selectedTeleportCFrame and selectedTeleportCFrame:GetPivot())
- end
- end
- })
- local OtherTP = Tabs.Teleports:AddLeftGroupbox('Other Teleports')
- OtherTP:AddButton('Momma Darkbeast', function()
- player.Character.HumanoidRootPart.CFrame = workspace.NPCs["Momma Darkbeast"].HumanoidRootPart.CFrame
- end)
- OtherTP:AddButton('Cursed Gate/Puzzle', function()
- player.Character.HumanoidRootPart.CFrame = CFrame.new(2343.709228515625, 24.33362579345703, -435.2521667480469)
- end)
- OtherTP:AddButton('Yarthul Gate', function()
- player.Character.HumanoidRootPart.CFrame = CFrame.new(-5043.93310546875, 51.526851654052734, -3129.505859375)
- end)
- OtherTP:AddButton('Arena (end of parkour)', function()
- player.Character.HumanoidRootPart.CFrame = CFrame.new(2331.618896484375, 7.460083484649658, 533.8240356445312)
- end)
- local AutoAttack = Tabs.Main:AddLeftTabbox('Encounters')
- local EFeatures = AutoAttack:AddTab('Encounters')
- local SelectSkills = AutoAttack:AddTab('Select Skills')
- EFeatures:AddToggle('AutoAttack', {Text = 'Auto Attack',Default = false, Tooltip = "Automatically attack (using skills) in encounters.\nSelect skills in the 'Select Skills' tab." })
- EFeatures:AddDropdown('AttackMethod', {Values = {"weakest", "strongest", "random", "one_at_a_time"}, Multi = false, AllowNull = false, Default = 1, Text = 'Select attack target priority'})
- EFeatures:AddToggle('AutoEscape', {Text = 'Auto Escape',Default = false, Tooltip = "Automatically tries to escape in encounters."})
- --EFeatures:AddToggle('InfMeditate', {Text = 'Infinite Energy',Default = false, Tooltip = "Get 6 full energy bars almost instantly before attacking.\nTHIS DOES LOWER YOUR GUARD BY ALOT AND MAY GET U 1 SHOTTED!"})
- local attackLabels = {} -- Store labels for each attack
- for i, attack in ipairs(Attacks) do
- local label
- local is_self_target = IsSelfTargetSkill(attack)
- local toggle = SelectSkills:AddToggle('AutoAttack' .. i, {
- Text = (is_self_target and (attack .. " [self]") or attack),
- Default = false,
- Tooltip = (is_self_target and "This will be casted on yourself." or "This will be casted on enemies."),
- Callback = function(value)
- -- Update the AttackSelectorInstance when a toggle is clicked
- if value then
- AttackSelectorInstance:AddAttack(i)
- else
- AttackSelectorInstance:RemoveAttack(i)
- end
- -- Update the label display to show or hide the priority number
- local priority = getAttackPriority(i)
- label:SetText(value and ('[Priority %d] %s'):format(priority, attack) or "no priority..")
- end
- })
- label = SelectSkills:AddLabel('')
- -- Set initial label text
- local priority = getAttackPriority(i)
- label:SetText(toggle.Value and ('[Priority %d] %s'):format(priority, attack) or "no priority..")
- table.insert(attackLabels, label)
- end
- local Level = Tabs.Main:AddLeftGroupbox('Auto Level')
- Level:AddToggle('AutoStatAllocate', {Text = 'Auto Level Up after Fight', Default = false, Tooltip = "Attempt to auto lvl up and allocate stats after you finish a fight\nand collect the essence."})
- Level:AddButton('Level Up', function()
- allocateStats()
- end)
- Level:AddSlider('physicalSelector', {Text = 'Stat Allocation: Physical', Default = 0, Min = 0, Max = 3, Rounding = 0, Compact = true})
- Level:AddSlider('arcaneSelector', {Text = 'Stat Allocation: Arcane', Default = 0, Min = 0, Max = 3, Rounding = 0, Compact = true})
- Level:AddSlider('enduranceSelector', {Text = 'Stat Allocation: Endurance', Default = 0, Min = 0, Max = 3, Rounding = 0, Compact = true})
- Level:AddSlider('speedSelector', {Text = 'Stat Allocation: Speed', Default = 0, Min = 0, Max = 3, Rounding = 0, Compact = true})
- Level:AddSlider('luckSelector', {Text = 'Stat Allocation: Luck', Default = 0, Min = 0, Max = 3, Rounding = 0, Compact = true})
- local QTE = Tabs.Main:AddLeftTabbox('Auto Dodge')
- local QTE1 = QTE:AddTab('Auto Dodge')
- QTE1:AddToggle('AutoDodge', {Text = 'Auto Instant Dodge', Default = false, Tooltip = "Automatically and instantly perform Dodges."})
- QTE1:AddToggle('AutoDodgeLegit', {Text = 'Auto Legit Dodge', Default = false, Tooltip = "Automatically perform delayed Dodges."})
- QTE1:AddSlider('DodgeLegitMin', {Text = 'Legit Dodge: Min Delay', Default = 0.4, Min = 0.1, Max = 1, Rounding = 1, Compact = false})
- QTE1:AddSlider('DodgeLegitMax', {Text = 'Legit Dodge: Max Delay', Default = 0.7, Min = 0.1, Max = 1, Rounding = 1, Compact = false})
- local QTE2 = QTE:AddTab('Auto QTE')
- QTE2:AddToggle('AutoQTE', {Text = 'Auto Instant QTE (minigame)', Default = false, Tooltip = "Automatically and instantly perform Quick Time Events (QTEs)."})
- QTE2:AddToggle('AutoQTELegit', {Text = 'Auto Legit QTE (minigame)', Default = false, Tooltip = "Automatically perform delayed Quick Time Events (QTEs)."})
- QTE2:AddSlider('LegitMin', {Text = 'Legit QTE: Min Delay (seconds)', Default = 4, Min = 1, Max = 10, Rounding = 0, Compact = false})
- QTE2:AddSlider('LegitMax', {Text = 'Legit QTE: Max Delay (seconds)', Default = 6, Min = 1, Max = 10, Rounding = 0, Compact = false})
- local Misc = Tabs.Main:AddLeftGroupbox('Misc Features')
- Misc:AddToggle('NoFall', {Text = 'No Fall', Default = false, Tooltip = "Prevent falling damage."})
- Misc:AddToggle('InfEnergy', {Text = 'Spam Meditate', Default = false, Tooltip = "THIS DOES LOWER UR GUARD AND MAY GET U 1 SHOTTED!\nTHIS DOES LOWER UR GUARD AND MAY GET U 1 SHOTTED!\nTHIS DOES LOWER UR GUARD AND MAY GET U 1 SHOTTED!\nTHIS DOES LOWER UR GUARD AND MAY GET U 1 SHOTTED!\nTHIS DOES LOWER UR GUARD AND MAY GET U 1 SHOTTED!\nTHIS DOES LOWER UR GUARD AND MAY GET U 1 SHOTTED!\n"})
- --Misc:AddToggle('InfGuard', {Text = 'Infinite Guard', Default = false})
- Misc:AddToggle('AutoHeal', {Text = 'Auto Heal (doctor)', Default = false, Tooltip = "Auto Heal using the doctor."})
- Misc:AddToggle('KillBrick', {Text = 'No Kill Bricks', Default = false, Tooltip = "You won't die to void, geysers, fireballs, fallers\nYou can still die to fires in the blacksmithes", Callback = function(v)
- if v then
- for _,obj in pairs(workspace:GetDescendants()) do
- if obj:IsA("TouchTransmitter") then
- local parentName = obj.Parent.Name
- if parentName == "Void" or parentName == "Fireball"
- or parentName == "Faller" or parentName == "Geyser" then
- obj:Destroy()
- elseif (obj.Parent and obj.Parent.BrickColor and (obj.Parent.BrickColor == BrickColor.new("Really black") or obj.Parent.BrickColor == BrickColor.new("Bright red"))) then
- obj:Destroy()
- end
- end
- end
- end
- end})
- Misc:AddButton('Doctor Heal', function()
- doctorHeal()
- end)
- local Collect = Tabs.Main:AddRightTabbox('Auto Collect')
- local AutoCollectSpawn = Collect:AddTab('Spawned Items')
- local AutoCollectDrop = Collect:AddTab('Dropped Items')
- AutoCollectSpawn:AddToggle('lcsi2', {Text = 'Loop Collect Spawned Items', Default = false, Tooltip = "Automatically gather spawnable items like flowers."})
- AutoCollectSpawn:AddToggle('lcsiUseElixir', {Text = 'Auto Abhorrent Elixir', Default = false, Tooltip = "Automatically use Abhorrent Elixir.\n(it will also craft an Abhorrent Elixir if you don't have one)"})
- AutoCollectSpawn:AddToggle('lcsiServerHop', {Text = 'Server Hop after Collecting', Default = false, Tooltip = "Automatically server hop after doing a loop of collecting all spawned items."})
- AutoCollectDrop:AddToggle('lcdi', {Text = 'Loop Collect Dropped Items', Default = false, Tooltip = "Automatically pick up dropped loot like bags.\nez scams"})
- AutoCollectDrop:AddToggle('lcdinear', {Text = 'Loop Collect Near Dropped Items', Default = false, Tooltip = "Automatically pick up dropped loot like bags near your player.\nThis does not use teleporting.\nez scams"})
- AutoCollectSpawn:AddButton('Collect Spawned Items', function()
- local save = player.Character.HumanoidRootPart.CFrame
- pickingUpFlowers = true
- for _,v in pairs(workspace.SpawnedItems:GetDescendants()) do
- if v.ClassName == "ClickDetector" then
- local clickPart = v.Parent
- if clickPart then
- repeat task.wait()
- player.Character.HumanoidRootPart.CFrame = clickPart.CFrame + Vector3.new(0,-14,0)
- fireclickdetector(v, 1)
- until not v:IsDescendantOf(workspace)
- end
- end
- end
- player.Character.HumanoidRootPart.CFrame = save
- task.spawn(function()
- task.wait(2)
- pickingUpFlowers = false
- end)
- end, {Tooltip = "One-time collect of current spawnable items."})
- AutoCollectDrop:AddButton('Collect Dropped Items', collectDroppedItems, {Tooltip = "One-time collect of current dropped items."})
- local Potion = Tabs.Main:AddRightTabbox('Auto Potion')
- local Craft = Potion:AddTab('Auto Craft')
- local Use = Potion:AddTab('Auto Use')
- Craft:AddToggle('AutoBrewPotion', {Text = 'Auto Brew Potions', Default = false, Tooltip = "Automatically brew potions."})
- Craft:AddDropdown('SelectPotion', {Values = getAllPotionNames(), Multi = false, AllowNull = false, Default = 1, Text = 'Select Potion to Brew'})
- Use:AddToggle('Alluring', {Text = 'Auto Use Alluring', Default = false})
- Use:AddLabel("more coming soon..")
- local Merchant = Tabs.Main:AddRightGroupbox('Auto Merchant')
- Merchant:AddToggle('MerchantNotifier', {Text = 'Mysterious Merchant Notifier', Default = false, Tooltip = "Get notified when the mysterious merchant spawns."})
- Merchant:AddToggle('MerchantHopper', {Text = 'Server Hop Until Merchant', Default = false, Tooltip = "Server Hops until there is a merchant in your lobby."})
- Merchant:AddButton('Teleport to Merchant', function()
- local merchant = workspace.NPCs:FindFirstChild('Mysterious Merchant')
- if merchant then
- local lookVec = merchant.HumanoidRootPart.CFrame.LookVector
- local newPos = merchant.HumanoidRootPart.Position + (lookVec * 5)
- newPos = Vector3.new(newPos.X, merchant.HumanoidRootPart.Position.Y, newPos.Z)
- player.Character.HumanoidRootPart.CFrame = CFrame.new(newPos)
- end
- end)
- local merchantLabel = Merchant:AddLabel("Merchant Status: Not Spawned")
- task.spawn(LPH_JIT_MAX(function()
- while task.wait(2.5) do
- if workspace.NPCs:FindFirstChild('Mysterious Merchant') then
- merchantLabel:SetText('Merchant Status: Spawned')
- if Toggles.MerchantNotifier.Value then
- Library:Notify('The Mysterious Merchant is currently spawned!')
- end
- else
- merchantLabel:SetText('Merchant Status: Not Spawned')
- end
- end
- end))
- task.spawn(LPH_JIT_MAX(function()
- task.wait(3)
- if not workspace.NPCs:FindFirstChild('Mysterious Merchant') then
- if Toggles.MerchantHopper.Value then
- Teleport()
- end
- end
- end))
- local function GetUniqueToolNames()
- local uniqueToolNames = {}
- local toolsFolder = player.Backpack:FindFirstChild("Tools")
- for _, tool in ipairs(toolsFolder:GetChildren()) do
- if not table.find(uniqueToolNames, tool.Name) then
- table.insert(uniqueToolNames, tool.Name)
- end
- end
- return uniqueToolNames
- end
- local Drop = Tabs.Main:AddRightGroupbox('Auto Drop')
- Drop:AddToggle('AutoDrop', {Text = 'Auto Drop Item', Default = false, Tooltip = "Automatically drops selected item from your inventory."})
- local dropdd = Drop:AddDropdown('DropItem', {Values = GetUniqueToolNames(), Multi = false, AllowNull = true, Text = 'Select Item to Drop'})
- Drop:AddButton('Refresh Item List', function()
- dropdd:SetValues(GetUniqueToolNames())
- end)
- task.spawn(LPH_JIT_MAX(function()
- while task.wait() do
- if Toggles.AutoDrop.Value then
- ReplicatedStorage.Remotes.Information.InventoryManage:FireServer("Drop", Options.DropItem.Value)
- end
- end
- end))
- local Mine = Tabs.Main:AddRightGroupbox('Mines')
- Mine:AddToggle('AutoMineOre', {Text = 'Auto Mine Ore', Default = false, Tooltip = "Automatically mine ores in the game.\nYou must have a pickaxe in your inventory!"})
- Mine:AddDropdown('SelectMine', {Values = {"Aestic", "Ferrus", "Laneus"}, Multi = true, AllowNull = false, Default = 1, Text = 'Select Ore to Mine'})
- local MenuGroup = Tabs['UI Settings']:AddLeftGroupbox('Menu')
- MenuGroup:AddButton('Unload', function() Library:Unload() end)
- MenuGroup:AddLabel('Menu bind'):AddKeyPicker('MenuKeybind', { Default = 'End', NoUI = true, Text = 'Menu keybind' })
- MenuGroup:AddToggle('KeybindUI', {Text = 'Show Keybind UI', Default = false, Callback = function(v) Library.KeybindFrame.Visible = v end})
- Library.ToggleKeybind = Options.MenuKeybind
- Library.KeybindFrame.Visible = false
- ThemeManager:SetLibrary(Library)
- SaveManager:SetLibrary(Library)
- UniversalBuilder:SetLibrary(Library)
- SaveManager:IgnoreThemeSettings()
- SaveManager:SetIgnoreIndexes({ 'MenuKeybind' })
- ThemeManager:SetFolder('Zen X')
- SaveManager:SetFolder('Zen X/arcane-lineage')
- SaveManager:BuildConfigSection(Tabs['UI Settings'])
- ThemeManager:ApplyToTab(Tabs['UI Settings'])
- UniversalBuilder:Build(Tabs.Universal)
- SaveManager:LoadAutoloadConfig()