repeat task.wait() until game:IsLoaded() local GuiLibrary local baseDirectory = (shared.VapePrivate and "vapeprivate/" or "vape/") local vapeInjected = true local oldRainbow = false local errorPopupShown = false local redownloadedAssets = false local profilesLoaded = false local teleportedServers = false local gameCamera = workspace.CurrentCamera local textService = game:GetService("TextService") local playersService = game:GetService("Players") local inputService = game:GetService("UserInputService") local isfile = isfile or function(file) local suc, res = pcall(function() return readfile(file) end) return suc and res ~= nil end local setidentity = syn and syn.set_thread_identity or set_thread_identity or setidentity or setthreadidentity or function() end local getidentity = syn and syn.get_thread_identity or get_thread_identity or getidentity or getthreadidentity or function() return 0 end local vapeAssetTable = { ["vape/assets/AddItem.png"] = "rbxassetid://13350763121", ["vape/assets/AddRemoveIcon1.png"] = "rbxassetid://13350764147", ["vape/assets/ArrowIndicator.png"] = "rbxassetid://13350766521", ["vape/assets/BackIcon.png"] = "rbxassetid://13350767223", ["vape/assets/BindBackground.png"] = "rbxassetid://13350767577", ["vape/assets/BlatantIcon.png"] = "rbxassetid://13350767943", ["vape/assets/CircleListBlacklist.png"] = "rbxassetid://13350768647", ["vape/assets/CircleListWhitelist.png"] = "rbxassetid://13350769066", ["vape/assets/ColorSlider1.png"] = "rbxassetid://13350769439", ["vape/assets/ColorSlider2.png"] = "rbxassetid://13350769842", ["vape/assets/CombatIcon.png"] = "rbxassetid://13350770192", ["vape/assets/DownArrow.png"] = "rbxassetid://13350770749", ["vape/assets/DiscordIcon.png"] = "rbxassetid://13546311177", ["vape/assets/ExitIcon1.png"] = "rbxassetid://13350771140", ["vape/assets/FriendsIcon.png"] = "rbxassetid://13350771464", ["vape/assets/HoverArrow.png"] = "rbxassetid://13350772201", ["vape/assets/HoverArrow2.png"] = "rbxassetid://13350772588", ["vape/assets/HoverArrow3.png"] = "rbxassetid://13350773014", ["vape/assets/HoverArrow4.png"] = "rbxassetid://13350773643", ["vape/assets/InfoNotification.png"] = "rbxassetid://13350774006", ["vape/assets/KeybindIcon.png"] = "rbxassetid://13350774323", ["vape/assets/LegitModeIcon.png"] = "rbxassetid://13436400428", ["vape/assets/MoreButton1.png"] = "rbxassetid://13350775005", ["vape/assets/MoreButton2.png"] = "rbxassetid://13350775731", ["vape/assets/MoreButton3.png"] = "rbxassetid://13350776241", ["vape/assets/NotificationBackground.png"] = "rbxassetid://13350776706", ["vape/assets/NotificationBar.png"] = "rbxassetid://13350777235", ["vape/assets/OnlineProfilesButton.png"] = "rbxassetid://13350777717", ["vape/assets/PencilIcon.png"] = "rbxassetid://13350778187", ["vape/assets/PinButton.png"] = "rbxassetid://13350778654", ["vape/assets/ProfilesIcon.png"] = "rbxassetid://13350779149", ["vape/assets/RadarIcon1.png"] = "rbxassetid://13350779545", ["vape/assets/RadarIcon2.png"] = "rbxassetid://13350779992", ["vape/assets/RainbowIcon1.png"] = "rbxassetid://13350780571", ["vape/assets/RainbowIcon2.png"] = "rbxassetid://13350780993", ["vape/assets/RightArrow.png"] = "rbxassetid://13350781908", ["vape/assets/SearchBarIcon.png"] = "rbxassetid://13350782420", ["vape/assets/SettingsWheel1.png"] = "rbxassetid://13350782848", ["vape/assets/SettingsWheel2.png"] = "rbxassetid://13350783258", ["vape/assets/SliderArrow1.png"] = "rbxassetid://13350783794", ["vape/assets/SliderArrowSeperator.png"] = "rbxassetid://13350784477", ["vape/assets/SliderButton1.png"] = "rbxassetid://13350785680", ["vape/assets/TargetIcon.png"] = "rbxassetid://13350786128", ["vape/assets/TargetIcon1.png"] = "rbxassetid://13350786776", ["vape/assets/TargetIcon2.png"] = "rbxassetid://13350787228", ["vape/assets/TargetIcon3.png"] = "rbxassetid://13350787729", ["vape/assets/TargetIcon4.png"] = "rbxassetid://13350788379", ["vape/assets/TargetInfoIcon1.png"] = "rbxassetid://13350788860", ["vape/assets/TargetInfoIcon2.png"] = "rbxassetid://13350789239", ["vape/assets/TextBoxBKG.png"] = "rbxassetid://13350789732", ["vape/assets/TextBoxBKG2.png"] = "rbxassetid://13350790229", ["vape/assets/TextGUIIcon1.png"] = "rbxassetid://13350790634", ["vape/assets/TextGUIIcon2.png"] = "rbxassetid://13350791175", ["vape/assets/TextGUIIcon3.png"] = "rbxassetid://13350791758", ["vape/assets/TextGUIIcon4.png"] = "rbxassetid://13350792279", ["vape/assets/ToggleArrow.png"] = "rbxassetid://13350792786", ["vape/assets/UpArrow.png"] = "rbxassetid://13350793386", ["vape/assets/UtilityIcon.png"] = "rbxassetid://13350793918", ["vape/assets/WarningNotification.png"] = "rbxassetid://13350794868", ["vape/assets/WindowBlur.png"] = "rbxassetid://13350795660", ["vape/assets/WorldIcon.png"] = "rbxassetid://13350796199", ["vape/assets/VapeIcon.png"] = "rbxassetid://13350808582", ["vape/assets/RenderIcon.png"] = "rbxassetid://13350832775", ["vape/assets/VapeLogo1.png"] = "rbxassetid://13350860863", ["vape/assets/VapeLogo3.png"] = "rbxassetid://13350872035", ["vape/assets/VapeLogo2.png"] = "rbxassetid://14037438801", ["vape/assets/VapeLogo4.png"] = "rbxassetid://14037438801" } if inputService:GetPlatform() ~= Enum.Platform.Windows then --mobile exploit fix getgenv().getsynasset = nil getgenv().getcustomasset = nil -- why is this needed getsynasset = nil getcustomasset = nil end local getcustomasset = getsynasset or getcustomasset or function(location) return vapeAssetTable[location] or "" end local customassetcheck = (getsynasset or getcustomasset) and true local queueonteleport = syn and syn.queue_on_teleport or queue_on_teleport or function() end local delfile = delfile or function(file) writefile(file, "") end local function displayErrorPopup(text, funclist) local oldidentity = getidentity() setidentity(8) local ErrorPrompt = getrenv().require(game:GetService("CoreGui").RobloxGui.Modules.ErrorPrompt) local prompt = ErrorPrompt.new("Default") prompt._hideErrorCode = true local gui = Instance.new("ScreenGui", game:GetService("CoreGui")) prompt:setErrorTitle("Vape") local funcs if funclist then funcs = {} local num = 0 for i,v in pairs(funclist) do num = num + 1 table.insert(funcs, { Text = i, Callback = function() prompt:_close() v() end, Primary = num == #funclist }) end end prompt:updateButtons(funcs or {{ Text = "OK", Callback = function() prompt:_close() end, Primary = true }}, 'Default') prompt:setParent(gui) prompt:_open(text) setidentity(oldidentity) end local function vapeGithubRequest(scripturl) if not isfile("vape/"..scripturl) then local suc, res task.delay(15, function() if not res and not errorPopupShown then errorPopupShown = true displayErrorPopup("The connection to github is taking a while, Please be patient.") end end) suc, res = pcall(function() return game:HttpGet("https://raw.githubusercontent.com/7GrandDadPGN/VapeV4ForRoblox/"..readfile("vape/commithash.txt").."/"..scripturl, true) end) if not suc or res == "404: Not Found" then displayErrorPopup("Failed to connect to github : vape/"..scripturl.." : "..res) error(res) end if scripturl:find(".lua") then res = "--This watermark is used to delete the file if its cached, remove it to make the file persist after commits.\n"..res end writefile("vape/"..scripturl, res) end return readfile("vape/"..scripturl) end local function downloadVapeAsset(path) if customassetcheck then if not isfile(path) then task.spawn(function() local textlabel = Instance.new("TextLabel") textlabel.Size = UDim2.new(1, 0, 0, 36) textlabel.Text = "Downloading "..path textlabel.BackgroundTransparency = 1 textlabel.TextStrokeTransparency = 0 textlabel.TextSize = 30 textlabel.Font = Enum.Font.SourceSans textlabel.TextColor3 = Color3.new(1, 1, 1) textlabel.Position = UDim2.new(0, 0, 0, -36) textlabel.Parent = GuiLibrary.MainGui repeat task.wait() until isfile(path) textlabel:Destroy() end) local suc, req = pcall(function() return vapeGithubRequest(path:gsub("vape/assets", "assets")) end) if suc and req then writefile(path, req) else return "" end end end return getcustomasset(path) end assert(not shared.VapeExecuted, "Vape Already Injected") shared.VapeExecuted = true for i,v in pairs({baseDirectory:gsub("/", ""), "vape", "vape/Libraries", "vape/CustomModules", "vape/Profiles", baseDirectory.."Profiles", "vape/assets"}) do if not isfolder(v) then makefolder(v) end end task.spawn(function() local success, assetver = pcall(function() return vapeGithubRequest("assetsversion.txt") end) if not isfile("vape/assetsversion.txt") then writefile("vape/assetsversion.txt", "0") end if success and assetver > readfile("vape/assetsversion.txt") then redownloadedAssets = true if isfolder("vape/assets") and not shared.VapeDeveloper then if delfolder then delfolder("vape/assets") makefolder("vape/assets") end end writefile("vape/assetsversion.txt", assetver) end end) if not isfile("vape/CustomModules/cachechecked.txt") then local isNotCached = false for i,v in pairs({"vape/Universal.lua", "vape/MainScript.lua", "vape/GuiLibrary.lua"}) do if isfile(v) and not readfile(v):find("--This watermark is used to delete the file if its cached, remove it to make the file persist after commits.") then isNotCached = true end end if isfolder("vape/CustomModules") then for i,v in pairs(listfiles("vape/CustomModules")) do if isfile(v) and not readfile(v):find("--This watermark is used to delete the file if its cached, remove it to make the file persist after commits.") then isNotCached = true end end end if isNotCached and not shared.VapeDeveloper then displayErrorPopup("Vape has detected uncached files, If you have CustomModules click no, else click yes.", {No = function() end, Yes = function() for i,v in pairs({"vape/Universal.lua", "vape/MainScript.lua", "vape/GuiLibrary.lua"}) do if isfile(v) and not readfile(v):find("--This watermark is used to delete the file if its cached, remove it to make the file persist after commits.") then delfile(v) end end for i,v in pairs(listfiles("vape/CustomModules")) do if isfile(v) and not readfile(v):find("--This watermark is used to delete the file if its cached, remove it to make the file persist after commits.") then local last = v:split('\\') last = last[#last] local suc, publicrepo = pcall(function() return game:HttpGet("https://raw.githubusercontent.com/7GrandDadPGN/VapeV4ForRoblox/"..readfile("vape/commithash.txt").."/CustomModules/"..last) end) if suc and publicrepo and publicrepo ~= "404: Not Found" then writefile("vape/CustomModules/"..last, "--This watermark is used to delete the file if its cached, remove it to make the file persist after commits.\n"..publicrepo) end end end end}) end writefile("vape/CustomModules/cachechecked.txt", "verified") end GuiLibrary = loadstring(vapeGithubRequest("GuiLibrary.lua"))() shared.GuiLibrary = GuiLibrary local saveSettingsLoop = coroutine.create(function() if inputService.TouchEnabled then return end repeat GuiLibrary.SaveSettings() task.wait(10) until not vapeInjected or not GuiLibrary end) task.spawn(function() local image = Instance.new("ImageLabel") image.Image = downloadVapeAsset("vape/assets/CombatIcon.png") image.Position = UDim2.new() image.BackgroundTransparency = 1 image.Size = UDim2.fromOffset(100, 100) image.ImageTransparency = 0.999 image.Parent = GuiLibrary.MainGui image:GetPropertyChangedSignal("IsLoaded"):Connect(function() image:Destroy() image = nil end) task.spawn(function() task.wait(15) if image and image.ContentImageSize == Vector2.zero and (not errorPopupShown) and (not redownloadedAssets) and (not isfile("vape/assets/check3.txt")) then errorPopupShown = true displayErrorPopup("Assets failed to load, Try another executor (executor : "..(identifyexecutor and identifyexecutor() or "Unknown")..")", {OK = function() writefile("vape/assets/check3.txt", "") end}) end end) end) local GUI = GuiLibrary.CreateMainWindow() local Combat = GuiLibrary.CreateWindow({ Name = "Combat", Icon = "vape/assets/CombatIcon.png", IconSize = 15 }) local Blatant = GuiLibrary.CreateWindow({ Name = "Blatant", Icon = "vape/assets/BlatantIcon.png", IconSize = 16 }) local Render = GuiLibrary.CreateWindow({ Name = "Render", Icon = "vape/assets/RenderIcon.png", IconSize = 17 }) local Utility = GuiLibrary.CreateWindow({ Name = "Utility", Icon = "vape/assets/UtilityIcon.png", IconSize = 17 }) local World = GuiLibrary.CreateWindow({ Name = "World", Icon = "vape/assets/WorldIcon.png", IconSize = 16 }) local Friends = GuiLibrary.CreateWindow2({ Name = "Friends", Icon = "vape/assets/FriendsIcon.png", IconSize = 17 }) local Targets = GuiLibrary.CreateWindow2({ Name = "Targets", Icon = "vape/assets/FriendsIcon.png", IconSize = 17 }) local Profiles = GuiLibrary.CreateWindow2({ Name = "Profiles", Icon = "vape/assets/ProfilesIcon.png", IconSize = 19 }) GUI.CreateDivider() GUI.CreateButton({ Name = "Combat", Function = function(callback) Combat.SetVisible(callback) end, Icon = "vape/assets/CombatIcon.png", IconSize = 15 }) GUI.CreateButton({ Name = "Blatant", Function = function(callback) Blatant.SetVisible(callback) end, Icon = "vape/assets/BlatantIcon.png", IconSize = 16 }) GUI.CreateButton({ Name = "Render", Function = function(callback) Render.SetVisible(callback) end, Icon = "vape/assets/RenderIcon.png", IconSize = 17 }) GUI.CreateButton({ Name = "Utility", Function = function(callback) Utility.SetVisible(callback) end, Icon = "vape/assets/UtilityIcon.png", IconSize = 17 }) GUI.CreateButton({ Name = "World", Function = function(callback) World.SetVisible(callback) end, Icon = "vape/assets/WorldIcon.png", IconSize = 16 }) GUI.CreateDivider("MISC") GUI.CreateButton({ Name = "Friends", Function = function(callback) Friends.SetVisible(callback) end, }) GUI.CreateButton({ Name = "Targets", Function = function(callback) Targets.SetVisible(callback) end, }) GUI.CreateButton({ Name = "Profiles", Function = function(callback) Profiles.SetVisible(callback) end, }) local FriendsTextListTable = { Name = "FriendsList", TempText = "Username [Alias]", Color = Color3.fromRGB(5, 133, 104) } local FriendsTextList = Friends.CreateCircleTextList(FriendsTextListTable) FriendsTextList.FriendRefresh = Instance.new("BindableEvent") FriendsTextList.FriendColorRefresh = Instance.new("BindableEvent") local TargetsTextList = Targets.CreateCircleTextList({ Name = "TargetsList", TempText = "Username [Alias]", Color = Color3.fromRGB(5, 133, 104) }) local oldFriendRefresh = FriendsTextList.RefreshValues FriendsTextList.RefreshValues = function(...) FriendsTextList.FriendRefresh:Fire() return oldFriendRefresh(...) end local oldTargetRefresh = TargetsTextList.RefreshValues TargetsTextList.RefreshValues = function(...) FriendsTextList.FriendRefresh:Fire() return oldTargetRefresh(...) end Friends.CreateToggle({ Name = "Use Friends", Function = function(callback) FriendsTextList.FriendRefresh:Fire() end, Default = true }) Friends.CreateToggle({ Name = "Use Alias", Function = function(callback) end, Default = true, }) Friends.CreateToggle({ Name = "Spoof alias", Function = function(callback) end, }) local friendRecolorToggle = Friends.CreateToggle({ Name = "Recolor visuals", Function = function(callback) FriendsTextList.FriendColorRefresh:Fire() end, Default = true }) local friendWindowFrame Friends.CreateColorSlider({ Name = "Friends Color", Function = function(h, s, v) local cachedColor = Color3.fromHSV(h, s, v) local addCircle = FriendsTextList.Object:FindFirstChild("AddButton", true) if addCircle then addCircle.ImageColor3 = cachedColor end friendWindowFrame = friendWindowFrame or FriendsTextList.ScrollingObject and FriendsTextList.ScrollingObject:FindFirstChild("ScrollingFrame") if friendWindowFrame then for i,v in pairs(friendWindowFrame:GetChildren()) do local friendCircle = v:FindFirstChild("FriendCircle") local friendText = v:FindFirstChild("ItemText") if friendCircle and friendText then friendCircle.BackgroundColor3 = friendText.TextColor3 == Color3.fromRGB(160, 160, 160) and cachedColor or friendCircle.BackgroundColor3 end end end FriendsTextListTable.Color = cachedColor if friendRecolorToggle.Enabled then FriendsTextList.FriendColorRefresh:Fire() end end }) local ProfilesTextList = {RefreshValues = function() end} ProfilesTextList = Profiles.CreateTextList({ Name = "ProfilesList", TempText = "Type name", NoSave = true, AddFunction = function(profileName) GuiLibrary.Profiles[profileName] = {Keybind = "", Selected = false} local profiles = {} for i,v in pairs(GuiLibrary.Profiles) do table.insert(profiles, i) end table.sort(profiles, function(a, b) return b == "default" and true or a:lower() < b:lower() end) ProfilesTextList.RefreshValues(profiles) end, RemoveFunction = function(profileIndex, profileName) if profileName ~= "default" and profileName ~= GuiLibrary.CurrentProfile then pcall(function() delfile(baseDirectory.."Profiles/"..profileName..(shared.CustomSaveVape or game.PlaceId)..".vapeprofile.txt") end) GuiLibrary.Profiles[profileName] = nil else table.insert(ProfilesTextList.ObjectList, profileName) ProfilesTextList.RefreshValues(ProfilesTextList.ObjectList) end end, CustomFunction = function(profileObject, profileName) if GuiLibrary.Profiles[profileName] == nil then GuiLibrary.Profiles[profileName] = {Keybind = ""} end profileObject.MouseButton1Click:Connect(function() GuiLibrary.SwitchProfile(profileName) end) local newsize = UDim2.new(0, 20, 0, 21) local bindbkg = Instance.new("TextButton") bindbkg.Text = "" bindbkg.AutoButtonColor = false bindbkg.Size = UDim2.new(0, 20, 0, 21) bindbkg.Position = UDim2.new(1, -50, 0, 6) bindbkg.BorderSizePixel = 0 bindbkg.BackgroundColor3 = Color3.fromRGB(255, 255, 255) bindbkg.BackgroundTransparency = 0.95 bindbkg.Visible = GuiLibrary.Profiles[profileName].Keybind ~= "" bindbkg.Parent = profileObject local bindimg = Instance.new("ImageLabel") bindimg.Image = downloadVapeAsset("vape/assets/KeybindIcon.png") bindimg.BackgroundTransparency = 1 bindimg.Size = UDim2.new(0, 12, 0, 12) bindimg.Position = UDim2.new(0, 4, 0, 5) bindimg.ImageTransparency = 0.2 bindimg.Active = false bindimg.Visible = (GuiLibrary.Profiles[profileName].Keybind == "") bindimg.Parent = bindbkg local bindtext = Instance.new("TextLabel") bindtext.Active = false bindtext.BackgroundTransparency = 1 bindtext.TextSize = 16 bindtext.Parent = bindbkg bindtext.Font = Enum.Font.SourceSans bindtext.Size = UDim2.new(1, 0, 1, 0) bindtext.TextColor3 = Color3.fromRGB(85, 85, 85) bindtext.Visible = (GuiLibrary.Profiles[profileName].Keybind ~= "") local bindtext2 = Instance.new("TextLabel") bindtext2.Text = "PRESS A KEY TO BIND" bindtext2.Size = UDim2.new(0, 150, 0, 33) bindtext2.Font = Enum.Font.SourceSans bindtext2.TextSize = 17 bindtext2.TextColor3 = Color3.fromRGB(201, 201, 201) bindtext2.BackgroundColor3 = Color3.fromRGB(37, 37, 37) bindtext2.BorderSizePixel = 0 bindtext2.Visible = false bindtext2.Parent = profileObject local bindround = Instance.new("UICorner") bindround.CornerRadius = UDim.new(0, 4) bindround.Parent = bindbkg bindbkg.MouseButton1Click:Connect(function() if not GuiLibrary.KeybindCaptured then GuiLibrary.KeybindCaptured = true task.spawn(function() bindtext2.Visible = true repeat task.wait() until GuiLibrary.PressedKeybindKey ~= "" local key = (GuiLibrary.PressedKeybindKey == GuiLibrary.Profiles[profileName].Keybind and "" or GuiLibrary.PressedKeybindKey) if key == "" then GuiLibrary.Profiles[profileName].Keybind = key newsize = UDim2.new(0, 20, 0, 21) bindbkg.Size = newsize bindbkg.Visible = true bindbkg.Position = UDim2.new(1, -(30 + newsize.X.Offset), 0, 6) bindimg.Visible = true bindtext.Visible = false bindtext.Text = key else local textsize = textService:GetTextSize(key, 16, bindtext.Font, Vector2.new(99999, 99999)) newsize = UDim2.new(0, 13 + textsize.X, 0, 21) GuiLibrary.Profiles[profileName].Keybind = key bindbkg.Visible = true bindbkg.Size = newsize bindbkg.Position = UDim2.new(1, -(30 + newsize.X.Offset), 0, 6) bindimg.Visible = false bindtext.Visible = true bindtext.Text = key end GuiLibrary.PressedKeybindKey = "" GuiLibrary.KeybindCaptured = false bindtext2.Visible = false end) end end) bindbkg.MouseEnter:Connect(function() bindimg.Image = downloadVapeAsset("vape/assets/PencilIcon.png") bindimg.Visible = true bindtext.Visible = false bindbkg.Size = UDim2.new(0, 20, 0, 21) bindbkg.Position = UDim2.new(1, -50, 0, 6) end) bindbkg.MouseLeave:Connect(function() bindimg.Image = downloadVapeAsset("vape/assets/KeybindIcon.png") if GuiLibrary.Profiles[profileName].Keybind ~= "" then bindimg.Visible = false bindtext.Visible = true bindbkg.Size = newsize bindbkg.Position = UDim2.new(1, -(30 + newsize.X.Offset), 0, 6) end end) profileObject.MouseEnter:Connect(function() bindbkg.Visible = true end) profileObject.MouseLeave:Connect(function() bindbkg.Visible = GuiLibrary.Profiles[profileName] and GuiLibrary.Profiles[profileName].Keybind ~= "" end) if GuiLibrary.Profiles[profileName].Keybind ~= "" then bindtext.Text = GuiLibrary.Profiles[profileName].Keybind local textsize = textService:GetTextSize(GuiLibrary.Profiles[profileName].Keybind, 16, bindtext.Font, Vector2.new(99999, 99999)) newsize = UDim2.new(0, 13 + textsize.X, 0, 21) bindbkg.Size = newsize bindbkg.Position = UDim2.new(1, -(30 + newsize.X.Offset), 0, 6) end if profileName == GuiLibrary.CurrentProfile then profileObject.BackgroundColor3 = Color3.fromHSV(GuiLibrary.ObjectsThatCanBeSaved["Gui ColorSliderColor"].Api.Hue, GuiLibrary.ObjectsThatCanBeSaved["Gui ColorSliderColor"].Api.Sat, GuiLibrary.ObjectsThatCanBeSaved["Gui ColorSliderColor"].Api.Value) profileObject.ImageButton.BackgroundColor3 = Color3.fromHSV(GuiLibrary.ObjectsThatCanBeSaved["Gui ColorSliderColor"].Api.Hue, GuiLibrary.ObjectsThatCanBeSaved["Gui ColorSliderColor"].Api.Sat, GuiLibrary.ObjectsThatCanBeSaved["Gui ColorSliderColor"].Api.Value) profileObject.ItemText.TextColor3 = Color3.new(1, 1, 1) profileObject.ItemText.TextStrokeTransparency = 0.75 bindbkg.BackgroundTransparency = 0.9 bindtext.TextColor3 = Color3.fromRGB(214, 214, 214) end end }) local OnlineProfilesButton = Instance.new("TextButton") OnlineProfilesButton.Name = "OnlineProfilesButton" OnlineProfilesButton.LayoutOrder = 1 OnlineProfilesButton.AutoButtonColor = false OnlineProfilesButton.Size = UDim2.new(0, 45, 0, 29) OnlineProfilesButton.BackgroundColor3 = Color3.fromRGB(26, 25, 26) OnlineProfilesButton.Active = false OnlineProfilesButton.Text = "" OnlineProfilesButton.ZIndex = 1 OnlineProfilesButton.Font = Enum.Font.SourceSans OnlineProfilesButton.TextXAlignment = Enum.TextXAlignment.Left OnlineProfilesButton.Position = UDim2.new(0, 166, 0, 6) OnlineProfilesButton.Parent = ProfilesTextList.Object local OnlineProfilesButtonBKG = Instance.new("UIStroke") OnlineProfilesButtonBKG.Color = Color3.fromRGB(38, 37, 38) OnlineProfilesButtonBKG.Thickness = 1 OnlineProfilesButtonBKG.ApplyStrokeMode = Enum.ApplyStrokeMode.Border OnlineProfilesButtonBKG.Parent = OnlineProfilesButton local OnlineProfilesButtonImage = Instance.new("ImageLabel") OnlineProfilesButtonImage.BackgroundTransparency = 1 OnlineProfilesButtonImage.Position = UDim2.new(0, 14, 0, 7) OnlineProfilesButtonImage.Size = UDim2.new(0, 17, 0, 16) OnlineProfilesButtonImage.Image = downloadVapeAsset("vape/assets/OnlineProfilesButton.png") OnlineProfilesButtonImage.ImageColor3 = Color3.fromRGB(121, 121, 121) OnlineProfilesButtonImage.ZIndex = 1 OnlineProfilesButtonImage.Active = false OnlineProfilesButtonImage.Parent = OnlineProfilesButton local OnlineProfilesbuttonround1 = Instance.new("UICorner") OnlineProfilesbuttonround1.CornerRadius = UDim.new(0, 5) OnlineProfilesbuttonround1.Parent = OnlineProfilesButton local OnlineProfilesbuttonTargetInfoMainInfoCorner = Instance.new("UICorner") OnlineProfilesbuttonTargetInfoMainInfoCorner.CornerRadius = UDim.new(0, 5) OnlineProfilesbuttonTargetInfoMainInfoCorner.Parent = OnlineProfilesButtonBKG local OnlineProfilesFrame = Instance.new("Frame") OnlineProfilesFrame.Size = UDim2.new(0, 660, 0, 445) OnlineProfilesFrame.Position = UDim2.new(0.5, -330, 0.5, -223) OnlineProfilesFrame.BackgroundColor3 = Color3.fromRGB(26, 25, 26) OnlineProfilesFrame.Parent = GuiLibrary.MainGui.ScaledGui.OnlineProfiles local OnlineProfilesExitButton = Instance.new("ImageButton") OnlineProfilesExitButton.Name = "OnlineProfilesExitButton" OnlineProfilesExitButton.ImageColor3 = Color3.fromRGB(121, 121, 121) OnlineProfilesExitButton.Size = UDim2.new(0, 24, 0, 24) OnlineProfilesExitButton.AutoButtonColor = false OnlineProfilesExitButton.Image = downloadVapeAsset("vape/assets/ExitIcon1.png") OnlineProfilesExitButton.Visible = true OnlineProfilesExitButton.Position = UDim2.new(1, -31, 0, 8) OnlineProfilesExitButton.BackgroundColor3 = Color3.fromRGB(26, 25, 26) OnlineProfilesExitButton.Parent = OnlineProfilesFrame local OnlineProfilesExitButtonround = Instance.new("UICorner") OnlineProfilesExitButtonround.CornerRadius = UDim.new(0, 16) OnlineProfilesExitButtonround.Parent = OnlineProfilesExitButton OnlineProfilesExitButton.MouseEnter:Connect(function() game:GetService("TweenService"):Create(OnlineProfilesExitButton, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut), {BackgroundColor3 = Color3.fromRGB(60, 60, 60), ImageColor3 = Color3.fromRGB(255, 255, 255)}):Play() end) OnlineProfilesExitButton.MouseLeave:Connect(function() game:GetService("TweenService"):Create(OnlineProfilesExitButton, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut), {BackgroundColor3 = Color3.fromRGB(26, 25, 26), ImageColor3 = Color3.fromRGB(121, 121, 121)}):Play() end) local OnlineProfilesFrameShadow = Instance.new("ImageLabel") OnlineProfilesFrameShadow.AnchorPoint = Vector2.new(0.5, 0.5) OnlineProfilesFrameShadow.Position = UDim2.new(0.5, 0, 0.5, 0) OnlineProfilesFrameShadow.Image = downloadVapeAsset("vape/assets/WindowBlur.png") OnlineProfilesFrameShadow.BackgroundTransparency = 1 OnlineProfilesFrameShadow.ZIndex = -1 OnlineProfilesFrameShadow.Size = UDim2.new(1, 6, 1, 6) OnlineProfilesFrameShadow.ImageColor3 = Color3.new() OnlineProfilesFrameShadow.ScaleType = Enum.ScaleType.Slice OnlineProfilesFrameShadow.SliceCenter = Rect.new(10, 10, 118, 118) OnlineProfilesFrameShadow.Parent = OnlineProfilesFrame local OnlineProfilesFrameIcon = Instance.new("ImageLabel") OnlineProfilesFrameIcon.Size = UDim2.new(0, 19, 0, 16) OnlineProfilesFrameIcon.Image = downloadVapeAsset("vape/assets/ProfilesIcon.png") OnlineProfilesFrameIcon.Name = "WindowIcon" OnlineProfilesFrameIcon.BackgroundTransparency = 1 OnlineProfilesFrameIcon.Position = UDim2.new(0, 10, 0, 13) OnlineProfilesFrameIcon.ImageColor3 = Color3.fromRGB(200, 200, 200) OnlineProfilesFrameIcon.Parent = OnlineProfilesFrame local OnlineProfilesFrameText = Instance.new("TextLabel") OnlineProfilesFrameText.Size = UDim2.new(0, 155, 0, 41) OnlineProfilesFrameText.BackgroundTransparency = 1 OnlineProfilesFrameText.Name = "WindowTitle" OnlineProfilesFrameText.Position = UDim2.new(0, 36, 0, 0) OnlineProfilesFrameText.TextXAlignment = Enum.TextXAlignment.Left OnlineProfilesFrameText.Font = Enum.Font.SourceSans OnlineProfilesFrameText.TextSize = 17 OnlineProfilesFrameText.Text = "Public Profiles" OnlineProfilesFrameText.TextColor3 = Color3.fromRGB(201, 201, 201) OnlineProfilesFrameText.Parent = OnlineProfilesFrame local OnlineProfilesFrameText2 = Instance.new("TextLabel") OnlineProfilesFrameText2.TextSize = 15 OnlineProfilesFrameText2.TextColor3 = Color3.fromRGB(85, 84, 85) OnlineProfilesFrameText2.Text = "YOUR PROFILES" OnlineProfilesFrameText2.Font = Enum.Font.SourceSans OnlineProfilesFrameText2.BackgroundTransparency = 1 OnlineProfilesFrameText2.TextXAlignment = Enum.TextXAlignment.Left OnlineProfilesFrameText2.TextYAlignment = Enum.TextYAlignment.Top OnlineProfilesFrameText2.Size = UDim2.new(1, 0, 0, 20) OnlineProfilesFrameText2.Position = UDim2.new(0, 10, 0, 48) OnlineProfilesFrameText2.Parent = OnlineProfilesFrame local OnlineProfilesFrameText3 = Instance.new("TextLabel") OnlineProfilesFrameText3.TextSize = 15 OnlineProfilesFrameText3.TextColor3 = Color3.fromRGB(85, 84, 85) OnlineProfilesFrameText3.Text = "PUBLIC PROFILES" OnlineProfilesFrameText3.Font = Enum.Font.SourceSans OnlineProfilesFrameText3.BackgroundTransparency = 1 OnlineProfilesFrameText3.TextXAlignment = Enum.TextXAlignment.Left OnlineProfilesFrameText3.TextYAlignment = Enum.TextYAlignment.Top OnlineProfilesFrameText3.Size = UDim2.new(1, 0, 0, 20) OnlineProfilesFrameText3.Position = UDim2.new(0, 231, 0, 48) OnlineProfilesFrameText3.Parent = OnlineProfilesFrame local OnlineProfilesBorder1 = Instance.new("Frame") OnlineProfilesBorder1.BackgroundColor3 = Color3.fromRGB(40, 39, 40) OnlineProfilesBorder1.BorderSizePixel = 0 OnlineProfilesBorder1.Size = UDim2.new(1, 0, 0, 1) OnlineProfilesBorder1.Position = UDim2.new(0, 0, 0, 41) OnlineProfilesBorder1.Parent = OnlineProfilesFrame local OnlineProfilesBorder2 = Instance.new("Frame") OnlineProfilesBorder2.BackgroundColor3 = Color3.fromRGB(40, 39, 40) OnlineProfilesBorder2.BorderSizePixel = 0 OnlineProfilesBorder2.Size = UDim2.new(0, 1, 1, -41) OnlineProfilesBorder2.Position = UDim2.new(0, 220, 0, 41) OnlineProfilesBorder2.Parent = OnlineProfilesFrame local OnlineProfilesList = Instance.new("ScrollingFrame") OnlineProfilesList.BackgroundTransparency = 1 OnlineProfilesList.Size = UDim2.new(0, 408, 0, 319) OnlineProfilesList.Position = UDim2.new(0, 230, 0, 122) OnlineProfilesList.CanvasSize = UDim2.new(0, 408, 0, 319) OnlineProfilesList.Parent = OnlineProfilesFrame local OnlineProfilesListGrid = Instance.new("UIGridLayout") OnlineProfilesListGrid.CellSize = UDim2.new(0, 134, 0, 144) OnlineProfilesListGrid.CellPadding = UDim2.new(0, 4, 0, 4) OnlineProfilesListGrid.Parent = OnlineProfilesList local OnlineProfilesFrameCorner = Instance.new("UICorner") OnlineProfilesFrameCorner.CornerRadius = UDim.new(0, 4) OnlineProfilesFrameCorner.Parent = OnlineProfilesFrame OnlineProfilesButton.MouseButton1Click:Connect(function() GuiLibrary.MainGui.ScaledGui.OnlineProfiles.Visible = true GuiLibrary.MainGui.ScaledGui.ClickGui.Visible = false if not profilesLoaded then local onlineprofiles = {} local saveplaceid = tostring(shared.CustomSaveVape or game.PlaceId) local success, result = pcall(function() return game:GetService("HttpService"):JSONDecode(game:HttpGet("https://raw.githubusercontent.com/7GrandDadPGN/VapeProfiles/main/Profiles/"..saveplaceid.."/profilelist.txt", true)) end) for i,v in pairs(success and result or {}) do onlineprofiles[i] = v end for i2,v2 in pairs(onlineprofiles) do local profileurl = "https://raw.githubusercontent.com/7GrandDadPGN/VapeProfiles/main/Profiles/"..saveplaceid.."/"..v2.OnlineProfileName local profilebox = Instance.new("Frame") profilebox.BackgroundColor3 = Color3.fromRGB(31, 30, 31) profilebox.Parent = OnlineProfilesList local profiletext = Instance.new("TextLabel") profiletext.TextSize = 15 profiletext.TextColor3 = Color3.fromRGB(137, 136, 137) profiletext.Size = UDim2.new(0, 100, 0, 20) profiletext.Position = UDim2.new(0, 18, 0, 25) profiletext.Font = Enum.Font.SourceSans profiletext.TextXAlignment = Enum.TextXAlignment.Left profiletext.TextYAlignment = Enum.TextYAlignment.Top profiletext.BackgroundTransparency = 1 profiletext.Text = i2 profiletext.Parent = profilebox local profiledownload = Instance.new("TextButton") profiledownload.BackgroundColor3 = Color3.fromRGB(31, 30, 31) profiledownload.Size = UDim2.new(0, 69, 0, 31) profiledownload.Font = Enum.Font.SourceSans profiledownload.TextColor3 = Color3.fromRGB(200, 200, 200) profiledownload.TextSize = 15 profiledownload.AutoButtonColor = false profiledownload.Text = "DOWNLOAD" profiledownload.Position = UDim2.new(0, 14, 0, 96) profiledownload.Visible = false profiledownload.Parent = profilebox profiledownload.ZIndex = 2 local profiledownloadbkg = Instance.new("Frame") profiledownloadbkg.Size = UDim2.new(0, 71, 0, 33) profiledownloadbkg.BackgroundColor3 = Color3.fromRGB(42, 41, 42) profiledownloadbkg.Position = UDim2.new(0, 13, 0, 95) profiledownloadbkg.ZIndex = 1 profiledownloadbkg.Visible = false profiledownloadbkg.Parent = profilebox profilebox.MouseEnter:Connect(function() profiletext.TextColor3 = Color3.fromRGB(200, 200, 200) profiledownload.Visible = true profiledownloadbkg.Visible = true end) profilebox.MouseLeave:Connect(function() profiletext.TextColor3 = Color3.fromRGB(137, 136, 137) profiledownload.Visible = false profiledownloadbkg.Visible = false end) profiledownload.MouseEnter:Connect(function() profiledownload.BackgroundColor3 = Color3.fromRGB(5, 134, 105) end) profiledownload.MouseLeave:Connect(function() profiledownload.BackgroundColor3 = Color3.fromRGB(31, 30, 31) end) profiledownload.MouseButton1Click:Connect(function() writefile(baseDirectory.."Profiles/"..v2.ProfileName..saveplaceid..".vapeprofile.txt", game:HttpGet(profileurl, true)) GuiLibrary.Profiles[v2.ProfileName] = {Keybind = "", Selected = false} local profiles = {} for i,v in pairs(GuiLibrary.Profiles) do table.insert(profiles, i) end table.sort(profiles, function(a, b) return b == "default" and true or a:lower() < b:lower() end) ProfilesTextList.RefreshValues(profiles) end) local profileround = Instance.new("UICorner") profileround.CornerRadius = UDim.new(0, 4) profileround.Parent = profilebox local profileTargetInfoMainInfoCorner = Instance.new("UICorner") profileTargetInfoMainInfoCorner.CornerRadius = UDim.new(0, 4) profileTargetInfoMainInfoCorner.Parent = profiledownload local profileTargetInfoHealthBackgroundCorner = Instance.new("UICorner") profileTargetInfoHealthBackgroundCorner.CornerRadius = UDim.new(0, 4) profileTargetInfoHealthBackgroundCorner.Parent = profiledownloadbkg end profilesloaded = true end end) OnlineProfilesExitButton.MouseButton1Click:Connect(function() GuiLibrary.MainGui.ScaledGui.OnlineProfiles.Visible = false GuiLibrary.MainGui.ScaledGui.ClickGui.Visible = true end) GUI.CreateDivider() local TextGUI = GuiLibrary.CreateCustomWindow({ Name = "Text GUI", Icon = "vape/assets/TextGUIIcon1.png", IconSize = 21 }) local TextGUICircleObject = {CircleList = {}} GUI.CreateCustomToggle({ Name = "Text GUI", Icon = "vape/assets/TextGUIIcon3.png", Function = function(callback) TextGUI.SetVisible(callback) end, Priority = 2 }) local GUIColorSlider = {RainbowValue = false} local TextGUIMode = {Value = "Normal"} local TextGUISortMode = {Value = "Alphabetical"} local TextGUIBackgroundToggle = {Enabled = false} local TextGUIObjects = {Logo = {}, Labels = {}, ShadowLabels = {}, Backgrounds = {}} local TextGUIConnections = {} local TextGUIFormatted = {} local VapeLogoFrame = Instance.new("Frame") VapeLogoFrame.BackgroundTransparency = 1 VapeLogoFrame.Size = UDim2.new(1, 0, 1, 0) VapeLogoFrame.Parent = TextGUI.GetCustomChildren() local VapeLogo = Instance.new("ImageLabel") VapeLogo.Parent = VapeLogoFrame VapeLogo.Name = "Logo" VapeLogo.Size = UDim2.new(0, 100, 0, 27) VapeLogo.Position = UDim2.new(1, -138, 0, 3) VapeLogo.BackgroundColor3 = Color3.new() VapeLogo.BorderSizePixel = 0 VapeLogo.BackgroundTransparency = 1 VapeLogo.Visible = true VapeLogo.Image = downloadVapeAsset("vape/assets/VapeLogo3.png") local VapeLogoV4 = Instance.new("ImageLabel") VapeLogoV4.Parent = VapeLogo VapeLogoV4.Size = UDim2.new(0, 33, 0, 33) VapeLogoV4.Name = "Logo2" VapeLogoV4.Position = UDim2.new(1, 2, 0, -2) VapeLogoV4.BorderSizePixel = 0 VapeLogoV4.BackgroundColor3 = Color3.new() VapeLogoV4.BackgroundTransparency = 1 VapeLogoV4.Image = downloadVapeAsset("vape/assets/VapeLogo4.png") local VapeLogoShadow = VapeLogo:Clone() VapeLogoShadow.ImageColor3 = Color3.new() VapeLogoShadow.ImageTransparency = 0.5 VapeLogoShadow.ZIndex = 0 VapeLogoShadow.Position = UDim2.new(0, 1, 0, 1) VapeLogoShadow.Visible = false VapeLogoShadow.Parent = VapeLogo VapeLogoShadow.Logo2.ImageColor3 = Color3.new() VapeLogoShadow.Logo2.ZIndex = 0 VapeLogoShadow.Logo2.ImageTransparency = 0.5 local VapeLogoGradient = Instance.new("UIGradient") VapeLogoGradient.Rotation = 90 VapeLogoGradient.Parent = VapeLogo local VapeLogoGradient2 = Instance.new("UIGradient") VapeLogoGradient2.Rotation = 90 VapeLogoGradient2.Parent = VapeLogoV4 local VapeText = Instance.new("TextLabel") VapeText.Parent = VapeLogoFrame VapeText.Size = UDim2.new(1, 0, 1, 0) VapeText.Position = UDim2.new(1, -154, 0, 35) VapeText.TextColor3 = Color3.new(1, 1, 1) VapeText.RichText = true VapeText.BackgroundTransparency = 1 VapeText.LineHeight = 1.2 VapeText.TextXAlignment = Enum.TextXAlignment.Left VapeText.TextYAlignment = Enum.TextYAlignment.Top VapeText.BorderSizePixel = 0 VapeText.BackgroundColor3 = Color3.new() VapeText.Font = Enum.Font.SourceSans VapeText.Text = "" VapeText.TextSize = 19 local VapeTextExtra = Instance.new("TextLabel") VapeTextExtra.Name = "ExtraText" VapeTextExtra.Parent = VapeText VapeTextExtra.LineHeight = 1.2 VapeTextExtra.Size = UDim2.new(1, 0, 1, 0) VapeTextExtra.Position = UDim2.new(0, 1, 0, 1) VapeTextExtra.BorderSizePixel = 0 VapeTextExtra.Visible = false VapeTextExtra.ZIndex = 0 VapeTextExtra.Text = "" VapeTextExtra.BackgroundTransparency = 1 VapeTextExtra.TextTransparency = 0.5 VapeTextExtra.TextXAlignment = Enum.TextXAlignment.Left VapeTextExtra.TextYAlignment = Enum.TextYAlignment.Top VapeTextExtra.TextColor3 = Color3.new() VapeTextExtra.Font = Enum.Font.SourceSans VapeTextExtra.TextSize = 19 local VapeCustomText = Instance.new("TextLabel") VapeCustomText.TextSize = 30 VapeCustomText.Font = Enum.Font.GothamBold VapeCustomText.Size = UDim2.new(1, 0, 1, 0) VapeCustomText.BackgroundTransparency = 1 VapeCustomText.Position = UDim2.new(0, 0, 0, 35) VapeCustomText.TextXAlignment = Enum.TextXAlignment.Left VapeCustomText.TextYAlignment = Enum.TextYAlignment.Top VapeCustomText.Text = "" VapeCustomText.Parent = VapeLogoFrame local VapeCustomTextShadow = VapeCustomText:Clone() VapeCustomTextShadow.ZIndex = -1 VapeCustomTextShadow.Size = UDim2.new(1, 0, 1, 0) VapeCustomTextShadow.TextTransparency = 0.5 VapeCustomTextShadow.TextColor3 = Color3.new() VapeCustomTextShadow.Position = UDim2.new(0, 1, 0, 1) VapeCustomTextShadow.Parent = VapeCustomText VapeCustomText:GetPropertyChangedSignal("TextXAlignment"):Connect(function() VapeCustomTextShadow.TextXAlignment = VapeCustomText.TextXAlignment end) local VapeBackground = Instance.new("Frame") VapeBackground.BackgroundTransparency = 1 VapeBackground.BorderSizePixel = 0 VapeBackground.BackgroundColor3 = Color3.new() VapeBackground.Size = UDim2.new(1, 0, 1, 0) VapeBackground.Visible = false VapeBackground.Parent = VapeLogoFrame VapeBackground.ZIndex = 0 local VapeBackgroundList = Instance.new("UIListLayout") VapeBackgroundList.FillDirection = Enum.FillDirection.Vertical VapeBackgroundList.SortOrder = Enum.SortOrder.LayoutOrder VapeBackgroundList.Padding = UDim.new(0, 0) VapeBackgroundList.Parent = VapeBackground local VapeBackgroundTable = {} local VapeScale = Instance.new("UIScale") VapeScale.Parent = VapeLogoFrame --why do other platforms do rendering differently local TextGUIOffsets = { [Enum.Platform.Android] = { 6, -10, 15, 12 }, [Enum.Platform.UWP] = { 1, 1, 23, 23 } } TextGUIOffsets[Enum.Platform.IOS] = TextGUIOffsets[Enum.Platform.Android] local function TextGUIUpdate() local scaledgui = vapeInjected and GuiLibrary.MainGui.ScaledGui if scaledgui and scaledgui.Visible then local formattedText = "" local moduleList = {} for i, v in pairs(GuiLibrary.ObjectsThatCanBeSaved) do if v.Type == "OptionsButton" and v.Api.Enabled then local blacklistedCheck = table.find(TextGUICircleObject.CircleList.ObjectList, v.Api.Name) blacklistedCheck = blacklistedCheck and TextGUICircleObject.CircleList.ObjectList[blacklistedCheck] if not blacklistedCheck then local extraText = v.Api.GetExtraText() table.insert(moduleList, {Text = v.Api.Name, ExtraText = extraText ~= "" and " "..extraText or ""}) end end end if TextGUISortMode.Value == "Alphabetical" then table.sort(moduleList, function(a, b) return a.Text:lower() < b.Text:lower() end) else table.sort(moduleList, function(a, b) return textService:GetTextSize(a.Text..a.ExtraText, VapeText.TextSize, VapeText.Font, Vector2.new(1000000, 1000000)).X > textService:GetTextSize(b.Text..b.ExtraText, VapeText.TextSize, VapeText.Font, Vector2.new(1000000, 1000000)).X end) end local backgroundList = {} local first = true for i, v in pairs(moduleList) do local newEntryText = v.Text..v.ExtraText if first then formattedText = "\n"..newEntryText first = false else formattedText = formattedText..'\n'..newEntryText end table.insert(backgroundList, newEntryText) end TextGUIFormatted = moduleList VapeTextExtra.Text = formattedText VapeText.Size = UDim2.fromOffset(154, (formattedText ~= "" and textService:GetTextSize(formattedText, VapeText.TextSize, VapeText.Font, Vector2.new(1000000, 1000000)) or Vector2.zero).Y) local offsets = TextGUIOffsets[inputService:GetPlatform()] or { 5, 1, 23, 23 } if TextGUI.GetCustomChildren().Parent then if (TextGUI.GetCustomChildren().Parent.Position.X.Offset + TextGUI.GetCustomChildren().Parent.Size.X.Offset / 2) >= (gameCamera.ViewportSize.X / 2) then VapeText.TextXAlignment = Enum.TextXAlignment.Right VapeTextExtra.TextXAlignment = Enum.TextXAlignment.Right VapeTextExtra.Position = UDim2.fromOffset(offsets[1], offsets[2]) VapeLogo.Position = UDim2.new(1, -142, 0, 8) VapeText.Position = UDim2.new(1, -158, 0, (VapeLogo.Visible and (TextGUIBackgroundToggle.Enabled and 41 or 35) or 5) + 5 + (VapeCustomText.Visible and 25 or 0) - offsets[3]) VapeCustomText.Position = UDim2.fromOffset(0, VapeLogo.Visible and 35 or 0) VapeCustomText.TextXAlignment = Enum.TextXAlignment.Right VapeBackgroundList.HorizontalAlignment = Enum.HorizontalAlignment.Right VapeBackground.Position = VapeText.Position + UDim2.fromOffset(-60, -2 + offsets[4]) else VapeText.TextXAlignment = Enum.TextXAlignment.Left VapeTextExtra.TextXAlignment = Enum.TextXAlignment.Left VapeTextExtra.Position = UDim2.fromOffset(offsets[1], offsets[2]) VapeLogo.Position = UDim2.fromOffset(2, 8) VapeText.Position = UDim2.fromOffset(6, (VapeLogo.Visible and (TextGUIBackgroundToggle.Enabled and 41 or 35) or 5) + 5 + (VapeCustomText.Visible and 25 or 0) - offsets[3]) VapeCustomText.Position = UDim2.fromOffset(0, VapeLogo.Visible and 35 or 0) VapeCustomText.TextXAlignment = Enum.TextXAlignment.Left VapeBackgroundList.HorizontalAlignment = Enum.HorizontalAlignment.Left VapeBackground.Position = VapeText.Position + UDim2.fromOffset(-4, -2 + offsets[4]) end end if TextGUIMode.Value == "Drawing" then for i,v in pairs(TextGUIObjects.Labels) do v.Visible = false v:Remove() TextGUIObjects.Labels[i] = nil end for i,v in pairs(TextGUIObjects.ShadowLabels) do v.Visible = false v:Remove() TextGUIObjects.ShadowLabels[i] = nil end for i,v in pairs(backgroundList) do local textdraw = Drawing.new("Text") textdraw.Text = v textdraw.Size = 23 * VapeScale.Scale textdraw.ZIndex = 2 textdraw.Position = VapeText.AbsolutePosition + Vector2.new(VapeText.TextXAlignment == Enum.TextXAlignment.Right and (VapeText.AbsoluteSize.X - textdraw.TextBounds.X), ((textdraw.Size - 3) * i) + 6) textdraw.Visible = true local textdraw2 = Drawing.new("Text") textdraw2.Text = textdraw.Text textdraw2.Size = 23 * VapeScale.Scale textdraw2.Position = textdraw.Position + Vector2.new(1, 1) textdraw2.Color = Color3.new() textdraw2.Transparency = 0.5 textdraw2.Visible = VapeTextExtra.Visible table.insert(TextGUIObjects.Labels, textdraw) table.insert(TextGUIObjects.ShadowLabels, textdraw2) end end for i,v in pairs(VapeBackground:GetChildren()) do table.clear(VapeBackgroundTable) if v:IsA("Frame") then v:Destroy() end end for i,v in pairs(backgroundList) do local textsize = textService:GetTextSize(v, VapeText.TextSize, VapeText.Font, Vector2.new(1000000, 1000000)) local backgroundFrame = Instance.new("Frame") backgroundFrame.BorderSizePixel = 0 backgroundFrame.BackgroundTransparency = 0.62 backgroundFrame.BackgroundColor3 = Color3.new() backgroundFrame.Visible = true backgroundFrame.ZIndex = 0 backgroundFrame.LayoutOrder = i backgroundFrame.Size = UDim2.fromOffset(textsize.X + 8, textsize.Y + 3) backgroundFrame.Parent = VapeBackground local backgroundLineFrame = Instance.new("Frame") backgroundLineFrame.Size = UDim2.new(0, 2, 1, 0) backgroundLineFrame.Position = (VapeBackgroundList.HorizontalAlignment == Enum.HorizontalAlignment.Left and UDim2.new() or UDim2.new(1, -2, 0, 0)) backgroundLineFrame.BorderSizePixel = 0 backgroundLineFrame.Name = "ColorFrame" backgroundLineFrame.Parent = backgroundFrame local backgroundLineExtra = Instance.new("Frame") backgroundLineExtra.BorderSizePixel = 0 backgroundLineExtra.BackgroundTransparency = 0.95 backgroundLineExtra.BackgroundColor3 = Color3.new() backgroundLineExtra.ZIndex = 0 backgroundLineExtra.Size = UDim2.new(1, 0, 0, 2) backgroundLineExtra.Position = UDim2.new(0, 0, 1, -1) backgroundLineExtra.Parent = backgroundFrame table.insert(VapeBackgroundTable, backgroundFrame) end GuiLibrary.UpdateUI(GUIColorSlider.Hue, GUIColorSlider.Sat, GUIColorSlider.Value) end end TextGUI.GetCustomChildren().Parent:GetPropertyChangedSignal("Position"):Connect(TextGUIUpdate) GuiLibrary.UpdateHudEvent.Event:Connect(TextGUIUpdate) VapeScale:GetPropertyChangedSignal("Scale"):Connect(function() local childrenobj = TextGUI.GetCustomChildren() local check = (childrenobj.Parent.Position.X.Offset + childrenobj.Parent.Size.X.Offset / 2) >= (gameCamera.ViewportSize.X / 2) childrenobj.Position = UDim2.new((check and -(VapeScale.Scale - 1) or 0), (check and 0 or -6 * (VapeScale.Scale - 1)), 1, -6 * (VapeScale.Scale - 1)) TextGUIUpdate() end) TextGUIMode = TextGUI.CreateDropdown({ Name = "Mode", List = {"Normal", "Drawing"}, Function = function(val) VapeLogoFrame.Visible = val == "Normal" for i,v in pairs(TextGUIConnections) do v:Disconnect() end for i,v in pairs(TextGUIObjects) do for i2,v2 in pairs(v) do v2.Visible = false v2:Remove() v[i2] = nil end end if val == "Drawing" then local VapeLogoDrawing = Drawing.new("Image") VapeLogoDrawing.Data = readfile("vape/assets/VapeLogo3.png") VapeLogoDrawing.Size = VapeLogo.AbsoluteSize VapeLogoDrawing.Position = VapeLogo.AbsolutePosition + Vector2.new(0, 36) VapeLogoDrawing.ZIndex = 2 VapeLogoDrawing.Visible = VapeLogo.Visible local VapeLogoV4Drawing = Drawing.new("Image") VapeLogoV4Drawing.Data = readfile("vape/assets/VapeLogo4.png") VapeLogoV4Drawing.Size = VapeLogoV4.AbsoluteSize VapeLogoV4Drawing.Position = VapeLogoV4.AbsolutePosition + Vector2.new(0, 36) VapeLogoV4Drawing.ZIndex = 2 VapeLogoV4Drawing.Visible = VapeLogo.Visible local VapeLogoShadowDrawing = Drawing.new("Image") VapeLogoShadowDrawing.Data = readfile("vape/assets/VapeLogo3.png") VapeLogoShadowDrawing.Size = VapeLogo.AbsoluteSize VapeLogoShadowDrawing.Position = VapeLogo.AbsolutePosition + Vector2.new(1, 37) VapeLogoShadowDrawing.Transparency = 0.5 VapeLogoShadowDrawing.Visible = VapeLogo.Visible and VapeLogoShadow.Visible local VapeLogo4Drawing = Drawing.new("Image") VapeLogo4Drawing.Data = readfile("vape/assets/VapeLogo4.png") VapeLogo4Drawing.Size = VapeLogoV4.AbsoluteSize VapeLogo4Drawing.Position = VapeLogoV4.AbsolutePosition + Vector2.new(1, 37) VapeLogo4Drawing.Transparency = 0.5 VapeLogo4Drawing.Visible = VapeLogo.Visible and VapeLogoShadow.Visible local VapeCustomDrawingText = Drawing.new("Text") VapeCustomDrawingText.Size = 30 VapeCustomDrawingText.Text = VapeCustomText.Text VapeCustomDrawingText.Color = VapeCustomText.TextColor3 VapeCustomDrawingText.ZIndex = 2 VapeCustomDrawingText.Position = VapeCustomText.AbsolutePosition + Vector2.new(VapeText.TextXAlignment == Enum.TextXAlignment.Right and (VapeCustomText.AbsoluteSize.X - VapeCustomDrawingText.TextBounds.X), 32) VapeCustomDrawingText.Visible = VapeCustomText.Visible local VapeCustomDrawingShadow = Drawing.new("Text") VapeCustomDrawingShadow.Size = 30 VapeCustomDrawingShadow.Text = VapeCustomText.Text VapeCustomDrawingShadow.Transparency = 0.5 VapeCustomDrawingShadow.Color = Color3.new() VapeCustomDrawingShadow.Position = VapeCustomDrawingText.Position + Vector2.new(1, 1) VapeCustomDrawingShadow.Visible = VapeCustomText.Visible and VapeTextExtra.Visible pcall(function() VapeLogoShadowDrawing.Color = Color3.new() VapeLogo4Drawing.Color = Color3.new() VapeLogoDrawing.Color = VapeLogoGradient.Color.Keypoints[1].Value end) table.insert(TextGUIObjects.Logo, VapeLogoDrawing) table.insert(TextGUIObjects.Logo, VapeLogoV4Drawing) table.insert(TextGUIObjects.Logo, VapeLogoShadowDrawing) table.insert(TextGUIObjects.Logo, VapeLogo4Drawing) table.insert(TextGUIObjects.Logo, VapeCustomDrawingText) table.insert(TextGUIObjects.Logo, VapeCustomDrawingShadow) table.insert(TextGUIConnections, VapeLogo:GetPropertyChangedSignal("AbsolutePosition"):Connect(function() VapeLogoDrawing.Position = VapeLogo.AbsolutePosition + Vector2.new(0, 36) VapeLogoShadowDrawing.Position = VapeLogo.AbsolutePosition + Vector2.new(1, 37) end)) table.insert(TextGUIConnections, VapeLogo:GetPropertyChangedSignal("AbsoluteSize"):Connect(function() VapeLogoDrawing.Size = VapeLogo.AbsoluteSize VapeLogoShadowDrawing.Size = VapeLogo.AbsoluteSize VapeCustomDrawingText.Size = 30 * VapeScale.Scale VapeCustomDrawingShadow.Size = 30 * VapeScale.Scale end)) table.insert(TextGUIConnections, VapeLogoV4:GetPropertyChangedSignal("AbsolutePosition"):Connect(function() VapeLogoV4Drawing.Position = VapeLogoV4.AbsolutePosition + Vector2.new(0, 36) VapeLogo4Drawing.Position = VapeLogoV4.AbsolutePosition + Vector2.new(1, 37) end)) table.insert(TextGUIConnections, VapeLogoV4:GetPropertyChangedSignal("AbsoluteSize"):Connect(function() VapeLogoV4Drawing.Size = VapeLogoV4.AbsoluteSize VapeLogo4Drawing.Size = VapeLogoV4.AbsoluteSize end)) table.insert(TextGUIConnections, VapeCustomText:GetPropertyChangedSignal("AbsolutePosition"):Connect(function() VapeCustomDrawingText.Position = VapeCustomText.AbsolutePosition + Vector2.new(VapeText.TextXAlignment == Enum.TextXAlignment.Right and (VapeCustomText.AbsoluteSize.X - VapeCustomDrawingText.TextBounds.X), 32) VapeCustomDrawingShadow.Position = VapeCustomDrawingText.Position + Vector2.new(1, 1) end)) table.insert(TextGUIConnections, VapeLogoShadow:GetPropertyChangedSignal("Visible"):Connect(function() VapeLogoShadowDrawing.Visible = VapeLogoShadow.Visible VapeLogo4Drawing.Visible = VapeLogoShadow.Visible end)) table.insert(TextGUIConnections, VapeTextExtra:GetPropertyChangedSignal("Visible"):Connect(function() for i,textdraw in pairs(TextGUIObjects.ShadowLabels) do textdraw.Visible = VapeTextExtra.Visible end VapeCustomDrawingShadow.Visible = VapeCustomText.Visible and VapeTextExtra.Visible end)) table.insert(TextGUIConnections, VapeLogo:GetPropertyChangedSignal("Visible"):Connect(function() VapeLogoDrawing.Visible = VapeLogo.Visible VapeLogoV4Drawing.Visible = VapeLogo.Visible VapeLogoShadowDrawing.Visible = VapeLogo.Visible and VapeTextExtra.Visible VapeLogo4Drawing.Visible = VapeLogo.Visible and VapeTextExtra.Visible end)) table.insert(TextGUIConnections, VapeCustomText:GetPropertyChangedSignal("Visible"):Connect(function() VapeCustomDrawingText.Visible = VapeCustomText.Visible VapeCustomDrawingShadow.Visible = VapeCustomText.Visible and VapeTextExtra.Visible end)) table.insert(TextGUIConnections, VapeCustomText:GetPropertyChangedSignal("Text"):Connect(function() VapeCustomDrawingText.Text = VapeCustomText.Text VapeCustomDrawingShadow.Text = VapeCustomText.Text VapeCustomDrawingText.Position = VapeCustomText.AbsolutePosition + Vector2.new(VapeText.TextXAlignment == Enum.TextXAlignment.Right and (VapeCustomText.AbsoluteSize.X - VapeCustomDrawingText.TextBounds.X), 32) VapeCustomDrawingShadow.Position = VapeCustomDrawingText.Position + Vector2.new(1, 1) end)) table.insert(TextGUIConnections, VapeCustomText:GetPropertyChangedSignal("TextColor3"):Connect(function() VapeCustomDrawingText.Color = VapeCustomText.TextColor3 end)) table.insert(TextGUIConnections, VapeText:GetPropertyChangedSignal("AbsolutePosition"):Connect(function() for i,textdraw in pairs(TextGUIObjects.Labels) do textdraw.Position = VapeText.AbsolutePosition + Vector2.new(VapeText.TextXAlignment == Enum.TextXAlignment.Right and (VapeText.AbsoluteSize.X - textdraw.TextBounds.X), ((textdraw.Size - 3) * i) + 6) end for i,textdraw in pairs(TextGUIObjects.ShadowLabels) do textdraw.Position = Vector2.new(1, 1) + (VapeText.AbsolutePosition + Vector2.new(VapeText.TextXAlignment == Enum.TextXAlignment.Right and (VapeText.AbsoluteSize.X - textdraw.TextBounds.X), ((textdraw.Size - 3) * i) + 6)) end end)) table.insert(TextGUIConnections, VapeLogoGradient:GetPropertyChangedSignal("Color"):Connect(function() pcall(function() VapeLogoDrawing.Color = VapeLogoGradient.Color.Keypoints[1].Value end) end)) end end }) TextGUISortMode = TextGUI.CreateDropdown({ Name = "Sort", List = {"Alphabetical", "Length"}, Function = function(val) GuiLibrary.UpdateHudEvent:Fire() end }) local TextGUIFonts = {"Arial"} local TextGUIFonts2 = {"GothamBold"} for i,v in pairs(Enum.Font:GetEnumItems()) do if v.Name ~= "Arial" then table.insert(TextGUIFonts, v.Name) end if v.Name ~= "GothamBold" then table.insert(TextGUIFonts2, v.Name) end end TextGUI.CreateDropdown({ Name = "Font", List = TextGUIFonts, Function = function(val) VapeText.Font = Enum.Font[val] VapeTextExtra.Font = Enum.Font[val] GuiLibrary.UpdateHudEvent:Fire() end }) TextGUI.CreateDropdown({ Name = "CustomTextFont", List = TextGUIFonts2, Function = function(val) VapeCustomText.Font = Enum.Font[val] VapeCustomTextShadow.Font = Enum.Font[val] GuiLibrary.UpdateHudEvent:Fire() end }) TextGUI.CreateSlider({ Name = "Scale", Min = 1, Max = 50, Default = 10, Function = function(val) VapeScale.Scale = val / 10 end }) TextGUI.CreateToggle({ Name = "Shadow", Function = function(callback) VapeTextExtra.Visible = callback VapeLogoShadow.Visible = callback end, HoverText = "Renders shadowed text." }) TextGUI.CreateToggle({ Name = "Watermark", Function = function(callback) VapeLogo.Visible = callback GuiLibrary.UpdateHudEvent:Fire() end, HoverText = "Renders a vape watermark" }) TextGUIBackgroundToggle = TextGUI.CreateToggle({ Name = "Render background", Function = function(callback) VapeBackground.Visible = callback GuiLibrary.UpdateHudEvent:Fire() end }) TextGUI.CreateToggle({ Name = "Hide Modules", Function = function(callback) if TextGUICircleObject.Object then TextGUICircleObject.Object.Visible = callback end end }) TextGUICircleObject = TextGUI.CreateCircleWindow({ Name = "Blacklist", Type = "Blacklist", UpdateFunction = function() GuiLibrary.UpdateHudEvent:Fire() end }) TextGUICircleObject.Object.Visible = false local TextGUIGradient = TextGUI.CreateToggle({ Name = "Gradient Logo", Function = function() GuiLibrary.UpdateHudEvent:Fire() end }) TextGUI.CreateToggle({ Name = "Alternate Text", Function = function() GuiLibrary.UpdateHudEvent:Fire() end }) local CustomText = {Value = "", Object = nil} TextGUI.CreateToggle({ Name = "Add custom text", Function = function(callback) VapeCustomText.Visible = callback CustomText.Object.Visible = callback GuiLibrary.UpdateHudEvent:Fire() end, HoverText = "Renders a custom label" }) CustomText = TextGUI.CreateTextBox({ Name = "Custom text", FocusLost = function(enter) VapeCustomText.Text = CustomText.Value VapeCustomTextShadow.Text = CustomText.Value end }) CustomText.Object.Visible = false local function newHealthColor(percent) if percent > 0.5 then return Color3.fromRGB(5, 134, 105):lerp(Color3.fromRGB(255, 255, 0), (0.5 - (percent - 0.5)) / 0.5) end return Color3.fromRGB(255, 255, 0):lerp(Color3.fromRGB(249, 57, 55), (0.5 - percent) / 0.5) end local owners = { ["da3ishmember"] = 4798834838, ["MeWhenScytheDisabler"] = 4825635988 } local TargetInfo = GuiLibrary.CreateCustomWindow({ Name = "Target Info", Icon = "vape/assets/TargetInfoIcon1.png", IconSize = 16 }) local TargetInfoBackground = {Enabled = false} local TargetInfoMainFrame = Instance.new("Frame") TargetInfoMainFrame.BackgroundColor3 = Color3.fromRGB(26, 25, 26) TargetInfoMainFrame.BorderSizePixel = 0 TargetInfoMainFrame.BackgroundTransparency = 1 TargetInfoMainFrame.Size = UDim2.new(0, 220, 0, 72) TargetInfoMainFrame.Position = UDim2.new(0, 0, 0, 5) TargetInfoMainFrame.Parent = TargetInfo.GetCustomChildren() local TargetInfoMainInfo = Instance.new("Frame") TargetInfoMainInfo.BackgroundColor3 = Color3.new(0.92,0.92,0.92) TargetInfoMainInfo.Size = UDim2.new(0, 235, 0, 80) TargetInfoMainInfo.BackgroundTransparency = 0.25 TargetInfoMainInfo.Position = UDim2.new(0, 0, 0, 0) TargetInfoMainInfo.Name = "MainInfo" TargetInfoMainInfo.Parent = TargetInfoMainFrame local TargetInfoName = Instance.new("TextLabel") TargetInfoName.TextSize = 14 TargetInfoName.Font = Enum.Font.Arial TargetInfoName.TextColor3 = Color3.fromRGB(0, 0, 0) TargetInfoName.Position = UDim2.new(0, 115, 0, 8) TargetInfoName.TextStrokeTransparency = 1 TargetInfoName.BackgroundTransparency = 1 TargetInfoName.Size = UDim2.new(0, 80, 0, 20) TargetInfoName.Text = "this dead nigga" TargetInfoName.ZIndex = 2 TargetInfoName.TextXAlignment = Enum.TextXAlignment.Center TargetInfoName.TextYAlignment = Enum.TextYAlignment.Top TargetInfoName.Parent = TargetInfoMainInfo local TargetInfoNameShadow = TargetInfoName:Clone() TargetInfoNameShadow.Size = UDim2.new(1, 0, 1, 0) TargetInfoNameShadow.TextTransparency = 1 TargetInfoNameShadow.TextColor3 = Color3.new() TargetInfoNameShadow.ZIndex = 1 TargetInfoNameShadow.Position = UDim2.new(0, 0.5, 0, 0.5) TargetInfoName:GetPropertyChangedSignal("Text"):Connect(function() TargetInfoNameShadow.Text = TargetInfoName.Text end) TargetInfoNameShadow.Parent = TargetInfoName local TargetInfoHealthBackground = Instance.new("Frame") TargetInfoHealthBackground.BackgroundColor3 = Color3.fromRGB(32, 32, 32) TargetInfoHealthBackground.Size = UDim2.new(0, 145, 0, 4) TargetInfoHealthBackground.Position = UDim2.new(0, 84, 0, 29) TargetInfoHealthBackground.Parent = TargetInfoMainInfo local TargetInfoHealthBackgroundShadow = Instance.new("ImageLabel") TargetInfoHealthBackgroundShadow.AnchorPoint = Vector2.new(0.5, 0.5) TargetInfoHealthBackgroundShadow.Position = UDim2.new(0.5, 0, 0.5, 6) TargetInfoHealthBackgroundShadow.Image = downloadVapeAsset("vape/assets/WindowBlur.png") TargetInfoHealthBackgroundShadow.BackgroundTransparency = 1 TargetInfoHealthBackgroundShadow.ImageTransparency = 1 TargetInfoHealthBackgroundShadow.ZIndex = -1 TargetInfoHealthBackgroundShadow.Size = UDim2.new(1, 6, 1, 6) TargetInfoHealthBackgroundShadow.ImageColor3 = Color3.fromRGB(255, 255, 255) TargetInfoHealthBackgroundShadow.ScaleType = Enum.ScaleType.Slice TargetInfoHealthBackgroundShadow.SliceCenter = Rect.new(10, 10, 118, 118) TargetInfoHealthBackgroundShadow.Parent = TargetInfoHealthBackground local TargetInfoHealth = Instance.new("Frame") TargetInfoHealth.BackgroundColor3 = Color3.fromRGB(40, 137, 109) TargetInfoHealth.Size = UDim2.new(1, 0, 1, 0) TargetInfoHealth.ZIndex = 3 TargetInfoHealth.BorderSizePixel = 0 TargetInfoHealth.Parent = TargetInfoHealthBackground local TargetInfoHealthExtra = Instance.new("Frame") TargetInfoHealthExtra.BackgroundColor3 = Color3.fromRGB(255, 170, 0) TargetInfoHealthExtra.Size = UDim2.new(0, 0, 1, 0) TargetInfoHealthExtra.ZIndex = 4 TargetInfoHealthExtra.BorderSizePixel = 0 TargetInfoHealthExtra.AnchorPoint = Vector2.new(1, 0) TargetInfoHealthExtra.Position = UDim2.new(1, 0, 0, 0) TargetInfoHealthExtra.Parent = TargetInfoHealth local TargetInfoImage = Instance.new("ImageLabel") TargetInfoImage.Size = UDim2.new(0, 70, 0, 70) TargetInfoImage.BackgroundTransparency = 1 TargetInfoImage.Image = 'rbxthumb://type=AvatarHeadShot&id='..playersService.LocalPlayer.UserId..'&w=420&h=420' TargetInfoImage.Position = UDim2.new(0, 8, 0, 2) TargetInfoImage.Parent = TargetInfoMainInfo local TargetInfoMainInfoCorner = Instance.new("UICorner") TargetInfoMainInfoCorner.CornerRadius = UDim.new(0, 18) TargetInfoMainInfoCorner.Parent = TargetInfoMainInfo local TargetInfoHealthBackgroundCorner = Instance.new("UICorner") TargetInfoHealthBackgroundCorner.CornerRadius = UDim.new(0, 3072) TargetInfoHealthBackgroundCorner.Parent = TargetInfoHealthBackground local TargetInfoHealthCorner = Instance.new("UICorner") TargetInfoHealthCorner.CornerRadius = UDim.new(0, 3072) TargetInfoHealthCorner.Parent = TargetInfoHealth local TargetInfoHealthCorner2 = Instance.new("UICorner") TargetInfoHealthCorner2.CornerRadius = UDim.new(0, 3072) TargetInfoHealthCorner2.Parent = TargetInfoHealthExtra local TargetInfoHealthExtraCorner = Instance.new("UICorner") TargetInfoHealthExtraCorner.CornerRadius = UDim.new(0, 4) TargetInfoHealthExtraCorner.Parent = TargetInfoImage TargetInfo.CreateDropdown({ Name = "Font", List = TextGUIFonts, Function = function(val) TargetInfoName.Font = Enum.Font[val] TargetInfoNameShadow.Font = Enum.Font[val] end }) TargetInfoBackground = TargetInfo.CreateToggle({ Name = "Use Background", Function = function(callback) TargetInfoMainInfo.BackgroundTransparency = callback and 0.25 or 1 TargetInfoName.TextColor3 = callback and Color3.fromRGB(23, 23, 23) or Color3.fromRGB(12, 12, 12) TargetInfoName.Size = UDim2.new(0, 80, 0, callback and 18 or 18) TargetInfoName.TextSize = callback and 17 or 17 TargetInfoHealthBackground.Size = UDim2.new(0, 145, 0, callback and 11 or 11) end, Default = true }) local TargetInfoDisplayNames = TargetInfo.CreateToggle({ Name = "Use Display Names", Function = function(callback) end, Default = true }) local TargetInfoHealthTween TargetInfo.GetCustomChildren().Parent:GetPropertyChangedSignal("Size"):Connect(function() TargetInfoMainInfo.Position = UDim2.fromOffset(0, TargetInfo.GetCustomChildren().Parent.Size ~= UDim2.fromOffset(220, 0) and -5 or 40) end) shared.VapeTargetInfo = { UpdateInfo = function(tab, targetsize) if TargetInfo.GetCustomChildren().Parent then local hasTarget = false for _, v in pairs(shared.VapeTargetInfo.Targets) do hasTarget = true TargetInfoImage.Image = 'rbxthumb://type=AvatarHeadShot&id='..v.Player.UserId..'&w=420&h=420' TargetInfoHealth:TweenSize(UDim2.new(math.clamp(v.Humanoid.Health / v.Humanoid.MaxHealth, 0, 1), 0, 1, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 0.25, true) TargetInfoHealthExtra:TweenSize(UDim2.new(math.clamp((v.Humanoid.Health / v.Humanoid.MaxHealth) - 1, 0, 1), 0, 1, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 0.25, true) if TargetInfoHealthTween then TargetInfoHealthTween:Cancel() end TargetInfoHealthTween = game:GetService("TweenService"):Create(TargetInfoHealth, TweenInfo.new(0.25, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundColor3 = newHealthColor(math.clamp(v.Humanoid.Health / v.Humanoid.MaxHealth, 0, 1))}) TargetInfoHealthTween:Play() TargetInfoName.Text = (TargetInfoDisplayNames.Enabled and v.Player.DisplayName or v.Player.Name) break end TargetInfoMainInfo.Visible = hasTarget or (TargetInfo.GetCustomChildren().Parent.Size ~= UDim2.new(0, 220, 0, 0)) end end, Targets = {}, Object = TargetInfo } task.spawn(function() repeat if shared.VapeTargetInfo then shared.VapeTargetInfo.UpdateInfo() end task.wait() until not vapeInjected end) GUI.CreateCustomToggle({ Name = "Target Info", Icon = "vape/assets/TargetInfoIcon2.png", Function = function(callback) TargetInfo.SetVisible(callback) end, Priority = 1 }) local GeneralSettings = GUI.CreateDivider2("General Settings") local ModuleSettings = GUI.CreateDivider2("Module Settings") local GUISettings = GUI.CreateDivider2("GUI Settings") local TeamsByColorToggle = {Enabled = false} TeamsByColorToggle = ModuleSettings.CreateToggle({ Name = "Teams by color", Function = function() if TeamsByColorToggle.Refresh then TeamsByColorToggle.Refresh:Fire() end end, Default = true, HoverText = "Ignore players on your team designated by the game" }) TeamsByColorToggle.Refresh = Instance.new("BindableEvent") local MiddleClickInput ModuleSettings.CreateToggle({ Name = "MiddleClick friends", Function = function(callback) if callback then MiddleClickInput = inputService.InputBegan:Connect(function(input1) if input1.UserInputType == Enum.UserInputType.MouseButton3 then local entityLibrary = shared.vapeentity if entityLibrary then local rayparams = RaycastParams.new() rayparams.FilterType = Enum.RaycastFilterType.Whitelist local chars = {} for i,v in pairs(entityLibrary.entityList) do table.insert(chars, v.Character) end rayparams.FilterDescendantsInstances = chars local mouseunit = playersService.LocalPlayer:GetMouse().UnitRay local ray = workspace:Raycast(mouseunit.Origin, mouseunit.Direction * 10000, rayparams) if ray then for i,v in pairs(entityLibrary.entityList) do if ray.Instance:IsDescendantOf(v.Character) then local found = table.find(FriendsTextList.ObjectList, v.Player.Name) if not found then table.insert(FriendsTextList.ObjectList, v.Player.Name) table.insert(FriendsTextList.ObjectListEnabled, true) FriendsTextList.RefreshValues(FriendsTextList.ObjectList) else table.remove(FriendsTextList.ObjectList, found) table.remove(FriendsTextList.ObjectListEnabled, found) FriendsTextList.RefreshValues(FriendsTextList.ObjectList) end break end end end end end end) else if MiddleClickInput then MiddleClickInput:Disconnect() end end end, HoverText = "Click middle mouse button to add the player you are hovering over as a friend" }) ModuleSettings.CreateToggle({ Name = "Lobby Check", Function = function() end, Default = true, HoverText = "Temporarily disables certain features in server lobbies." }) GUIColorSlider = GUI.CreateColorSlider("GUI Theme", function(h, s, v) GuiLibrary.UpdateUI(h, s, v) end) local BlatantModeToggle = GUI.CreateToggle({ Name = "Blatant mode", Function = function() end, HoverText = "Required for certain features." }) local windowSortOrder = { CombatButton = 1, BlatantButton = 2, RenderButton = 3, UtilityButton = 4, WorldButton = 5, FriendsButton = 6, TargetsButton = 7, ProfilesButton = 8 } local windowSortOrder2 = {"Combat", "Blatant", "Render", "Utility", "World"} local function getVapeSaturation(val) local sat = 0.9 if val < 0.03 then sat = 0.75 + (0.15 * math.clamp(val / 0.03, 0, 1)) end if val > 0.59 then sat = 0.9 - (0.4 * math.clamp((val - 0.59) / 0.07, 0, 1)) end if val > 0.68 then sat = 0.5 + (0.4 * math.clamp((val - 0.68) / 0.14, 0, 1)) end if val > 0.89 then sat = 0.9 - (0.15 * math.clamp((val - 0.89) / 0.1, 0, 1)) end return sat end GuiLibrary.UpdateUI = function(h, s, val, bypass) pcall(function() local rainbowGUICheck = GUIColorSlider.RainbowValue local mainRainbowSaturation = rainbowGUICheck and getVapeSaturation(h) or s local mainRainbowGradient = h + (rainbowGUICheck and -0.05 or 0) mainRainbowGradient = mainRainbowGradient % 1 GuiLibrary.ObjectsThatCanBeSaved.GUIWindow.Object.Logo1.Logo2.ImageColor3 = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) VapeText.TextColor3 = Color3.fromHSV(TextGUIGradient.Enabled and mainRainbowGradient or h, mainRainbowSaturation, rainbowGUICheck and 1 or val) VapeCustomText.TextColor3 = VapeText.TextColor3 VapeLogoGradient.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val)), ColorSequenceKeypoint.new(1, VapeText.TextColor3) }) VapeLogoGradient2.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, Color3.fromHSV(h, TextGUIGradient.Enabled and rainbowGUICheck and mainRainbowSaturation or 0, 1)), ColorSequenceKeypoint.new(1, Color3.fromHSV(TextGUIGradient.Enabled and mainRainbowGradient or h, TextGUIGradient.Enabled and rainbowGUICheck and mainRainbowSaturation or 0, 1)) }) local newTextGUIText = "\n" local backgroundTable = {} for i, v in pairs(TextGUIFormatted) do local rainbowcolor = h + (rainbowGUICheck and (-0.025 * (i + (TextGUIGradient.Enabled and 2 or 0))) or 0) rainbowcolor = rainbowcolor % 1 local newcolor = Color3.fromHSV(rainbowcolor, rainbowGUICheck and getVapeSaturation(rainbowcolor) or mainRainbowSaturation, rainbowGUICheck and 1 or val) newTextGUIText = newTextGUIText..''..v.Text..''..v.ExtraText..'\n' backgroundTable[i] = newcolor end if TextGUIMode.Value == "Drawing" then for i,v in pairs(TextGUIObjects.Labels) do if backgroundTable[i] then v.Color = backgroundTable[i] end end end if TextGUIBackgroundToggle.Enabled then for i, v in pairs(VapeBackgroundTable) do v.ColorFrame.BackgroundColor3 = backgroundTable[v.LayoutOrder] or Color3.new() end end VapeText.Text = newTextGUIText if (not GuiLibrary.MainGui.ScaledGui.ClickGui.Visible) and (not GuiLibrary.MainGui.ScaledGui.LegitGui.Visible) and (not bypass) then return end GuiLibrary.MainGui.ScaledGui.ClickGui.SearchBar.LegitMode.ImageColor3 = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) local buttonColorIndex = 0 for i, v in pairs(GuiLibrary.ObjectsThatCanBeSaved) do if v.Type == "TargetFrame" then if v.Object2.Visible then v.Object.TextButton.Frame.BackgroundColor3 = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) end elseif v.Type == "TargetButton" then if v.Api.Enabled then v.Object.BackgroundColor3 = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) end elseif v.Type == "CircleListFrame" then if v.Object2.Visible then v.Object.TextButton.Frame.BackgroundColor3 = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) end elseif v.Type == "LegitModule" then if v.Toggle.Visible and v.Api.Enabled then v.Toggle.BackgroundColor3 = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) end elseif (v.Type == "Button" or v.Type == "ButtonMain") and v.Api.Enabled then buttonColorIndex = buttonColorIndex + 1 local rainbowcolor = h + (rainbowGUICheck and (-0.025 * windowSortOrder[i]) or 0) rainbowcolor = rainbowcolor % 1 local newcolor = Color3.fromHSV(rainbowcolor, rainbowGUICheck and getVapeSaturation(rainbowcolor) or mainRainbowSaturation, rainbowGUICheck and 1 or val) v.Object.ButtonText.TextColor3 = newcolor if v.Object:FindFirstChild("ButtonIcon") then v.Object.ButtonIcon.ImageColor3 = newcolor end elseif v.Type == "OptionsButton" then if v.Api.Enabled then local newcolor = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) if (not oldrainbow) then local mainRainbowGradient = table.find(windowSortOrder2, v.Object.Parent.Parent.Name) mainRainbowGradient = mainRainbowGradient and (mainRainbowGradient - 1) > 0 and GuiLibrary.ObjectsThatCanBeSaved[windowSortOrder2[mainRainbowGradient - 1].."Window"].SortOrder or 0 local rainbowcolor = h + (rainbowGUICheck and (-0.025 * (mainRainbowGradient + v.SortOrder)) or 0) rainbowcolor = rainbowcolor % 1 newcolor = Color3.fromHSV(rainbowcolor, rainbowGUICheck and getVapeSaturation(rainbowcolor) or mainRainbowSaturation, rainbowGUICheck and 1 or val) end v.Object.BackgroundColor3 = newcolor end elseif v.Type == "ExtrasButton" then if v.Api.Enabled then local rainbowcolor = h + (rainbowGUICheck and (-0.025 * buttonColorIndex) or 0) rainbowcolor = rainbowcolor % 1 local newcolor = Color3.fromHSV(rainbowcolor, rainbowGUICheck and getVapeSaturation(rainbowcolor) or mainRainbowSaturation, rainbowGUICheck and 1 or val) v.Object.ImageColor3 = newcolor end elseif (v.Type == "Toggle" or v.Type == "ToggleMain") and v.Api.Enabled then v.Object.ToggleFrame1.BackgroundColor3 = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) elseif v.Type == "Slider" or v.Type == "SliderMain" then v.Object.Slider.FillSlider.BackgroundColor3 = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) v.Object.Slider.FillSlider.ButtonSlider.ImageColor3 = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) elseif v.Type == "TwoSlider" then v.Object.Slider.FillSlider.BackgroundColor3 = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) v.Object.Slider.ButtonSlider.ImageColor3 = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) v.Object.Slider.ButtonSlider2.ImageColor3 = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) end end local rainbowcolor = h + (rainbowGUICheck and (-0.025 * buttonColorIndex) or 0) rainbowcolor = rainbowcolor % 1 GuiLibrary.ObjectsThatCanBeSaved.GUIWindow.Object.Children.Extras.MainButton.ImageColor3 = (GUI.GetVisibleIcons() > 0 and Color3.fromHSV(rainbowcolor, getVapeSaturation(rainbowcolor), 1) or Color3.fromRGB(199, 199, 199)) for i, v in pairs(ProfilesTextList.ScrollingObject.ScrollingFrame:GetChildren()) do if v:IsA("TextButton") and v.ItemText.Text == GuiLibrary.CurrentProfile then v.BackgroundColor3 = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) v.ImageButton.BackgroundColor3 = Color3.fromHSV(h, mainRainbowSaturation, rainbowGUICheck and 1 or val) v.ItemText.TextColor3 = Color3.new(1, 1, 1) v.ItemText.TextStrokeTransparency = 0.75 end end end) end GUISettings.CreateToggle({ Name = "Blur Background", Function = function(callback) GuiLibrary.MainBlur.Size = (callback and 25 or 0) game:GetService("RunService"):SetRobloxGuiFocused(GuiLibrary.MainGui.ScaledGui.ClickGui.Visible and callback) end, Default = true, HoverText = "Blur the background of the GUI" }) local welcomeMessage = GUISettings.CreateToggle({ Name = "GUI bind indicator", Function = function() end, Default = true, HoverText = 'Displays a message indicating your GUI keybind upon injecting.\nI.E "Press RIGHTSHIFT to open GUI"' }) GUISettings.CreateToggle({ Name = "Old Rainbow", Function = function(callback) oldrainbow = callback end, HoverText = "Reverts to old rainbow" }) GUISettings.CreateToggle({ Name = "Show Tooltips", Function = function(callback) GuiLibrary.ToggleTooltips = callback end, Default = true, HoverText = "Toggles visibility of these" }) local GUIRescaleToggle = GUISettings.CreateToggle({ Name = "Rescale", Function = function(callback) task.spawn(function() GuiLibrary.MainRescale.Scale = (callback and math.clamp(gameCamera.ViewportSize.X / 1920, 0.5, 1) or 0.99) task.wait(0.01) GuiLibrary.MainRescale.Scale = (callback and math.clamp(gameCamera.ViewportSize.X / 1920, 0.5, 1) or 1) end) end, Default = true, HoverText = "Rescales the GUI" }) gameCamera:GetPropertyChangedSignal("ViewportSize"):Connect(function() if GUIRescaleToggle.Enabled then GuiLibrary.MainRescale.Scale = math.clamp(gameCamera.ViewportSize.X / 1920, 0.5, 1) end end) GUISettings.CreateToggle({ Name = "Notifications", Function = function(callback) GuiLibrary.Notifications = callback end, Default = true, HoverText = "Shows notifications" }) local ToggleNotifications ToggleNotifications = GUISettings.CreateToggle({ Name = "Toggle Alert", Function = function(callback) GuiLibrary.ToggleNotifications = callback end, Default = true, HoverText = "Notifies you if a module is enabled/disabled." }) ToggleNotifications.Object.BackgroundTransparency = 0 ToggleNotifications.Object.BorderSizePixel = 0 ToggleNotifications.Object.BackgroundColor3 = Color3.fromRGB(20, 20, 20) GUISettings.CreateSlider({ Name = "Rainbow Speed", Function = function(val) GuiLibrary.RainbowSpeed = math.max((val / 10) - 0.4, 0) end, Min = 1, Max = 100, Default = 10 }) local GUIbind = GUI.CreateGUIBind() local teleportConnection = playersService.LocalPlayer.OnTeleport:Connect(function(State) if (not teleportedServers) and (not shared.VapeIndependent) then teleportedServers = true local teleportScript = [[ shared.VapeSwitchServers = true if shared.VapeDeveloper then loadstring(readfile("vape/NewMainScript.lua"))() else loadstring(game:HttpGet("https://raw.githubusercontent.com/7GrandDadPGN/VapeV4ForRoblox/"..readfile("vape/commithash.txt").."/NewMainScript.lua", true))() end ]] if shared.VapeDeveloper then teleportScript = 'shared.VapeDeveloper = true\n'..teleportScript end if shared.VapePrivate then teleportScript = 'shared.VapePrivate = true\n'..teleportScript end if shared.VapeCustomProfile then teleportScript = "shared.VapeCustomProfile = '"..shared.VapeCustomProfile.."'\n"..teleportScript end GuiLibrary.SaveSettings() queueonteleport(teleportScript) end end) GuiLibrary.SelfDestruct = function() task.spawn(function() coroutine.close(saveSettingsLoop) end) if GuiLibrary.ColorStepped then GuiLibrary.ColorStepped:Disconnect() end if vapeInjected then GuiLibrary.SaveSettings() end vapeInjected = false inputService.OverrideMouseIconBehavior = Enum.OverrideMouseIconBehavior.None for i,v in pairs(GuiLibrary.ObjectsThatCanBeSaved) do if (v.Type == "Button" or v.Type == "OptionsButton" or v.Type == "LegitModule") and v.Api.Enabled then v.Api.ToggleButton(false) end end for i,v in pairs(TextGUIConnections) do v:Disconnect() end for i,v in pairs(TextGUIObjects) do for i2,v2 in pairs(v) do v2.Visible = false v2:Destroy() v[i2] = nil end end GuiLibrary.SelfDestructEvent:Fire() shared.VapeExecuted = nil shared.VapePrivate = nil shared.VapeFullyLoaded = nil shared.VapeSwitchServers = nil shared.GuiLibrary = nil shared.VapeIndependent = nil shared.VapeManualLoad = nil shared.CustomSaveVape = nil GuiLibrary.KeyInputHandler:Disconnect() GuiLibrary.KeyInputHandler2:Disconnect() if MiddleClickInput then MiddleClickInput:Disconnect() end teleportConnection:Disconnect() GuiLibrary.MainGui:Destroy() game:GetService("RunService"):SetRobloxGuiFocused(false) end GeneralSettings.CreateButton2({ Name = "RESET CURRENT PROFILE", Function = function() local vapePrivateCheck = shared.VapePrivate GuiLibrary.SelfDestruct() if delfile then delfile(baseDirectory.."Profiles/"..(GuiLibrary.CurrentProfile ~= "default" and GuiLibrary.CurrentProfile or "")..(shared.CustomSaveVape or game.PlaceId)..".vapeprofile.txt") else writefile(baseDirectory.."Profiles/"..(GuiLibrary.CurrentProfile ~= "default" and GuiLibrary.CurrentProfile or "")..(shared.CustomSaveVape or game.PlaceId)..".vapeprofile.txt", "") end shared.VapeSwitchServers = true shared.VapeOpenGui = true shared.VapePrivate = vapePrivateCheck loadstring(vapeGithubRequest("NewMainScript.lua"))() end }) GUISettings.CreateButton2({ Name = "RESET GUI POSITIONS", Function = function() for i,v in pairs(GuiLibrary.ObjectsThatCanBeSaved) do if (v.Type == "Window" or v.Type == "CustomWindow") then v.Object.Position = (i == "GUIWindow" and UDim2.new(0, 6, 0, 6) or UDim2.new(0, 223, 0, 6)) end end end }) GUISettings.CreateButton2({ Name = "SORT GUI", Function = function() local sorttable = {} local movedown = false local sortordertable = { GUIWindow = 1, CombatWindow = 2, BlatantWindow = 3, RenderWindow = 4, UtilityWindow = 5, WorldWindow = 6, FriendsWindow = 7, TargetsWindow = 8, ProfilesWindow = 9, ["Text GUICustomWindow"] = 10, TargetInfoCustomWindow = 11, RadarCustomWindow = 12, } local storedpos = {} local num = 6 for i,v in pairs(GuiLibrary.ObjectsThatCanBeSaved) do local obj = GuiLibrary.ObjectsThatCanBeSaved[i] if obj then if v.Type == "Window" and v.Object.Visible then local sortordernum = (sortordertable[i] or #sorttable) sorttable[sortordernum] = v.Object end end end for i2,v2 in pairs(sorttable) do if num > 1697 then movedown = true num = 6 end v2.Position = UDim2.new(0, num, 0, (movedown and (storedpos[num] and (storedpos[num] + 9) or 400) or 39)) if not storedpos[num] then storedpos[num] = v2.AbsoluteSize.Y if v2.Name == "MainWindow" then storedpos[num] = 400 end end num = num + 223 end end }) GeneralSettings.CreateButton2({ Name = "UNINJECT", Function = GuiLibrary.SelfDestruct }) local function loadVape() if not shared.VapeIndependent then loadstring(vapeGithubRequest("Universal.lua"))() if isfile("vape/CustomModules/"..game.PlaceId..".lua") then loadstring(readfile("vape/CustomModules/"..game.PlaceId..".lua"))() else if not shared.VapeDeveloper then local suc, publicrepo = pcall(function() return game:HttpGet("https://raw.githubusercontent.com/7GrandDadPGN/VapeV4ForRoblox/"..readfile("vape/commithash.txt").."/CustomModules/"..game.PlaceId..".lua") end) if suc and publicrepo and publicrepo ~= "404: Not Found" then writefile("vape/CustomModules/"..game.PlaceId..".lua", "--This watermark is used to delete the file if its cached, remove it to make the file persist after commits.\n"..publicrepo) loadstring(readfile("vape/CustomModules/"..game.PlaceId..".lua"))() end end end if shared.VapePrivate then if isfile("vapeprivate/CustomModules/"..game.PlaceId..".lua") then loadstring(readfile("vapeprivate/CustomModules/"..game.PlaceId..".lua"))() end end else repeat task.wait() until shared.VapeManualLoad end if #ProfilesTextList.ObjectList == 0 then table.insert(ProfilesTextList.ObjectList, "default") ProfilesTextList.RefreshValues(ProfilesTextList.ObjectList) end GuiLibrary.LoadSettings(shared.VapeCustomProfile) local profiles = {} for i,v in pairs(GuiLibrary.Profiles) do table.insert(profiles, i) end table.sort(profiles, function(a, b) return b == "default" and true or a:lower() < b:lower() end) ProfilesTextList.RefreshValues(profiles) GUIbind.Reload() TextGUIUpdate() GuiLibrary.UpdateUI(GUIColorSlider.Hue, GUIColorSlider.Sat, GUIColorSlider.Value, true) if not shared.VapeSwitchServers then if BlatantModeToggle.Enabled then pcall(function() local frame = GuiLibrary.CreateNotification("Blatant Enabled", "Vape is now in Blatant Mode.", 5.5, "assets/WarningNotification.png") frame.Frame.Frame.ImageColor3 = Color3.fromRGB(236, 129, 44) end) end GuiLibrary.LoadedAnimation(welcomeMessage.Enabled) else shared.VapeSwitchServers = nil end if shared.VapeOpenGui then GuiLibrary.MainGui.ScaledGui.ClickGui.Visible = true GuiLibrary.MainGui.ScaledGui.LegitGui.Visible = false game:GetService("RunService"):SetRobloxGuiFocused(GuiLibrary.MainBlur.Size ~= 0) shared.VapeOpenGui = nil end coroutine.resume(saveSettingsLoop) shared.VapeFullyLoaded = true end if shared.VapeIndependent then task.spawn(loadVape) shared.VapeFullyLoaded = true return GuiLibrary else loadVape() end