Further clean up corescripts

This commit is contained in:
Lewin Kelly 2023-04-08 22:01:38 +01:00
parent f1d815c35b
commit 3cc782a49c
28 changed files with 1964 additions and 2016 deletions

View File

@ -29,7 +29,7 @@ local enableBrowserWindowClosedEvent = true
-- gui variables
local openBuyCurrencyWindowConnection = nil
local currentlyPrompting = false
local purchaseDialog, errorDialog = nil
local purchaseDialog = nil
local tweenTime = 0.3
local showPosition = UDim2.new(0.5, -330, 0.5, -200)
local hidePosition = UDim2.new(0.5, -330, 1, 25)

View File

@ -54,20 +54,20 @@ function createContextActionGui()
end
-- functions
function setButtonSizeAndPosition(object)
local buttonSize = 55
local xOffset = 10
local yOffset = 95
-- function setButtonSizeAndPosition(object)
-- local buttonSize = 55
-- local xOffset = 10
-- local yOffset = 95
-- todo: better way to determine mobile sized screens
local onSmallScreen = (game.CoreGui.RobloxGui.AbsoluteSize.X < 600)
if not onSmallScreen then
buttonSize = 85
xOffset = 40
end
-- -- todo: better way to determine mobile sized screens
-- local onSmallScreen = (game.CoreGui.RobloxGui.AbsoluteSize.X < 600)
-- if not onSmallScreen then
-- buttonSize = 85
-- xOffset = 40
-- end
object.Size = UDim2.new(0, buttonSize, 0, buttonSize)
end
-- object.Size = UDim2.new(0, buttonSize, 0, buttonSize)
-- end
function contextButtonDown(button, inputObject, actionName)
if inputObject.UserInputType == Enum.UserInputType.Touch then
@ -248,8 +248,8 @@ contextActionService.BoundActionChanged:connect(function(actionName, changeName,
button.ActionIcon.Image = changeTable[changeName]
elseif changeName == "title" then
button.ActionTitle.Text = changeTable[changeName]
elseif changeName == "description" then
-- todo: add description to menu
-- elseif changeName == "description" then
-- -- todo: add description to menu
elseif changeName == "position" then
button.Position = changeTable[changeName]
end
@ -261,7 +261,7 @@ contextActionService.BoundActionAdded:connect(function(actionName, createTouchBu
addAction(actionName, createTouchButton, functionInfoTable)
end)
contextActionService.BoundActionRemoved:connect(function(actionName, functionInfoTable)
contextActionService.BoundActionRemoved:connect(function(actionName, _)
removeAction(actionName)
end)

View File

@ -398,7 +398,7 @@ function setupJumpButton(parentFrame)
if inputObject == cameraTouch then
return
end
for i, touch in pairs(oldJumpTouches) do
for _, touch in pairs(oldJumpTouches) do
if touch == inputObject then
return
end
@ -444,7 +444,7 @@ function isTouchUsedByJumpButton(touch)
if touch == currentJumpTouch then
return true
end
for i, touchToCompare in pairs(oldJumpTouches) do
for _, touchToCompare in pairs(oldJumpTouches) do
if touch == touchToCompare then
return true
end
@ -454,7 +454,7 @@ function isTouchUsedByJumpButton(touch)
end
function isTouchUsedByThumbstick(touch)
for i, touchToCompare in pairs(thumbstickTouches) do
for _, touchToCompare in pairs(thumbstickTouches) do
if touch == touchToCompare then
return true
end

View File

@ -472,7 +472,7 @@ function initializeDeveloperConsole()
pPos = Dev_Container.AbsolutePosition
end)
Dev_TitleBar.TextButton.MouseButton1Up:connect(function(x, y)
Dev_TitleBar.TextButton.MouseButton1Up:connect(function(_, _)
clean()
end)
@ -819,7 +819,6 @@ function initializeDeveloperConsole()
local minute = math.floor(dayTime / 60)
dayTime = dayTime - (minute * 60)
local second = dayTime
local h = numberWithZero(hour)
local m = numberWithZero(minute)
@ -830,35 +829,35 @@ function initializeDeveloperConsole()
--Filter
Dev_OptionsBar.ErrorToggleButton.MouseButton1Down:connect(function(x, y)
Dev_OptionsBar.ErrorToggleButton.MouseButton1Down:connect(function(_, _)
errorToggleOn = not errorToggleOn
Dev_OptionsBar.ErrorToggleButton.CheckFrame.Visible = errorToggleOn
refreshTextHolder()
repositionList()
end)
Dev_OptionsBar.WarningToggleButton.MouseButton1Down:connect(function(x, y)
Dev_OptionsBar.WarningToggleButton.MouseButton1Down:connect(function(_, _)
warningToggleOn = not warningToggleOn
Dev_OptionsBar.WarningToggleButton.CheckFrame.Visible = warningToggleOn
refreshTextHolder()
repositionList()
end)
Dev_OptionsBar.InfoToggleButton.MouseButton1Down:connect(function(x, y)
Dev_OptionsBar.InfoToggleButton.MouseButton1Down:connect(function(_, _)
infoToggleOn = not infoToggleOn
Dev_OptionsBar.InfoToggleButton.CheckFrame.Visible = infoToggleOn
refreshTextHolder()
repositionList()
end)
Dev_OptionsBar.OutputToggleButton.MouseButton1Down:connect(function(x, y)
Dev_OptionsBar.OutputToggleButton.MouseButton1Down:connect(function(_, _)
outputToggleOn = not outputToggleOn
Dev_OptionsBar.OutputToggleButton.CheckFrame.Visible = outputToggleOn
refreshTextHolder()
repositionList()
end)
Dev_OptionsBar.WordWrapToggleButton.MouseButton1Down:connect(function(x, y)
Dev_OptionsBar.WordWrapToggleButton.MouseButton1Down:connect(function(_, _)
wordWrapToggleOn = not wordWrapToggleOn
Dev_OptionsBar.WordWrapToggleButton.CheckFrame.Visible = wordWrapToggleOn
refreshTextHolder()
@ -891,7 +890,7 @@ function initializeDeveloperConsole()
end
--Handle Dev-Console Local/Server Buttons
Dev_Container.Body.LocalConsole.MouseButton1Click:connect(function(x, y)
Dev_Container.Body.LocalConsole.MouseButton1Click:connect(function(_, _)
if currentConsole == SERVER_CONSOLE then
currentConsole = LOCAL_CONSOLE
local localConsole = Dev_Container.Body.LocalConsole
@ -904,7 +903,6 @@ function initializeDeveloperConsole()
if game:FindFirstChild "Players" and game.Players["LocalPlayer"] then
local mouse = game.Players.LocalPlayer:GetMouse()
local mousePos = Vector2.new(mouse.X, mouse.Y)
refreshConsolePosition(mouse.X, mouse.Y)
refreshConsoleSize(mouse.X, mouse.Y)
handleScroll(mouse.X, mouse.Y)
@ -921,7 +919,7 @@ function initializeDeveloperConsole()
local serverHistoryRequested = false
Dev_Container.Body.ServerConsole.MouseButton1Click:connect(function(x, y)
Dev_Container.Body.ServerConsole.MouseButton1Click:connect(function(_, _)
if not serverHistoryRequested then
serverHistoryRequested = true
game:GetService("LogService"):RequestServerOutput()

View File

@ -44,7 +44,7 @@ end
local function CreateButtons(frame, buttons, yPos, ySize)
local buttonNum = 1
local buttonObjs = {}
for i, obj in ipairs(buttons) do
for _, obj in ipairs(buttons) do
local button = Instance.new "TextButton"
button.Name = "Button" .. buttonNum
button.Font = Enum.Font.Arial
@ -217,7 +217,6 @@ t.CreateDropDownMenu = function(items, onSelect, forRoblox)
local width = UDim.new(0, 100)
local height = UDim.new(0, 32)
local xPos = 0.055
local frame = Instance.new "Frame"
frame.Name = "DropDownMenu"
frame.BackgroundTransparency = 1
@ -315,7 +314,7 @@ t.CreateDropDownMenu = function(items, onSelect, forRoblox)
local children = droppedDownMenu:GetChildren()
if children then
for i, child in ipairs(children) do
for _, child in ipairs(children) do
if child.Name == "ChoiceButton" then
child.ZIndex = baseZIndex + 2
elseif child.Name == "ClickCaptureButton" then
@ -340,7 +339,7 @@ t.CreateDropDownMenu = function(items, onSelect, forRoblox)
end
local childNum = 1
for i, obj in ipairs(children) do
for _, obj in ipairs(children) do
if obj.Name == "ChoiceButton" then
if childNum < scrollBarPosition or childNum >= scrollBarPosition + dropDownItemCount then
obj.Visible = false
@ -378,7 +377,7 @@ t.CreateDropDownMenu = function(items, onSelect, forRoblox)
local children = droppedDownMenu:GetChildren()
local childNum = 1
if children then
for i, obj in ipairs(children) do
for _, obj in ipairs(children) do
if obj.Name == "ChoiceButton" then
if obj.Text == text then
obj.Font = Enum.Font.ArialBold
@ -490,7 +489,7 @@ t.CreateDropDownMenu = function(items, onSelect, forRoblox)
scrollbar.Parent = droppedDownMenu
end
for i, item in ipairs(items) do
for _, item in ipairs(items) do
-- needed to maintain local scope for items in event listeners below
local button = choiceButton:clone()
if forRoblox then
@ -524,7 +523,7 @@ t.CreateDropDownMenu = function(items, onSelect, forRoblox)
--This does the initial layout of the buttons
updateScroll()
frame.AncestryChanged:connect(function(child, parent)
frame.AncestryChanged:connect(function(_, parent)
if parent == nil then
areaSoak.Parent = nil
else
@ -624,7 +623,7 @@ end
local function layoutGuiObjectsHelper(frame, guiObjects, settingsTable)
local totalPixels = frame.AbsoluteSize.Y
local pixelsRemaining = frame.AbsoluteSize.Y
for i, child in ipairs(guiObjects) do
for _, child in ipairs(guiObjects) do
if child:IsA "TextLabel" or child:IsA "TextButton" then
local isLabel = child:IsA "TextLabel"
if isLabel then
@ -712,7 +711,7 @@ t.LayoutGuiObjects = function(frame, guiObjects, settingsTable)
wrapperFrame.Size = UDim2.new(1, 0, 1, 0)
wrapperFrame.Parent = frame
for i, child in ipairs(guiObjects) do
for _, child in ipairs(guiObjects) do
child.Parent = wrapperFrame
end
@ -819,7 +818,7 @@ t.CreateSlider = function(steps, width, position)
if areaSoakMouseMoveCon then
areaSoakMouseMoveCon:disconnect()
end
areaSoakMouseMoveCon = areaSoak.MouseMoved:connect(function(x, y)
areaSoakMouseMoveCon = areaSoak.MouseMoved:connect(function(x, _)
setSliderPos(x, slider, sliderPosition, bar, steps)
end)
end)
@ -828,14 +827,14 @@ t.CreateSlider = function(steps, width, position)
cancelSlide(areaSoak)
end)
sliderPosition.Changed:connect(function(prop)
sliderPosition.Changed:connect(function(_)
sliderPosition.Value = math.min(steps, math.max(1, sliderPosition.Value))
local relativePosX = (sliderPosition.Value - 1) / (steps - 1)
slider.Position =
UDim2.new(relativePosX, -slider.AbsoluteSize.X / 2, slider.Position.Y.Scale, slider.Position.Y.Offset)
end)
bar.MouseButton1Down:connect(function(x, y)
bar.MouseButton1Down:connect(function(x, _)
setSliderPos(x, slider, sliderPosition, bar, steps)
end)
@ -994,7 +993,7 @@ t.CreateTrueScrollingFrame = function()
mouseDrag.Position = UDim2.new(-0.25, 0, -0.25, 0)
mouseDrag.ZIndex = 10
local function positionScrollBar(x, y, offset)
local function positionScrollBar(_, y, offset)
local oldPos = scrollbar.Position
if y < scrollTrack.AbsolutePosition.y then
@ -1292,30 +1291,25 @@ t.CreateTrueScrollingFrame = function()
scrollUpButton.MouseButton1Down:connect(function()
scrollUp()
end)
scrollUpButton.MouseButton1Up:connect(function()
scrollStamp = tick()
end)
scrollDownButton.MouseButton1Up:connect(function()
scrollStamp = tick()
end)
scrollDownButton.MouseButton1Down:connect(function()
scrollDown()
end)
scrollbar.MouseButton1Up:connect(function()
local function scrollTick()
scrollStamp = tick()
end)
local function heightCheck(instance)
if highY and (instance.AbsolutePosition.Y + instance.AbsoluteSize.Y) > highY then
highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y
elseif not highY then
highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y
end
setSliderSizeAndPosition()
end
scrollUpButton.MouseButton1Up:connect(scrollTick)
scrollDownButton.MouseButton1Up:connect(scrollTick)
scrollbar.MouseButton1Up:connect(scrollTick)
-- local function heightCheck(instance)
-- if (highY and (instance.AbsolutePosition.Y + instance.AbsoluteSize.Y) > highY) or not highY then
-- highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y
-- end
-- setSliderSizeAndPosition()
-- end
local function highLowRecheck()
local oldLowY = lowY
local oldHighY = highY
@ -1439,7 +1433,7 @@ t.CreateScrollingFrame = function(orderList, scrollStyle)
howManyDisplayed = 0
local guiObjects = {}
if orderList then
for i, child in ipairs(orderList) do
for _, child in ipairs(orderList) do
if child.Parent == frame then
table.insert(guiObjects, child)
end
@ -1447,7 +1441,7 @@ t.CreateScrollingFrame = function(orderList, scrollStyle)
else
local children = frame:GetChildren()
if children then
for i, child in ipairs(children) do
for _, child in ipairs(children) do
if child:IsA "GuiObject" then
table.insert(guiObjects, child)
end
@ -1696,7 +1690,7 @@ t.CreateScrollingFrame = function(orderList, scrollStyle)
local guiObjects = 0
local children = frame:GetChildren()
if children then
for i, child in ipairs(children) do
for _, child in ipairs(children) do
if child:IsA "GuiObject" then
guiObjects = guiObjects + 1
end
@ -1834,13 +1828,13 @@ t.CreateScrollingFrame = function(orderList, scrollStyle)
end
local y = 0
scrollDrag.MouseButton1Down:connect(function(x, y)
scrollDrag.MouseButton1Down:connect(function(_, y)
if scrollDrag.Active then
scrollStamp = tick()
local mouseOffset = y - scrollDrag.AbsolutePosition.y
local dragCon
local upCon
dragCon = mouseDrag.MouseMoved:connect(function(x, y)
dragCon = mouseDrag.MouseMoved:connect(function(_, y)
local barAbsPos = scrollbar.AbsolutePosition.y
local barAbsSize = scrollbar.AbsoluteSize.y
@ -1853,7 +1847,7 @@ t.CreateScrollingFrame = function(orderList, scrollStyle)
local guiObjects = 0
local children = frame:GetChildren()
if children then
for i, child in ipairs(children) do
for _, child in ipairs(children) do
if child:IsA "GuiObject" then
guiObjects = guiObjects + 1
end
@ -1906,7 +1900,7 @@ t.CreateScrollingFrame = function(orderList, scrollStyle)
scrollbar.MouseButton1Up:connect(function()
scrollStamp = tick()
end)
scrollbar.MouseButton1Down:connect(function(x, y)
scrollbar.MouseButton1Down:connect(function(_, y)
if y > (scrollDrag.AbsoluteSize.y + scrollDrag.AbsolutePosition.y) then
scrollDown(y)
elseif y < scrollDrag.AbsolutePosition.y then
@ -2098,7 +2092,7 @@ local function TransitionTutorialPages(fromPage, toPage, transitionFrame, curren
transitionFrame.Visible = true
currentPageValue.Value = nil
local newsize, newPosition
local newSize, newPosition
if toPage then
--Make it visible so it resizes
toPage.Visible = true
@ -2165,7 +2159,7 @@ t.CreateTutorial = function(name, tutorialKey, createButtons)
local visiblePage = nil
local children = pages:GetChildren()
if children then
for i, child in ipairs(children) do
for _, child in ipairs(children) do
if child.Visible then
if visiblePage then
child.Visible = false
@ -2758,7 +2752,7 @@ t.CreateSetPanel = function(
return setButton
end
local function buildSetButton(name, setId, setImageId, i, count)
local function buildSetButton(name, setId, _, _, _)
local button = createSetButton(name)
button.Text = name
button.Name = "SetButton"
@ -3095,7 +3089,7 @@ t.CreateSetPanel = function(
end
end
local function selectSet(button, setName, setId, setIndex)
local function selectSet(button, setName, setId, _)
if button and Data.Category[Data.CurrentCategory] ~= nil then
if button ~= Data.Category[Data.CurrentCategory].Button then
Data.Category[Data.CurrentCategory].Button = button
@ -3112,10 +3106,10 @@ t.CreateSetPanel = function(
end
end
local function selectCategoryPage(buttons, page)
local function selectCategoryPage(buttons, _)
if buttons ~= Data.CurrentCategory then
if Data.CurrentCategory then
for key, button in pairs(Data.CurrentCategory) do
for _, button in pairs(Data.CurrentCategory) do
button.Visible = false
end
end
@ -3232,7 +3226,7 @@ t.CreateSetPanel = function(
controlFrame.Position = UDim2.new(0.76, 5, 0, 0)
local debounce = false
controlFrame.ScrollBottom.Changed:connect(function(prop)
controlFrame.ScrollBottom.Changed:connect(function(_)
if controlFrame.ScrollBottom.Value == true then
if debounce then
return
@ -3402,53 +3396,37 @@ t.CreateTerrainMaterialSelector = function(size, position)
function getNameFromEnum(choice)
if choice == Enum.CellMaterial.Grass or choice == 1 then
return "Grass"
end
if choice == Enum.CellMaterial.Sand or choice == 2 then
elseif choice == Enum.CellMaterial.Sand or choice == 2 then
return "Sand"
end
if choice == Enum.CellMaterial.Empty or choice == 0 then
elseif choice == Enum.CellMaterial.Empty or choice == 0 then
return "Erase"
end
if choice == Enum.CellMaterial.Brick or choice == 3 then
elseif choice == Enum.CellMaterial.Brick or choice == 3 then
return "Brick"
end
if choice == Enum.CellMaterial.Granite or choice == 4 then
elseif choice == Enum.CellMaterial.Granite or choice == 4 then
return "Granite"
end
if choice == Enum.CellMaterial.Asphalt or choice == 5 then
elseif choice == Enum.CellMaterial.Asphalt or choice == 5 then
return "Asphalt"
end
if choice == Enum.CellMaterial.Iron or choice == 6 then
elseif choice == Enum.CellMaterial.Iron or choice == 6 then
return "Iron"
end
if choice == Enum.CellMaterial.Aluminum or choice == 7 then
elseif choice == Enum.CellMaterial.Aluminum or choice == 7 then
return "Aluminum"
end
if choice == Enum.CellMaterial.Gold or choice == 8 then
elseif choice == Enum.CellMaterial.Gold or choice == 8 then
return "Gold"
end
if choice == Enum.CellMaterial.WoodPlank or choice == 9 then
elseif choice == Enum.CellMaterial.WoodPlank or choice == 9 then
return "Plank"
end
if choice == Enum.CellMaterial.WoodLog or choice == 10 then
elseif choice == Enum.CellMaterial.WoodLog or choice == 10 then
return "Log"
end
if choice == Enum.CellMaterial.Gravel or choice == 11 then
elseif choice == Enum.CellMaterial.Gravel or choice == 11 then
return "Gravel"
end
if choice == Enum.CellMaterial.CinderBlock or choice == 12 then
elseif choice == Enum.CellMaterial.CinderBlock or choice == 12 then
return "Cinder Block"
end
if choice == Enum.CellMaterial.MossyStone or choice == 13 then
elseif choice == Enum.CellMaterial.MossyStone or choice == 13 then
return "Stone Wall"
end
if choice == Enum.CellMaterial.Cement or choice == 14 then
elseif choice == Enum.CellMaterial.Cement or choice == 14 then
return "Concrete"
end
if choice == Enum.CellMaterial.RedPlastic or choice == 15 then
elseif choice == Enum.CellMaterial.RedPlastic or choice == 15 then
return "Plastic (red)"
end
if choice == Enum.CellMaterial.BluePlastic or choice == 16 then
elseif choice == Enum.CellMaterial.BluePlastic or choice == 16 then
return "Plastic (blue)"
end
@ -3465,7 +3443,7 @@ t.CreateTerrainMaterialSelector = function(size, position)
end
-- we so need a better way to do this
for i, v in pairs(materialNames) do
for _, v in pairs(materialNames) do
materialToImageMap[v] = {}
if v == "Grass" then
materialToImageMap[v].Regular = "http://www.roblox.com/asset/?id=56563112"

View File

@ -55,7 +55,7 @@ local function robloxLock(instance)
instance.RobloxLocked = true
children = instance:GetChildren()
if children then
for i, child in ipairs(children) do
for _, child in ipairs(children) do
robloxLock(child)
end
end
@ -93,13 +93,12 @@ function goToMenu(container, menuName, moveDirection, size, position)
end
local containerChildren = container:GetChildren()
local selectedMenu = false
for i = 1, #containerChildren do
if containerChildren[i].Name == menuName then
containerChildren[i].Visible = true
currentMenuSelection =
{ container = container, name = menuName, direction = moveDirection, lastSize = size }
selectedMenu = true
-- selectedMenu = true
if size and position then
containerChildren[i]:TweenSizeAndPosition(
size,
@ -198,7 +197,7 @@ local function CreateTextButtons(frame, buttons, yPos, ySize)
local buttonObjs = {}
local function toggleSelection(button)
for i, obj in ipairs(buttonObjs) do
for _, obj in ipairs(buttonObjs) do
if obj == button then
obj.Style = Enum.ButtonStyle.RobloxButtonDefault
else
@ -207,7 +206,7 @@ local function CreateTextButtons(frame, buttons, yPos, ySize)
end
end
for i, obj in ipairs(buttons) do
for _, obj in ipairs(buttons) do
local button = Instance.new "TextButton"
button.Name = "Button" .. buttonNum
button.Font = Enum.Font.Arial
@ -775,7 +774,7 @@ local function createGameMainMenu(baseZIndex, shield)
return gameMainMenuFrame
end
local function createGameSettingsMenu(baseZIndex, shield)
local function createGameSettingsMenu(baseZIndex, _)
local gameSettingsMenuFrame = Instance.new "Frame"
gameSettingsMenuFrame.Name = "GameSettingsMenu"
gameSettingsMenuFrame.BackgroundTransparency = 1
@ -1109,7 +1108,7 @@ local function createGameSettingsMenu(baseZIndex, shield)
graphicsSetter.Text = tostring(graphicsLevel.Value)
end)
graphicsLevel.Changed:connect(function(prop)
graphicsLevel.Changed:connect(function(_)
if isAutoGraphics then
return
end
@ -1147,7 +1146,6 @@ local function createGameSettingsMenu(baseZIndex, shield)
end
end)
local lastUpdate = nil
game.GraphicsQualityChangeRequest:connect(function(graphicsIncrease)
if isAutoGraphics then
return
@ -1314,7 +1312,7 @@ local function createGameSettingsMenu(baseZIndex, shield)
backButton.ZIndex = baseZIndex + 4
backButton.Parent = gameSettingsMenuFrame
local syncVideoCaptureSetting = nil
local syncVideoCaptureSetting
if not macClient then
local videoCaptureLabel = Instance.new "TextLabel"
@ -2282,20 +2280,20 @@ if LoadLibrary then
chatButton.MouseButton1Click:connect(activateChat)
local hotKeyEnabled = true
local toggleHotKey = function(value)
hotKeyEnabled = value
-- local hotKeyEnabled = true
local toggleHotKey = function(_)
-- hotKeyEnabled = value
end
local guiService = game:GetService "GuiService"
local newChatMode = pcall(function()
-- local guiService = game:GetService "GuiService"
--[[local newChatMode = ]]pcall(function()
--guiService:AddSpecialKey(Enum.SpecialKey.ChatHotkey)
--guiService.SpecialKeyPressed:connect(function(key) if key == Enum.SpecialKey.ChatHotkey and hotKeyEnabled then activateChat() end end)
end)
if not newChatMode then
-- if not newChatMode then
--guiService:AddKey("/")
--guiService.KeyPressed:connect(function(key) if key == "/" and hotKeyEnabled then activateChat() end end)
end
-- end
chatBox.FocusLost:connect(function(enterPressed)
if enterPressed then
@ -2318,7 +2316,7 @@ if LoadLibrary then
--Spawn a thread for the Save dialogs
local isSaveDialogSupported = pcall(function()
local var = game.LocalSaveEnabled
-- local var = game.LocalSaveEnabled
end)
if isSaveDialogSupported then
delay(0, function()
@ -2357,11 +2355,10 @@ if LoadLibrary then
end)
--Spawn a thread for Chat Bar
local coreGuiVersion = game.CoreGui.Version
local success, luaChat = pcall(function()
--[[local success, luaChat = ]]pcall(function()
return game.GuiService.UseLuaChat
end)
if success and luaChat then
-- if success and luaChat then
--[[delay(0,
function()
@ -2395,7 +2392,7 @@ if LoadLibrary then
--game.GuiService:SetGlobalSizeOffsetPixel(0,-22)
end
end)]]
end
-- end
local BurningManPlaceID = 41324860
-- TODO: remove click to walk completely if testing shows we don't need it

View File

@ -984,25 +984,25 @@ end)
-------------------------------
-- Static Functions
-------------------------------
function GetTotalEntries()
return math.min(#MiddleFrameBackgrounds, DefaultEntriesOnScreen)
end
-- function GetTotalEntries()
-- return math.min(#MiddleFrameBackgrounds, DefaultEntriesOnScreen)
-- end
function GetEntryListLength()
local numEnts = #PlayerFrames + #TeamFrames
if NeutralTeam then
numEnts = numEnts + 1
end
return numEnts
end
-- function GetEntryListLength()
-- local numEnts = #PlayerFrames + #TeamFrames
-- if NeutralTeam then
-- numEnts = numEnts + 1
-- end
-- return numEnts
-- end
function AreAllEntriesOnScreen()
return #MiddleFrameBackgrounds * MiddleTemplate.Size.Y.Scale <= 1 + DefaultBottomClipPos
end
function GetLengthOfVisbleScroll()
return 1 + DefaultBottomClipPos
end
-- function GetLengthOfVisbleScroll()
-- return 1 + DefaultBottomClipPos
-- end
function GetMaxScroll()
return DefaultBottomClipPos * -1
@ -1093,19 +1093,19 @@ end
rank Integer rank value for player
@Return Normalized integer value for rank?
--]]
function GetPrivilegeType(rank)
if rank <= PrivilegeLevel["Banned"] then
return PrivilegeLevel["Banned"]
elseif rank <= PrivilegeLevel["Visitor"] then
return PrivilegeLevel["Visitor"]
elseif rank <= PrivilegeLevel["Member"] then
return PrivilegeLevel["Member"]
elseif rank <= PrivilegeLevel["Admin"] then
return PrivilegeLevel["Admin"]
else
return PrivilegeLevel["Owner"]
end
end
-- function GetPrivilegeType(rank)
-- if rank <= PrivilegeLevel["Banned"] then
-- return PrivilegeLevel["Banned"]
-- elseif rank <= PrivilegeLevel["Visitor"] then
-- return PrivilegeLevel["Visitor"]
-- elseif rank <= PrivilegeLevel["Member"] then
-- return PrivilegeLevel["Member"]
-- elseif rank <= PrivilegeLevel["Admin"] then
-- return PrivilegeLevel["Admin"]
-- else
-- return PrivilegeLevel["Owner"]
-- end
-- end
--[[
gives a player a new privilage rank
@ -1220,7 +1220,7 @@ function InitReportAbuse()
end
end
AbuseDropDown, UpdateAbuseSelection = RbxGui.CreateDropDownMenu(Abuses, UpdateAbuseFunction, true)
AbuseDropDown, _ = RbxGui.CreateDropDownMenu(Abuses, UpdateAbuseFunction, true)
AbuseDropDown.Name = "AbuseComboBox"
AbuseDropDown.Position = UDim2.new(0.425, 0, 0, 142)
AbuseDropDown.Size = UDim2.new(0.55, 0, 0, 32)
@ -1333,7 +1333,7 @@ end
playerEntry Entry of player who had a stat change
property Name of stat changed
--]]
function StatChanged(playerEntry, property)
function StatChanged(_, _) --playerEntry, property)
-- if(playerEntry['MyTeam']) then
-- UpdateSingleTeam(playerEntry['MyTeam'])
-- else
@ -1808,25 +1808,17 @@ function UpdateMaximize()
end
end
for i, entry in ipairs(TeamFrames) do
for _, entry in ipairs(TeamFrames) do
WaitForChild(entry["Frame"], "TitleFrame").Size =
UDim2.new(0, BaseScreenXSize * 0.9, entry["Frame"].TitleFrame.Size.Y.Scale, 0)
end
for i, entry in ipairs(PlayerFrames) do
for _, entry in ipairs(PlayerFrames) do
WaitForChild(entry["Frame"], "TitleFrame").Size =
UDim2.new(0, BaseScreenXSize * 0.9, entry["Frame"].TitleFrame.Size.Y.Scale, 0)
end
end
end
function UpdateStatNames()
if not AreNamesExpanded.Value or IsMinimized.Value then
CloseNames()
else
ExpandNames()
end
end
function ExpandNames()
if #ScoreNames ~= 0 then
for _, i in pairs(StatTitles:GetChildren()) do
@ -1884,6 +1876,14 @@ function CloseNames()
end
end
function UpdateStatNames()
if not AreNamesExpanded.Value or IsMinimized.Value then
CloseNames()
else
ExpandNames()
end
end
function OnScrollWheelMove(direction)
if not (IsTabified.Value or IsMinimized.Value or InPopupWaitForClick) then
local StartFrame = ListFrame.Position
@ -1980,12 +1980,11 @@ end
Manages scrolling of the playerlist on mouse drag
--]]
function StartDrag(entry, startx, starty)
local startDragTime = tick()
local stopDrag = false
local openPanel = true
local draggedFrame = WaitForChild(entry["Frame"], "ClickListener")
--[[local draggedFrame = ]]
WaitForChild(entry["Frame"], "ClickListener")
local function dragExit()
stopDrag = true
-- stopDrag = true
if
entry["Player"]
@ -2021,7 +2020,6 @@ function StartMinimizeDrag()
Delay(0, function()
local startTime = tick()
debugprint "Got Click2"
local stopDrag = false
local function dragExit()
--debugprint('undone click2')
if tick() - startTime < 0.25 then --was click
@ -2032,7 +2030,7 @@ function StartMinimizeDrag()
ToggleMinimize()
end
end
stopDrag = true
-- stopDrag = true
end
local startY = nil
local StartFrame = DefaultBottomClipPos
@ -2225,7 +2223,7 @@ end
oldLeaderstats leaderstats object to be removed
playerEntry A reference to the ENTRY(table) of the player
--]]
function LeaderstatsRemoved(oldLeaderstats, playerEntry)
function LeaderstatsRemoved(_, playerEntry)
while AddingFrameLock do
debugprint("waiting to insert " .. playerEntry["Player"].Name)
wait(1 / 30)
@ -2449,8 +2447,8 @@ function InsertPlayerFrame(nplayer)
dropShadow.Position = nFrame.TitleFrame.Title.Position + UDim2.new(0, 1, 0, 1)
dropShadow.Name = "DropShadow"
dropShadow.Parent = nFrame.TitleFrame
else
--Delay(2, function () OnFriendshipChanged(nplayer,LocalPlayer:GetFriendStatus(nplayer)) end)
-- else
-- --Delay(2, function () OnFriendshipChanged(nplayer,LocalPlayer:GetFriendStatus(nplayer)) end)
end
nFrame.TitleFrame.Title.Font = "ArialBold"
@ -3030,8 +3028,8 @@ function RemoveTeamFrame(nteam)
wait(1 / 30)
end
AddingFrameLock = true
if IsMinimized.Value then
end
-- if IsMinimized.Value then
-- end
local myEntry
for i, key in ipairs(TeamFrames) do
if nteam == key["MyTeam"] then

View File

@ -153,20 +153,6 @@ function showTwoButtons()
end
end
function onTeleport(teleportState, _, _)
if game:GetService("TeleportService").CustomizedTeleportUI == false then
if teleportState == Enum.TeleportState.Started then
showTeleportUI("Teleport started...", 0)
elseif teleportState == Enum.TeleportState.WaitingForServer then
showTeleportUI("Requesting server...", 0)
elseif teleportState == Enum.TeleportState.InProgress then
showTeleportUI("Teleporting...", 0)
elseif teleportState == Enum.TeleportState.Failed then
showTeleportUI("Teleport failed. Insufficient privileges or target place does not exist.", 3)
end
end
end
function showTeleportUI(message, timer)
if teleportUI ~= nil then
teleportUI:Remove()
@ -181,6 +167,20 @@ function showTeleportUI(message, timer)
end
end
function onTeleport(teleportState, _, _)
if game:GetService("TeleportService").CustomizedTeleportUI == false then
if teleportState == Enum.TeleportState.Started then
showTeleportUI("Teleport started...", 0)
elseif teleportState == Enum.TeleportState.WaitingForServer then
showTeleportUI("Requesting server...", 0)
elseif teleportState == Enum.TeleportState.InProgress then
showTeleportUI("Teleporting...", 0)
elseif teleportState == Enum.TeleportState.Failed then
showTeleportUI("Teleport failed. Insufficient privileges or target place does not exist.", 3)
end
end
end
if teleportEnabled then
localPlayer.OnTeleport:connect(onTeleport)

View File

@ -183,8 +183,8 @@ function removeGear(gear)
gearSlots[emptySlot] = "empty"
local centerizeX = gear.Size.X.Scale / 2
local centerizeY = gear.Size.Y.Scale / 2
-- local centerizeX = gear.Size.X.Scale / 2
-- local centerizeY = gear.Size.Y.Scale / 2
--[[gear:TweenSizeAndPosition(UDim2.new(0,0,0,0),
UDim2.new(gear.Position.X.Scale + centerizeX,gear.Position.X.Offset,gear.Position.Y.Scale + centerizeY,gear.Position.Y.Offset),
Enum.EasingDirection.Out, Enum.EasingStyle.Quad,guiTweenSpeed/4,true)]]

View File

@ -98,9 +98,7 @@ function JsonWriter:Write(o)
local t = type(o)
if t == "nil" then
self:WriteNil()
elseif t == "boolean" then
self:WriteString(o)
elseif t == "number" then
elseif t == "boolean" or t == "number" then
self:WriteString(o)
elseif t == "string" then
self:ParseString(o)
@ -108,9 +106,7 @@ function JsonWriter:Write(o)
self:WriteTable(o)
elseif t == "function" then
self:WriteFunction(o)
elseif t == "thread" then
self:WriteError(o)
elseif t == "userdata" then
elseif t == "thread" or t == "userdata" then
self:WriteError(o)
end
end
@ -145,7 +141,7 @@ function JsonWriter:IsArray(t)
end
return false
end
for k, v in pairs(t) do
for k, _ in pairs(t) do
if not isindex(k) then
return false, "{", "}"
else
@ -286,7 +282,7 @@ function JsonReader:ReadNull()
end
function JsonReader:TestReservedWord(t)
for i, v in ipairs(t) do
for _, v in ipairs(t) do
if self:Next() ~= v then
error(string.format("Error reading '%s': %s", table.concat(t), self:All()))
end
@ -483,7 +479,7 @@ end
--makes a wedge at location x, y, z
--sets cell x, y, z to default material if parameter is provided, if not sets cell x, y, z to be whatever material it previously w
--returns true if made a wedge, false if the cell remains a block
t.MakeWedge = function(x, y, z, defaultmaterial)
t.MakeWedge = function(x, y, z, _)
return game:GetService("Terrain"):AutoWedgeCell(x, y, z)
end

View File

@ -1,10 +1,10 @@
local t = {}
function waitForChild(instance, name)
while not instance:FindFirstChild(name) do
instance.ChildAdded:wait()
end
end
-- function waitForChild(instance, name)
-- while not instance:FindFirstChild(name) do
-- instance.ChildAdded:wait()
-- end
-- end
-- Do a line/plane intersection. The line starts at the camera. The plane is at y == 0, normal(0, 1, 0)
--

View File

@ -204,9 +204,9 @@ function addToGrid(child)
end
end)
local ancestryCon = nil
ancestryCon = child.AncestryChanged:connect(function(theChild, theParent)
ancestryCon = child.AncestryChanged:connect(function(_, _)
local thisObject = nil
for k, v in pairs(backpackItems) do
for _, v in pairs(backpackItems) do
if v == child then
thisObject = v
break
@ -223,7 +223,7 @@ function addToGrid(child)
changeCon:disconnect()
end
for k, v in pairs(backpackItems) do
for _, v in pairs(backpackItems) do
if v == thisObject then
if mouseEnterCons[buttons[v]] then
mouseEnterCons[buttons[v]]:disconnect()

View File

@ -24,7 +24,6 @@ end
-- make sure everything is loaded in before we do anything
-- get our local player
waitForProperty(game.Players, "LocalPlayer")
local player = game.Players.LocalPlayer
------------------------ Locals ------------------------------
local backpack = script.Parent
@ -39,9 +38,11 @@ local closeButton = backpack.Tabs.CloseButton
waitForChild(backpack.Tabs, "InventoryButton")
local inventoryButton = backpack.Tabs.InventoryButton
local wardrobeButton
if game.CoreGui.Version >= 8 then
waitForChild(backpack.Tabs, "WardrobeButton")
local wardrobeButton = backpack.Tabs.WardrobeButton
wardrobeButton = backpack.Tabs.WardrobeButton
end
waitForChild(backpack.Parent, "ControlFrame")
local backpackButton = waitForChild(backpack.Parent.ControlFrame, "BackpackButton")
@ -65,8 +66,6 @@ local disabledByDeveloper = false
local humanoidDiedCon = nil
local backpackButtonPos
local guiTweenSpeed = 0.25 -- how quickly we open/close the backpack
local searchDefaultText = "Search..."
@ -123,15 +122,6 @@ function deactivateBackpack()
active = false
end
function activateBackpack()
initHumanoidDiedConnections()
active = true
backpack.Visible = backpackIsOpen
if backpackIsOpen then
toggleBackpack()
end
end
function initHumanoidDiedConnections()
if humanoidDiedCon then
humanoidDiedCon:disconnect()
@ -141,6 +131,15 @@ function initHumanoidDiedConnections()
humanoidDiedCon = game.Players.LocalPlayer.Character.Humanoid.Died:connect(deactivateBackpack)
end
function activateBackpack()
initHumanoidDiedConnections()
active = true
backpack.Visible = backpackIsOpen
if backpackIsOpen then
toggleBackpack()
end
end
local hideBackpack = function()
backpackIsOpen = false
readyForNextEvent = false

View File

@ -54,7 +54,6 @@ local Camera = Game.Workspace.CurrentCamera
-- Services
local CoreGuiService = Game:GetService "CoreGui"
local PlayersService = Game:GetService "Players"
local DebrisService = Game:GetService "Debris"
local GuiService = Game:GetService "GuiService"
-- Lua Enums
@ -900,7 +899,6 @@ function Chat:EnableScrolling(toggle)
self.RenderFrame.MouseEnter:connect(function()
local character = Player.Character
local torso = WaitForChild(character, "Torso")
local humanoid = WaitForChild(character, "Humanoid")
local head = WaitForChild(character, "Head")
if toggle then
self.MouseOnFrame = true
@ -1111,13 +1109,13 @@ function Chat:RecalculateSpacing()
end ]]
end
function Chat:ApplyFilter(str)
--[[for _, word in pair(self.Filter_List) do
if string.find(str, word) then
str:gsub(word, '@#$^')
end
end ]]
end
-- function Chat:ApplyFilter(str)
-- --[[for _, word in pair(self.Filter_List) do
-- if string.find(str, word) then
-- str:gsub(word, '@#$^')
-- end
-- end ]]
-- end
-- NOTE: Temporarily disabled ring buffer to allow for chat to always wrap around
function Chat:CreateMessage(cPlayer, message)
@ -1173,7 +1171,7 @@ function Chat:CreateMessage(cPlayer, message)
pLabel = Gui.Create "TextLabel" {
Name = pName,
Text = pName .. ":",
TextColor3 = pColor,
-- TextColor3 = pColor,
FontSize = Chat.Configuration.FontSize,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top,
@ -1188,7 +1186,6 @@ function Chat:CreateMessage(cPlayer, message)
TextStrokeTransparency = 0.75,
--Active = false;
}
local pColor
if cPlayer.Neutral then
pLabel.TextColor3 = Chat:ComputeChatColor(pName)
else
@ -1245,9 +1242,6 @@ function Chat:CreateMessage(cPlayer, message)
mLabel.Size = UDim2.new(1, 0, heightField / self.RenderFrame.AbsoluteSize.Y, 0)
pLabel.Size = mLabel.Size
local yPixels = self.RenderFrame.AbsoluteSize.Y
local yFieldSize = mLabel.TextBounds.Y
local queueField = {}
queueField["Player"] = pLabel
queueField["Message"] = mLabel
@ -1322,8 +1316,8 @@ function Chat:CreateSafeChatOptions(list, rootButton)
if type(list[msg]) == "table" then
text_List[rootButton][chatText] = Chat:CreateSafeChatOptions(list[msg], chatText)
else
--table.insert(text_List[chatText], true)
-- else
-- --table.insert(text_List[chatText], true)
end
chatText.MouseEnter:connect(function()
Chat:ToggleSafeChatMenu(chatText)
@ -1335,11 +1329,11 @@ function Chat:CreateSafeChatOptions(list, rootButton)
chatText.MouseButton1Click:connect(function()
local lList = Chat:FindButtonTree(chatText)
if lList then
for i, v in pairs(lList) do
end
else
end
-- if lList then
-- for i, v in pairs(lList) do
-- end
-- else
-- end
pcall(function()
PlayersService:Chat(lList[1])
end)
@ -1471,7 +1465,6 @@ function Chat:CreateChatBar()
TextColor3 = Color3.new(1, 1, 1),
FontSize = Enum.FontSize.Size12,
ClearTextOnFocus = false,
Text = "",
}
-- Engine has code to offset the entire world, so if we do it by -20 pixels nothing gets in our chat's way
@ -1672,7 +1665,7 @@ end
-- Just a wrapper around our PlayerChatted event
function Chat:PlayerChatted(...)
local args = { ... }
local argCount = select("#", ...)
-- local argCount = select("#", ...)
local player
local message
-- This doesn't look very good, but what else to do?
@ -1689,14 +1682,13 @@ function Chat:PlayerChatted(...)
if PlayersService.ClassicChat then
if string.sub(message, 1, 3) == "/e " or string.sub(message, 1, 7) == "/emote " then
-- don't do anything right now
elseif forceChatGUI or Player.ChatMode == Enum.ChatMode.TextAndMenu then
-- print(1)
elseif
(forceChatGUI or Player.ChatMode == Enum.ChatMode.TextAndMenu)
or (Player.ChatMode == Enum.ChatMode.Menu and string.sub(message, 1, 3) == "/sc")
or (Chat:FindMessageInSafeChat(message, self.SafeChat_List))
then
Chat:UpdateChat(player, message)
elseif Player.ChatMode == Enum.ChatMode.Menu and string.sub(message, 1, 3) == "/sc" then
Chat:UpdateChat(player, message)
else
if Chat:FindMessageInSafeChat(message, self.SafeChat_List) then
Chat:UpdateChat(player, message)
end
end
end
end

View File

@ -5510,6 +5510,10 @@ globals:
args:
- type: number
- type: function
Delay:
args:
- type: number
- type: function
dofile:
removed: true
elapsedTime:
@ -6896,6 +6900,17 @@ structs:
deprecated:
message: this property is deprecated.
replace: []
SaveToRoblox:
method: true
args:
- required: false
type: any
FinishShutdown:
method: true
args:
- required: false
type: any
GetService:
args:
- type:
@ -7002,6 +7017,7 @@ structs:
- PackageUIService
- PathfindingService
- PermissionsService
- PersonalServerService
- PhysicsService
- PlayerEmulatorService
- Players
@ -7055,6 +7071,7 @@ structs:
- TeleportService
- TemporaryCageMeshProvider
- TemporaryScriptService
- Terrain
- TestService
- TextBoxService
- TextChatService

View File

@ -1,59 +1,59 @@
while not Game do wait(0.1)end while not game:GetService'MarketplaceService'do
wait(0.1)end while not game:FindFirstChild'CoreGui'do wait(0.1)end while not
game.CoreGui:FindFirstChild'RobloxGui'do wait(0.1)end local a,b,c,d,e,f,g,h,i,j,
k,l,m,n,o,p,q=nil,game:GetService'ContentProvider'.BaseUrl:lower(),nil,nil,nil,
nil,nil,nil,nil,false,nil,false,true,nil,false,nil local r,s,t,u,v,w,x,y,z=0.3,
UDim2.new(0.5,-330,0.5,-200),UDim2.new(0.5,-330,1,25),nil,false,nil,450,{},
'http://www.roblox.com/Asset/?id='local A=z..'42557901'table.insert(y,A)local B=
z..'104651457'table.insert(y,B)local C=z..'104651515'table.insert(y,C)local D=z
..'104651532'table.insert(y,D)local E=z..'104651592'table.insert(y,E)local F=z..
'104651639'table.insert(y,F)local G=z..'104651665'table.insert(y,G)local H=z..
'104651707'table.insert(y,H)local I=z..'104651733'table.insert(y,I)local J=z..
'104651761'table.insert(y,J)local K=z..'102481431'table.insert(y,K)local L=z..
'102481419'table.insert(y,L)local M,N,O,P,Q,R,S,T,U,V='Buy','Take',
k,l,m,n,o,p,q,r,s,t,u,v,w,x,y=nil,game:GetService'ContentProvider'.BaseUrl:
lower(),nil,nil,nil,nil,nil,nil,nil,false,nil,false,true,nil,false,nil,0.3,UDim2
.new(0.5,-330,0.5,-200),UDim2.new(0.5,-330,1,25),nil,false,nil,450,{},
'http://www.roblox.com/Asset/?id='local z=y..'42557901'table.insert(x,z)local A=
y..'104651457'table.insert(x,A)local B=y..'104651515'table.insert(x,B)local C=y
..'104651532'table.insert(x,C)local D=y..'104651592'table.insert(x,D)local E=y..
'104651639'table.insert(x,E)local F=y..'104651665'table.insert(x,F)local G=y..
'104651707'table.insert(x,G)local H=y..'104651733'table.insert(x,H)local I=y..
'104651761'table.insert(x,I)local J=y..'102481431'table.insert(x,J)local K=y..
'102481419'table.insert(x,K)local L,M,N,O,P,Q,R,S,T,U='Buy','Take',
'An Error Occurred','in-game purchases are disabled',
'Roblox is performing maintenance','Your purchase of itemName succeeded!',
[[Your purchase of itemName failed because errorReason. Your account has not been charged. Please try again soon.]]
,[[Would you like to buy 'itemName' for currencyType currencyAmount?]],
"Would you like to take the assetType 'itemName' for FREE?",
[[Your balance of Robux or Tix will not be affected by this transaction.]]
function getSecureApiBaseUrl()local W=b W=string.gsub(W,'http','https')W=string.
gsub(W,'www','api')return W end function getRbxUtility()if not a then a=
LoadLibrary'RbxUtility'end return a end function preloadAssets()for W=1,#y do
game:GetService'ContentProvider':Preload(y[W])end end function
function getSecureApiBaseUrl()local V=b V=string.gsub(V,'http','https')V=string.
gsub(V,'www','api')return V end function getRbxUtility()if not a then a=
LoadLibrary'RbxUtility'end return a end function preloadAssets()for V=1,#x do
game:GetService'ContentProvider':Preload(x[V])end end function
removeCurrentPurchaseInfo()d=nil e=nil f=nil g=nil h=nil c=nil i=nil j=false end
function closePurchasePrompt()p:TweenPosition(t,Enum.EasingDirection.Out,Enum.
EasingStyle.Quad,r,true,function()game.GuiService:RemoveCenterDialog(p)
function closePurchasePrompt()p:TweenPosition(s,Enum.EasingDirection.Out,Enum.
EasingStyle.Quad,q,true,function()game.GuiService:RemoveCenterDialog(p)
hidePurchasing()p.Visible=false o=false end)end function
userPurchaseActionsEnded(W)j=false if W then local X=string.gsub(R,'itemName',
tostring(c['Name']))p.BodyFrame.ItemPreview.ItemDescription.Text=X
userPurchaseActionsEnded(V)j=false if V then local W=string.gsub(Q,'itemName',
tostring(c['Name']))p.BodyFrame.ItemPreview.ItemDescription.Text=W
setButtonsVisible(p.BodyFrame.OkPurchasedButton)hidePurchasing()else
signalPromptEnded(W)end end function signalPromptEnded(W)closePurchasePrompt()if
signalPromptEnded(V)end end function signalPromptEnded(V)closePurchasePrompt()if
l then game:GetService'MarketplaceService':SignalPromptProductPurchaseFinished(
game.Players.LocalPlayer.userId,h,W)else game:GetService'MarketplaceService':
SignalPromptPurchaseFinished(game.Players.LocalPlayer,d,W)end
removeCurrentPurchaseInfo()end function updatePurchasePromptData(W)local X=''if
not h then h=c['ProductId']end if isFreeItem()then X=string.gsub(U,'itemName',
tostring(c['Name']))X=string.gsub(X,'assetType',tostring(assetTypeToString(c[
'AssetTypeId'])))setHeaderText(N)else X=string.gsub(T,'itemName',tostring(c[
'Name']))X=string.gsub(X,'currencyType',tostring(currencyTypeToString(e)))X=
string.gsub(X,'currencyAmount',tostring(f))setHeaderText(M)end p.BodyFrame.
ItemPreview.ItemDescription.Text=X if l then p.BodyFrame.ItemPreview.Image=b..
game.Players.LocalPlayer.userId,h,V)else game:GetService'MarketplaceService':
SignalPromptPurchaseFinished(game.Players.LocalPlayer,d,V)end
removeCurrentPurchaseInfo()end function updatePurchasePromptData(V)local W=''if
not h then h=c['ProductId']end if isFreeItem()then W=string.gsub(T,'itemName',
tostring(c['Name']))W=string.gsub(W,'assetType',tostring(assetTypeToString(c[
'AssetTypeId'])))setHeaderText(M)else W=string.gsub(S,'itemName',tostring(c[
'Name']))W=string.gsub(W,'currencyType',tostring(currencyTypeToString(e)))W=
string.gsub(W,'currencyAmount',tostring(f))setHeaderText(L)end p.BodyFrame.
ItemPreview.ItemDescription.Text=W if l then p.BodyFrame.ItemPreview.Image=b..
'thumbs/asset.ashx?assetid='..tostring(c['IconImageAssetId'])..
'&x=100&y=100&format=png'else p.BodyFrame.ItemPreview.Image=b..
'thumbs/asset.ashx?assetid='..tostring(d)..'&x=100&y=100&format=png'end end
function doPlayerFundsCheck(W)if j then canPurchase,insufficientFunds=
canPurchaseItem()if canPurchase and insufficientFunds then local X=1000 while(X>
0 or W)and insufficientFunds and j and canPurchase do wait(0.1)canPurchase,
insufficientFunds=canPurchaseItem()X=X-1 end end if canPurchase and not
function doPlayerFundsCheck(V)if j then canPurchase,insufficientFunds=
canPurchaseItem()if canPurchase and insufficientFunds then local W=1000 while(W>
0 or V)and insufficientFunds and j and canPurchase do wait(0.1)canPurchase,
insufficientFunds=canPurchaseItem()W=W-1 end end if canPurchase and not
insufficientFunds then setButtonsVisible(p.BodyFrame.BuyButton,p.BodyFrame.
CancelButton,p.BodyFrame.AfterBalanceButton)end end end function
showPurchasePrompt()local W,X,Y,Z,_=canPurchaseItem()if W then
updatePurchasePromptData()if Z and _ then p.BodyFrame.ItemPreview.
ItemDescription.Text=_ p.BodyFrame.AfterBalanceButton.Visible=false end game.
showPurchasePrompt()local V,W,X,Y,Z=canPurchaseItem()if V then
updatePurchasePromptData()if Y and Z then p.BodyFrame.ItemPreview.
ItemDescription.Text=Z p.BodyFrame.AfterBalanceButton.Visible=false end game.
GuiService:AddCenterDialog(p,Enum.CenterDialogType.ModalDialog,function()p.
Visible=true if isFreeItem()then setButtonsVisible(p.BodyFrame.FreeButton,p.
BodyFrame.CancelButton,p.BodyFrame.AfterBalanceButton)elseif Y then p.BodyFrame.
BodyFrame.CancelButton,p.BodyFrame.AfterBalanceButton)elseif X then p.BodyFrame.
AfterBalanceButton.Text=
[[You require an upgrade to your Builders Club membership to purchase this item. Click here to upgrade.]]
if not k then k=p.BodyFrame.AfterBalanceButton.MouseButton1Click:connect(
@ -61,43 +61,43 @@ function()if p.BodyFrame.AfterBalanceButton.Text==
[[You require an upgrade to your Builders Club membership to purchase this item. Click here to upgrade.]]
then openBCUpSellWindow()end end)end setButtonsVisible(p.BodyFrame.
BuyDisabledButton,p.BodyFrame.CancelButton,p.BodyFrame.AfterBalanceButton)elseif
X then setButtonsVisible(p.BodyFrame.BuyDisabledButton,p.BodyFrame.CancelButton,
p.BodyFrame.AfterBalanceButton)elseif Z then setButtonsVisible(p.BodyFrame.
W then setButtonsVisible(p.BodyFrame.BuyDisabledButton,p.BodyFrame.CancelButton,
p.BodyFrame.AfterBalanceButton)elseif Y then setButtonsVisible(p.BodyFrame.
BuyDisabledButton,p.BodyFrame.CancelButton)else setButtonsVisible(p.BodyFrame.
BuyButton,p.BodyFrame.CancelButton)end p:TweenPosition(s,Enum.EasingDirection.
Out,Enum.EasingStyle.Quad,r,true)if W and X and not m then j=true
BuyButton,p.BodyFrame.CancelButton)end p:TweenPosition(r,Enum.EasingDirection.
Out,Enum.EasingStyle.Quad,q,true)if V and W and not m then j=true
doPlayerFundsCheck(true)end end,function()p.Visible=false end)else
doDeclinePurchase()end end function getToolAssetID(W)local X=game:GetService
'InsertService':LoadAsset(W)if not X then return nil end if X:IsA'Tool'then
return X end local Y=X:GetChildren()for Z=1,#Y do if Y[Z]:IsA'Tool'then return Y
[Z]end end return nil end function purchaseFailed(W)local X='Item'if c then X=c[
'Name']end local Y=string.gsub(S,'itemName',tostring(X))if W then Y=string.gsub(
Y,'errorReason',tostring(P))else Y=string.gsub(Y,'errorReason',tostring(Q))end p
.BodyFrame.ItemPreview.ItemDescription.Text=Y p.BodyFrame.ItemPreview.Image=A
setButtonsVisible(p.BodyFrame.OkButton)setHeaderText(O)hidePurchasing()end
function doAcceptPurchase(W)showPurchasing()local X,Y,Z=tick(),'none',nil if l
then Z=getSecureApiBaseUrl()..'marketplace/submitpurchase?productId='..tostring(
doDeclinePurchase()end end function getToolAssetID(V)local W=game:GetService
'InsertService':LoadAsset(V)if not W then return nil end if W:IsA'Tool'then
return W end local X=W:GetChildren()for Y=1,#X do if X[Y]:IsA'Tool'then return X
[Y]end end return nil end function purchaseFailed(V)local W='Item'if c then W=c[
'Name']end local X=string.gsub(R,'itemName',tostring(W))if V then X=string.gsub(
X,'errorReason',tostring(O))else X=string.gsub(X,'errorReason',tostring(P))end p
.BodyFrame.ItemPreview.ItemDescription.Text=X p.BodyFrame.ItemPreview.Image=z
setButtonsVisible(p.BodyFrame.OkButton)setHeaderText(N)hidePurchasing()end
function doAcceptPurchase(V)showPurchasing()local W,X,Y=tick(),'none',nil if l
then Y=getSecureApiBaseUrl()..'marketplace/submitpurchase?productId='..tostring(
h)..'&currencyTypeId='..tostring(currencyEnumToInt(e))..'&expectedUnitPrice='..
tostring(f)..'&placeId='..tostring(Game.PlaceId)else Z=getSecureApiBaseUrl()..
tostring(f)..'&placeId='..tostring(Game.PlaceId)else Y=getSecureApiBaseUrl()..
'marketplace/purchase?productId='..tostring(h)..'&currencyTypeId='..tostring(
currencyEnumToInt(e))..'&purchasePrice='..tostring(f)..'&locationType=Game'..
'&locationId='..Game.PlaceId end local _,aa=ypcall(function()Y=game:
HttpPostAsync(Z,'RobloxPurchaseRequest')end)print(
'doAcceptPurchase success from ypcall is ',_,'reason is',aa)if(tick()-X)<1 then
wait(1)end if Y=='none'or Y==nil or Y==''then print(
'&locationId='..Game.PlaceId end local Z,_=ypcall(function()X=game:
HttpPostAsync(Y,'RobloxPurchaseRequest')end)print(
'doAcceptPurchase success from ypcall is ',Z,'reason is',_)if(tick()-W)<1 then
wait(1)end if X=='none'or X==nil or X==''then print(
'did not get a proper response from web on purchase of',d,h)purchaseFailed()
return end Y=getRbxUtility().DecodeJSON(Y)if Y then if Y['success']==false then
if Y['status']~='AlreadyOwned'then print(
'web return response of fail on purchase of',d,h)purchaseFailed((Y['status']==
return end X=getRbxUtility().DecodeJSON(X)if X then if X['success']==false then
if X['status']~='AlreadyOwned'then print(
'web return response of fail on purchase of',d,h)purchaseFailed((X['status']==
'EconomyDisabled'))return end end else print(
'web return response of non parsable JSON on purchase of',d)purchaseFailed()
return end if g and _ and d and tonumber(c['AssetTypeId'])==19 then local ab=
getToolAssetID(tonumber(d))if ab then ab.Parent=game.Players.LocalPlayer.
Backpack end end if l then if not Y['receipt']then print(
return end if g and Z and d and tonumber(c['AssetTypeId'])==19 then local aa=
getToolAssetID(tonumber(d))if aa then aa.Parent=game.Players.LocalPlayer.
Backpack end end if l then if not X['receipt']then print(
[[tried to buy productId, but no receipt returned. productId was]],h)
purchaseFailed()return end Game:GetService'MarketplaceService':
SignalClientPurchaseSuccess(tostring(Y['receipt']),game.Players.LocalPlayer.
userId,h)else userPurchaseActionsEnded(_)end end function doDeclinePurchase()
SignalClientPurchaseSuccess(tostring(X['receipt']),game.Players.LocalPlayer.
userId,h)else userPurchaseActionsEnded(Z)end end function doDeclinePurchase()
userPurchaseActionsEnded(false)end function currencyEnumToInt(aa)if aa==Enum.
CurrencyType.Robux or aa==Enum.CurrencyType.Default then return 1 elseif aa==
Enum.CurrencyType.Tix then return 2 end end function assetTypeToString(aa)if aa
@ -116,23 +116,23 @@ return'Left Arm'elseif aa==30 then return'Left Leg'elseif aa==31 then return
'YouTube Video'elseif aa==34 then return'Game Pass'elseif aa==0 then return
'Product'end return''end function currencyTypeToString(aa)if aa==Enum.
CurrencyType.Tix then return'Tix'else return'R$'end end function
setCurrencyAmountAndType(aa,ab)if e==Enum.CurrencyType.Default or e==Enum.
setCurrencyAmountAndType(aa,V)if e==Enum.CurrencyType.Default or e==Enum.
CurrencyType.Robux then if aa~=nil and aa~=0 then f=aa e=Enum.CurrencyType.Robux
else f=ab e=Enum.CurrencyType.Tix end elseif e==Enum.CurrencyType.Tix then if ab
~=nil and ab~=0 then f=ab e=Enum.CurrencyType.Tix else f=aa e=Enum.CurrencyType.
else f=V e=Enum.CurrencyType.Tix end elseif e==Enum.CurrencyType.Tix then if V~=
nil and V~=0 then f=V e=Enum.CurrencyType.Tix else f=aa e=Enum.CurrencyType.
Robux end else return false end if f==nil then return false end return true end
function getPlayerBalance()local aa=nil local ab,W=ypcall(function()aa=game:
HttpGetAsync(getSecureApiBaseUrl()..'currency/balance')end)if not ab then print(
function getPlayerBalance()local aa=nil local V,W=ypcall(function()aa=game:
HttpGetAsync(getSecureApiBaseUrl()..'currency/balance')end)if not V then print(
'Get player balance failed because',W)return nil end if aa==''then return nil
end aa=getRbxUtility().DecodeJSON(aa)return aa end function
openBuyCurrencyWindow()j=true game:GetService'GuiService':OpenBrowserWindow(b..
'Upgrades/Robux.aspx')end function openBCUpSellWindow()Game:GetService
'GuiService':OpenBrowserWindow(b..'Upgrades/BuildersClubMemberships.aspx')end
function updateAfterBalanceText(aa,ab)if isFreeItem()then p.BodyFrame.
AfterBalanceButton.Text=V return true,false end local W=nil if e==Enum.
function updateAfterBalanceText(aa,V)if isFreeItem()then p.BodyFrame.
AfterBalanceButton.Text=U return true,false end local W=nil if e==Enum.
CurrencyType.Robux then W='robux'elseif e==Enum.CurrencyType.Tix then W=
'tickets'end if not W then return false end local X=tonumber(aa[W])if not X then
return false end local Y=X-f if not ab then if Y<0 and W=='robux'then if n==nil
return false end local Y=X-f if not V then if Y<0 and W=='robux'then if n==nil
then n=p.BodyFrame.AfterBalanceButton.MouseButton1Click:connect(
openBuyCurrencyWindow)end p.BodyFrame.AfterBalanceButton.Text='You need '..
currencyTypeToString(e)..' '..tostring(-Y)..
@ -147,11 +147,11 @@ membershipTypeToNumber(aa)if aa==Enum.MembershipType.None then return 0 elseif
aa==Enum.MembershipType.BuildersClub then return 1 elseif aa==Enum.
MembershipType.TurboBuildersClub then return 2 elseif aa==Enum.MembershipType.
OutrageousBuildersClub then return 3 end return-1 end function canPurchaseItem()
local aa,ab,W,X=false,false,nil,false if l then local Y=nil X=ypcall(function()Y
=Game:HttpGetAsync(getSecureApiBaseUrl()..
'marketplace/productDetails?productid='..tostring(h))end)if X then c=
getRbxUtility().DecodeJSON(Y)end else X=ypcall(function()c=game:GetService
'MarketplaceService':GetProductInfo(d)end)end if c==nil or not X then W=
local aa,V,W,X=false,false,nil,false if l then local Y=nil X=ypcall(function()Y=
Game:HttpGetAsync(getSecureApiBaseUrl()..'marketplace/productDetails?productid='
..tostring(h))end)if X then c=getRbxUtility().DecodeJSON(Y)end else X=ypcall(
function()c=game:GetService'MarketplaceService':GetProductInfo(d)end)end if c==
nil or not X then W=
[[In-game sales are temporarily disabled. Please try again later.]]return true,
nil,nil,true,W end if not l then if not d then print
'current asset id is nil, this should always have a value'return false end if d
@ -172,10 +172,10 @@ setCurrencyAmountAndType(tonumber(c['PriceInRobux']),tonumber(c['PriceInTickets'
return true,nil,nil,true,W end local Y=getPlayerBalance()if not Y then W=
'Could not retrieve your balance. Please try again later.'return true,nil,nil,
true,W end if tonumber(c['MinimumMembershipLevel'])>membershipTypeToNumber(game.
Players.LocalPlayer.MembershipType)then ab=true end local Z,_=
updateAfterBalanceText(Y,ab)if ab then p.BodyFrame.AfterBalanceButton.Active=
true return true,_,ab,false end if c['ContentRatingTypeId']==1 then if game.
Players.LocalPlayer:GetUnder13()then W=
Players.LocalPlayer.MembershipType)then V=true end local Z,_=
updateAfterBalanceText(Y,V)if V then p.BodyFrame.AfterBalanceButton.Active=true
return true,_,V,false end if c['ContentRatingTypeId']==1 then if game.Players.
LocalPlayer:GetUnder13()then W=
[[Your account is under 13 so purchase of this item is not allowed.]]return true
,nil,nil,true,W end end if(c['IsLimited']==true or c['IsLimitedUnique']==true)
and(c['Remaining']==''or c['Remaining']==0 or c['Remaining']==nil)then W=
@ -183,81 +183,81 @@ and(c['Remaining']==''or c['Remaining']==0 or c['Remaining']==nil)then W=
return true,nil,nil,true,W end if not Z then W=
[[Could not update your balance. Please check back after some time.]]return true
,nil,nil,true,W end p.BodyFrame.AfterBalanceButton.Active=true return true,_ end
function computeSpaceString(aa)local ab,W=' ',Instance.new'TextButton'W.Size=
function computeSpaceString(aa)local V,W=' ',Instance.new'TextButton'W.Size=
UDim2.new(0,aa.AbsoluteSize.X,0,aa.AbsoluteSize.Y)W.FontSize=aa.FontSize W.
Parent=aa.Parent W.BackgroundTransparency=1 W.Text=ab W.Name='SpaceButton'while
W.TextBounds.X<aa.TextBounds.X do ab=ab..' 'W.Text=ab end ab=ab..' 'W.Text=''
return ab end function startSpinner()v=true Spawn(function()local aa=0 while v
do local ab=0 while ab<8 do if ab==aa or ab==((aa+1)%8)then w[ab+1].Image=
'http://www.roblox.com/Asset/?id=45880668'else w[ab+1].Image=
'http://www.roblox.com/Asset/?id=45880710'end ab=ab+1 end aa=(aa+1)%8 wait(
6.666666666666666E-2)end end)end function stopSpinner()v=false end function
setButtonsVisible(...)local aa,ab,W={...},select('#',...),p.BodyFrame:
Parent=aa.Parent W.BackgroundTransparency=1 W.Text=V W.Name='SpaceButton'while W
.TextBounds.X<aa.TextBounds.X do V=V..' 'W.Text=V end V=V..' 'W.Text=''return V
end function startSpinner()u=true Spawn(function()local aa=0 while u do local V=
0 while V<8 do if V==aa or V==((aa+1)%8)then v[V+1].Image=
'http://www.roblox.com/Asset/?id=45880668'else v[V+1].Image=
'http://www.roblox.com/Asset/?id=45880710'end V=V+1 end aa=(aa+1)%8 wait(
6.666666666666666E-2)end end)end function stopSpinner()u=false end function
setButtonsVisible(...)local aa,V,W={...},select('#',...),p.BodyFrame:
GetChildren()for X=1,#W do if W[X]:IsA'GuiButton'then W[X].Visible=false for Y=1
,ab do if W[X]==aa[Y]then W[X].Visible=true break end end end end end function
createSpinner(aa,ab,W)local X=Instance.new'Frame'X.Name='Spinner'X.Size=aa X.
Position=ab X.BackgroundTransparency=1 X.ZIndex=10 X.Parent=W w={}local Y=1
while Y<=8 do local Z=Instance.new'ImageLabel'Z.Name='Spinner'..Y Z.Size=UDim2.
new(0,16,0,16)Z.Position=UDim2.new(0.5+0.3*math.cos(math.rad(45*Y)),-8,0.5+0.3*
math.sin(math.rad(45*Y)),-8)Z.BackgroundTransparency=1 Z.ZIndex=10 Z.Image=
'http://www.roblox.com/Asset/?id=45880710'Z.Parent=X w[Y]=Z Y=Y+1 end end
,V do if W[X]==aa[Y]then W[X].Visible=true break end end end end end function
createSpinner(aa,V,W)local X=Instance.new'Frame'X.Name='Spinner'X.Size=aa X.
Position=V X.BackgroundTransparency=1 X.ZIndex=10 X.Parent=W v={}local Y=1 while
Y<=8 do local Z=Instance.new'ImageLabel'Z.Name='Spinner'..Y Z.Size=UDim2.new(0,
16,0,16)Z.Position=UDim2.new(0.5+0.3*math.cos(math.rad(45*Y)),-8,0.5+0.3*math.
sin(math.rad(45*Y)),-8)Z.BackgroundTransparency=1 Z.ZIndex=10 Z.Image=
'http://www.roblox.com/Asset/?id=45880710'Z.Parent=X v[Y]=Z Y=Y+1 end end
function createPurchasePromptGui()p=Instance.new'Frame'p.Name='PurchaseFrame'p.
Size=UDim2.new(0,660,0,400)p.Position=t p.Visible=false p.BackgroundColor3=
Size=UDim2.new(0,660,0,400)p.Position=s p.Visible=false p.BackgroundColor3=
Color3.new(0.5529411764705883,0.5529411764705883,0.5529411764705883)p.
BorderColor3=Color3.new(0.8,0.8,0.8)p.Parent=game.CoreGui.RobloxGui local aa=
Instance.new'Frame'aa.Name='BodyFrame'aa.Size=UDim2.new(1,0,1,-60)aa.Position=
UDim2.new(0,0,0,60)aa.BackgroundColor3=Color3.new(0.2627450980392157,
0.2627450980392157,0.2627450980392157)aa.BorderSizePixel=0 aa.ZIndex=8 aa.Parent
=p local ab=createTextObject('TitleLabel','Buy Item','TextLabel',Enum.FontSize.
Size48)ab.ZIndex=8 ab.Size=UDim2.new(1,0,0,60)local W=ab:Clone()W.Name=
=p local V=createTextObject('TitleLabel','Buy Item','TextLabel',Enum.FontSize.
Size48)V.ZIndex=8 V.Size=UDim2.new(1,0,0,60)local W=V:Clone()W.Name=
'TitleBackdrop'W.TextColor3=Color3.new(0.12549019607843137,0.12549019607843137,
0.12549019607843137)W.BackgroundTransparency=0 W.BackgroundColor3=Color3.new(
0.21176470588235294,0.3764705882352941,0.6705882352941176)W.Position=UDim2.new(0
,0,0,-2)W.ZIndex=8 W.Parent=p ab.Parent=p local X,Y=90,createImageButton
,0,0,-2)W.ZIndex=8 W.Parent=p V.Parent=p local X,Y=90,createImageButton
'CancelButton'Y.Position=UDim2.new(0.5,(X/2),1,-120)Y.BackgroundTransparency=1 Y
.BorderSizePixel=0 Y.Parent=aa Y.Modal=true Y.ZIndex=8 Y.Image=E Y.
MouseButton1Down:connect(function()Y.Image=F end)Y.MouseButton1Up:connect(
function()Y.Image=E end)Y.MouseLeave:connect(function()Y.Image=E end)Y.
.BorderSizePixel=0 Y.Parent=aa Y.Modal=true Y.ZIndex=8 Y.Image=D Y.
MouseButton1Down:connect(function()Y.Image=E end)Y.MouseButton1Up:connect(
function()Y.Image=D end)Y.MouseLeave:connect(function()Y.Image=D end)Y.
MouseButton1Click:connect(doDeclinePurchase)local Z=createImageButton'BuyButton'
Z.Position=UDim2.new(0.5,-153-(X/2),1,-120)Z.BackgroundTransparency=1 Z.
BorderSizePixel=0 Z.Image=B Z.ZIndex=8 Z.MouseButton1Down:connect(function()Z.
Image=C end)Z.MouseButton1Up:connect(function()Z.Image=B end)Z.MouseLeave:
connect(function()Z.Image=B end)Z.Parent=aa local _=Z:Clone()_.Name=
BorderSizePixel=0 Z.Image=A Z.ZIndex=8 Z.MouseButton1Down:connect(function()Z.
Image=B end)Z.MouseButton1Up:connect(function()Z.Image=A end)Z.MouseLeave:
connect(function()Z.Image=A end)Z.Parent=aa local _=Z:Clone()_.Name=
'BuyDisabledButton'_.AutoButtonColor=false _.Visible=false _.Active=false _.
Image=D _.ZIndex=8 _.Parent=aa local ac=Z:Clone()ac.BackgroundTransparency=1 ac.
Name='FreeButton'ac.Visible=false ac.ZIndex=8 ac.Image=I ac.MouseButton1Down:
connect(function()ac.Image=J end)ac.MouseButton1Up:connect(function()ac.Image=I
end)ac.MouseLeave:connect(function()ac.Image=I end)ac.Parent=aa local ad=Z:
Clone()ad.Name='OkButton'ad.BackgroundTransparency=1 ad.Visible=false ad.
Position=UDim2.new(0.5,-ad.Size.X.Offset/2,1,-120)ad.Modal=true ad.Image=G ad.
ZIndex=8 ad.MouseButton1Down:connect(function()ad.Image=H end)ad.MouseButton1Up:
connect(function()ad.Image=G end)ad.MouseLeave:connect(function()ad.Image=G end)
ad.Parent=aa local ae=ad:Clone()ae.ZIndex=8 ae.Name='OkPurchasedButton'ae.
MouseButton1Down:connect(function()ae.Image=H end)ae.MouseButton1Up:connect(
function()ae.Image=G end)ae.MouseLeave:connect(function()ae.Image=G end)ae.
Parent=aa ad.MouseButton1Click:connect(function()userPurchaseActionsEnded(false)
end)ae.MouseButton1Click:connect(function()if l then
Image=C _.ZIndex=8 _.Parent=aa local ab=Z:Clone()ab.BackgroundTransparency=1 ab.
Name='FreeButton'ab.Visible=false ab.ZIndex=8 ab.Image=H ab.MouseButton1Down:
connect(function()ab.Image=I end)ab.MouseButton1Up:connect(function()ab.Image=H
end)ab.MouseLeave:connect(function()ab.Image=H end)ab.Parent=aa local ac=Z:
Clone()ac.Name='OkButton'ac.BackgroundTransparency=1 ac.Visible=false ac.
Position=UDim2.new(0.5,-ac.Size.X.Offset/2,1,-120)ac.Modal=true ac.Image=F ac.
ZIndex=8 ac.MouseButton1Down:connect(function()ac.Image=G end)ac.MouseButton1Up:
connect(function()ac.Image=F end)ac.MouseLeave:connect(function()ac.Image=F end)
ac.Parent=aa local ad=ac:Clone()ad.ZIndex=8 ad.Name='OkPurchasedButton'ad.
MouseButton1Down:connect(function()ad.Image=G end)ad.MouseButton1Up:connect(
function()ad.Image=F end)ad.MouseLeave:connect(function()ad.Image=F end)ad.
Parent=aa ac.MouseButton1Click:connect(function()userPurchaseActionsEnded(false)
end)ad.MouseButton1Click:connect(function()if l then
userPurchaseProductActionsEnded(true)else signalPromptEnded(true)end end)Z.
MouseButton1Click:connect(function()doAcceptPurchase(Enum.CurrencyType.Robux)end
)ac.MouseButton1Click:connect(function()doAcceptPurchase(false)end)local af=
Instance.new'ImageLabel'af.Name='ItemPreview'af.BackgroundColor3=Color3.new(
0.12549019607843137,0.12549019607843137,0.12549019607843137)af.BorderColor3=
Color3.new(0.5529411764705883,0.5529411764705883,0.5529411764705883)af.Position=
UDim2.new(0,30,0,20)af.Size=UDim2.new(0,180,0,180)af.ZIndex=9 af.Parent=aa local
ag=createTextObject('ItemDescription',
)ab.MouseButton1Click:connect(function()doAcceptPurchase(false)end)local ae=
Instance.new'ImageLabel'ae.Name='ItemPreview'ae.BackgroundColor3=Color3.new(
0.12549019607843137,0.12549019607843137,0.12549019607843137)ae.BorderColor3=
Color3.new(0.5529411764705883,0.5529411764705883,0.5529411764705883)ae.Position=
UDim2.new(0,30,0,20)ae.Size=UDim2.new(0,180,0,180)ae.ZIndex=9 ae.Parent=aa local
af=createTextObject('ItemDescription',
[[Would you like to buy the 'itemName' for currencyType currencyAmount?]],
'TextLabel',Enum.FontSize.Size24)ag.Position=UDim2.new(1,20,0,0)ag.Size=UDim2.
new(0,410,1,0)ag.ZIndex=8 ag.Parent=af local ah=createTextObject(
'TextLabel',Enum.FontSize.Size24)af.Position=UDim2.new(1,20,0,0)af.Size=UDim2.
new(0,410,1,0)af.ZIndex=8 af.Parent=ae local ag=createTextObject(
'AfterBalanceButton','Place holder text ip sum lorem dodo ashs','TextButton',
Enum.FontSize.Size24)ah.AutoButtonColor=false ah.TextColor3=Color3.new(
0.8705882352941177,0.23137254901960785,0.11764705882352941)ah.Position=UDim2.
new(0,5,1,-55)ah.Size=UDim2.new(1,-10,0,50)ah.ZIndex=8 ah.Parent=aa local ai=
Instance.new'Frame'ai.Name='PurchasingFrame'ai.Size=UDim2.new(1,0,1,0)ai.
BackgroundColor3=Color3.new(0,0,0)ai.BackgroundTransparency=0.2 ai.
BorderSizePixel=0 ai.ZIndex=9 ai.Visible=false ai.Active=true ai.Parent=p local
aj=createTextObject('PurchasingLabel','Purchasing...','TextLabel',Enum.FontSize.
Size48)aj.Size=UDim2.new(1,0,1,0)aj.ZIndex=10 aj.Parent=ai createSpinner(UDim2.
new(0,50,0,50),UDim2.new(0.5,-25,0.5,30),aj)end function showPurchasing()
Enum.FontSize.Size24)ag.AutoButtonColor=false ag.TextColor3=Color3.new(
0.8705882352941177,0.23137254901960785,0.11764705882352941)ag.Position=UDim2.
new(0,5,1,-55)ag.Size=UDim2.new(1,-10,0,50)ag.ZIndex=8 ag.Parent=aa local ah=
Instance.new'Frame'ah.Name='PurchasingFrame'ah.Size=UDim2.new(1,0,1,0)ah.
BackgroundColor3=Color3.new(0,0,0)ah.BackgroundTransparency=0.2 ah.
BorderSizePixel=0 ah.ZIndex=9 ah.Visible=false ah.Active=true ah.Parent=p local
ai=createTextObject('PurchasingLabel','Purchasing...','TextLabel',Enum.FontSize.
Size48)ai.Size=UDim2.new(1,0,1,0)ai.ZIndex=10 ai.Parent=ah createSpinner(UDim2.
new(0,50,0,50),UDim2.new(0.5,-25,0.5,30),ai)end function showPurchasing()
startSpinner()p.PurchasingFrame.Visible=true end function hidePurchasing()p.
PurchasingFrame.Visible=false stopSpinner()end function createTextObject(aa,ab,
ac,ad)local ae=Instance.new(ac)ae.Font=Enum.Font.ArialBold ae.TextColor3=Color3.
@ -278,7 +278,7 @@ i['isValid']):lower()=='true'then ab=true end Game:GetService
'MarketplaceService':SignalPromptProductPurchaseFinished(tonumber(i['playerId'])
,tonumber(i['productId']),ab)else print
'Something went wrong, no currentServerResponseTable'end
removeCurrentPurchaseInfo()else local ab=string.gsub(R,'itemName',tostring(c[
removeCurrentPurchaseInfo()else local ab=string.gsub(Q,'itemName',tostring(c[
'Name']))p.BodyFrame.ItemPreview.ItemDescription.Text=ab setButtonsVisible(p.
BodyFrame.OkPurchasedButton)hidePurchasing()end end function
doProcessServerPurchaseResponse(aa)if not aa then print
@ -292,7 +292,7 @@ doPurchasePrompt(aa,ab,ac,ad,nil)end)Game:GetService'MarketplaceService'.
ServerPurchaseVerification:connect(function(aa)doProcessServerPurchaseResponse(
aa)end)if m then Game:GetService'GuiService'.BrowserWindowClosed:connect(
function()doPlayerFundsCheck(false)end)end Game.CoreGui.RobloxGui.Changed:
connect(function()local aa=(game.CoreGui.RobloxGui.AbsoluteSize.Y<=x)if aa and
not u then changeGuiToScreenSize(true)elseif not aa and u then
changeGuiToScreenSize(false)end u=aa end)u=(game.CoreGui.RobloxGui.AbsoluteSize.
Y<=x)if u then changeGuiToScreenSize(true)end
connect(function()local aa=(game.CoreGui.RobloxGui.AbsoluteSize.Y<=w)if aa and
not t then changeGuiToScreenSize(true)elseif not aa and t then
changeGuiToScreenSize(false)end t=aa end)t=(game.CoreGui.RobloxGui.AbsoluteSize.
Y<=w)if t then changeGuiToScreenSize(true)end

View File

@ -9,45 +9,42 @@ local k=#j Game:GetService'ContentProvider':Preload(g)Game:GetService
Players.LocalPlayer do wait()end function createContextActionGui()if not e and b
then e=Instance.new'ScreenGui'e.Name='ContextActionGui'f=Instance.new'Frame'f.
BackgroundTransparency=1 f.Size=UDim2.new(0.3,0,0.5,0)f.Position=UDim2.new(0.7,0
,0.5,0)f.Name='ContextButtonFrame'f.Parent=e end end function
setButtonSizeAndPosition(l)local m,n,o,p=55,10,95,(game.CoreGui.RobloxGui.
AbsoluteSize.X<600)if not p then m=85 n=40 end l.Size=UDim2.new(0,m,0,m)end
function contextButtonDown(l,m,n)if m.UserInputType==Enum.UserInputType.Touch
then l.Image=g a:CallFunction(n,Enum.UserInputState.Begin,m)end end function
contextButtonMoved(l,m,n)if m.UserInputType==Enum.UserInputType.Touch then l.
Image=g a:CallFunction(n,Enum.UserInputState.Change,m)end end function
contextButtonUp(l,m,n)l.Image=h if m.UserInputType==Enum.UserInputType.Touch and
m.UserInputState==Enum.UserInputState.End then a:CallFunction(n,Enum.
UserInputState.End,m)end end function isSmallScreenDevice()return Game:
GetService'GuiService':GetScreenResolution().y<=320 end function createNewButton
(l,m)local n=Instance.new'ImageButton'n.Name='ContextActionButton'n.
BackgroundTransparency=1 n.Size=UDim2.new(0,90,0,90)n.Active=true if
isSmallScreenDevice()then n.Size=UDim2.new(0,70,0,70)end n.Image=h n.Parent=f
local o=nil Game:GetService'UserInputService'.InputEnded:connect(function(p)i[p]
=nil end)n.InputBegan:connect(function(p)if i[p]then return end if p.
UserInputState==Enum.UserInputState.Begin and o==nil then o=p contextButtonDown(
n,p,l)end end)n.InputChanged:connect(function(p)if i[p]then return end if o~=p
then return end contextButtonMoved(n,p,l)end)n.InputEnded:connect(function(p)if
i[p]then return end if o~=p then return end o=nil i[p]=true contextButtonUp(n,p,
l)end)local p=Instance.new'ImageLabel'p.Name='ActionIcon'p.Position=UDim2.new(
0.175,0,0.175,0)p.Size=UDim2.new(0.65,0,0.65,0)p.BackgroundTransparency=1 if m[
'image']and type(m['image'])=='string'then p.Image=m['image']end p.Parent=n
local q=Instance.new'TextLabel'q.Name='ActionTitle'q.Size=UDim2.new(1,0,1,0)q.
BackgroundTransparency=1 q.Font=Enum.Font.SourceSansBold q.TextColor3=Color3.
new(1,1,1)q.TextStrokeTransparency=0 q.FontSize=Enum.FontSize.Size18 q.
TextWrapped=true q.Text=''if m['title']and type(m['title'])=='string'then q.Text
=m['title']end q.Parent=n return n end function createButton(l,m)local n,o=
createNewButton(l,m),nil for p=1,#d do if d[p]=='empty'then o=p break end end if
not o then o=#d+1 end if o>k then return end d[o]=n c[l]['button']=n n.Position=
j[o]n.Parent=f if e and e.Parent==nil then e.Parent=Game.Players.LocalPlayer.
PlayerGui end end function removeAction(l)if not c[l]then return end local m=c[l
]['button']if m then m.Parent=nil for n=1,#d do if d[n]==m then d[n]='empty'
break end end m:Destroy()end c[l]=nil end function addAction(l,m,n)if c[l]then
removeAction(l)end c[l]={n}if m and b then createContextActionGui()createButton(
l,n)end end a.BoundActionChanged:connect(function(l,m,n)if c[l]and n then local
o=c[l]['button']if o then if m=='image'then o.ActionIcon.Image=n[m]elseif m==
'title'then o.ActionTitle.Text=n[m]elseif m=='description'then elseif m==
'position'then o.Position=n[m]end end end end)a.BoundActionAdded:connect(
,0.5,0)f.Name='ContextButtonFrame'f.Parent=e end end function contextButtonDown(
l,m,n)if m.UserInputType==Enum.UserInputType.Touch then l.Image=g a:
CallFunction(n,Enum.UserInputState.Begin,m)end end function contextButtonMoved(l
,m,n)if m.UserInputType==Enum.UserInputType.Touch then l.Image=g a:CallFunction(
n,Enum.UserInputState.Change,m)end end function contextButtonUp(l,m,n)l.Image=h
if m.UserInputType==Enum.UserInputType.Touch and m.UserInputState==Enum.
UserInputState.End then a:CallFunction(n,Enum.UserInputState.End,m)end end
function isSmallScreenDevice()return Game:GetService'GuiService':
GetScreenResolution().y<=320 end function createNewButton(l,m)local n=Instance.
new'ImageButton'n.Name='ContextActionButton'n.BackgroundTransparency=1 n.Size=
UDim2.new(0,90,0,90)n.Active=true if isSmallScreenDevice()then n.Size=UDim2.new(
0,70,0,70)end n.Image=h n.Parent=f local o=nil Game:GetService'UserInputService'
.InputEnded:connect(function(p)i[p]=nil end)n.InputBegan:connect(function(p)if i
[p]then return end if p.UserInputState==Enum.UserInputState.Begin and o==nil
then o=p contextButtonDown(n,p,l)end end)n.InputChanged:connect(function(p)if i[
p]then return end if o~=p then return end contextButtonMoved(n,p,l)end)n.
InputEnded:connect(function(p)if i[p]then return end if o~=p then return end o=
nil i[p]=true contextButtonUp(n,p,l)end)local p=Instance.new'ImageLabel'p.Name=
'ActionIcon'p.Position=UDim2.new(0.175,0,0.175,0)p.Size=UDim2.new(0.65,0,0.65,0)
p.BackgroundTransparency=1 if m['image']and type(m['image'])=='string'then p.
Image=m['image']end p.Parent=n local q=Instance.new'TextLabel'q.Name=
'ActionTitle'q.Size=UDim2.new(1,0,1,0)q.BackgroundTransparency=1 q.Font=Enum.
Font.SourceSansBold q.TextColor3=Color3.new(1,1,1)q.TextStrokeTransparency=0 q.
FontSize=Enum.FontSize.Size18 q.TextWrapped=true q.Text=''if m['title']and type(
m['title'])=='string'then q.Text=m['title']end q.Parent=n return n end function
createButton(l,m)local n,o=createNewButton(l,m),nil for p=1,#d do if d[p]==
'empty'then o=p break end end if not o then o=#d+1 end if o>k then return end d[
o]=n c[l]['button']=n n.Position=j[o]n.Parent=f if e and e.Parent==nil then e.
Parent=Game.Players.LocalPlayer.PlayerGui end end function removeAction(l)if not
c[l]then return end local m=c[l]['button']if m then m.Parent=nil for n=1,#d do
if d[n]==m then d[n]='empty'break end end m:Destroy()end c[l]=nil end function
addAction(l,m,n)if c[l]then removeAction(l)end c[l]={n}if m and b then
createContextActionGui()createButton(l,n)end end a.BoundActionChanged:connect(
function(l,m,n)if c[l]and n then local o=c[l]['button']if o then if m=='image'
then o.ActionIcon.Image=n[m]elseif m=='title'then o.ActionTitle.Text=n[m]elseif
m=='position'then o.Position=n[m]end end end end)a.BoundActionAdded:connect(
function(l,m,n)addAction(l,m,n)end)a.BoundActionRemoved:connect(function(l,m)
removeAction(l)end)a.GetActionButtonEvent:connect(function(l)if c[l]then a:
FireActionButtonFoundSignal(l,c[l]['button'])end end)local l=a:

View File

@ -103,34 +103,34 @@ T=nil U=false V=false end function refreshConsolePosition(W,X)if not O then
return end local Y=Vector2.new(W,X)-O c.Position=UDim2.new(0,P.X+Y.X,0,P.Y+Y.Y)
end M.TextButton.MouseButton1Down:connect(function(W,X)O=Vector2.new(W,X)P=c.
AbsolutePosition end)M.TextButton.MouseButton1Up:connect(function(W,X)clean()end
)function refreshConsoleSize(W,X)if not Q then return end local Y=Vector2.new(W,
X)-Q c.Size=UDim2.new(0,math.max(R.X+Y.X,i.X),0,math.max(R.Y+Y.Y,i.Y))end c.Body
.ResizeButton.MouseButton1Down:connect(function(W,X)Q=Vector2.new(W,X)R=c.
AbsoluteSize end)c.Body.ResizeButton.MouseButton1Up:connect(function(W,X)clean()
end)M.CloseButton.MouseButton1Down:connect(function(X,Y)c.Visible=false end)c.
TitleBar.CloseButton.MouseButton1Up:connect(function()clean()end)local Y,Z=true,
false function startAnimation()if Z then return end Z=true repeat if Y then u=u-
1 else u=u+1 end local _=u/5 local aa=_*_*(3-(2*_))K.ImageLabel.Rotation=aa*5*9
x.Position=UDim2.new(0,(aa*5*50)-250,0,4)wait()if(u<=0 and Y)or(u>=5 and not Y)
then Z=false end until not Z end K.MouseButton1Down:connect(function(aa,_)Y=not
Y startAnimation()end)function changeOffset(_)if j==f then m=m+_ elseif j==g
then n=n+_ end repositionList()end function refreshTextHolderForReal()local _,ab
=J:GetChildren(),nil if j==f then ab=k elseif j==g then ab=l end local ac=0 for
ad=1,#_ do _[ad].Visible=false end for ad=1,#ab do local ae,af=nil,false if ad>#
_ then ae=a'TextLabel'{Name='Message',Parent=J,BackgroundTransparency=1,
TextXAlignment='Left',Size=UDim2.new(1,0,0,14),FontSize='Size10',ZIndex=1}af=
true else ae=_[ad]end if(r or ab[ad].Type~=Enum.MessageType.MessageOutput)and(q
or ab[ad].Type~=Enum.MessageType.MessageInfo)and(p or ab[ad].Type~=Enum.
MessageType.MessageWarning)and(o or ab[ad].Type~=Enum.MessageType.MessageError)
then ae.TextWrapped=s ae.Size=UDim2.new(0.98,0,0,2000)ae.Parent=c ae.Text=ab[ad]
.Time..' -- '..ab[ad].Message ae.Size=UDim2.new(0.98,0,0,ae.TextBounds.Y)ae.
Position=UDim2.new(0,5,0,ac)ae.Parent=J ac=ac+ae.TextBounds.Y if af then if(j==f
and m>0)or(j==g and n>0)then changeOffset(ae.TextBounds.Y)end end ae.Visible=
true if ab[ad].Type==Enum.MessageType.MessageError then ae.TextColor3=Color3.
new(1,0,0)elseif ab[ad].Type==Enum.MessageType.MessageInfo then ae.TextColor3=
Color3.new(0.4,0.5,1)elseif ab[ad].Type==Enum.MessageType.MessageWarning then ae
.TextColor3=Color3.new(1,0.6,0.4)else ae.TextColor3=Color3.new(1,1,1)end end end
t=ac end local ab=false function refreshTextHolder()if ab then return end Delay(
)function refreshConsoleSize(X,Y)if not Q then return end local Z=Vector2.new(X,
Y)-Q c.Size=UDim2.new(0,math.max(R.X+Z.X,i.X),0,math.max(R.Y+Z.Y,i.Y))end c.Body
.ResizeButton.MouseButton1Down:connect(function(X,Y)Q=Vector2.new(X,Y)R=c.
AbsoluteSize end)c.Body.ResizeButton.MouseButton1Up:connect(function(X,Y)clean()
end)M.CloseButton.MouseButton1Down:connect(function(Y,Z)c.Visible=false end)c.
TitleBar.CloseButton.MouseButton1Up:connect(function()clean()end)local Z,_=true,
false function startAnimation()if _ then return end _=true repeat if Z then u=u-
1 else u=u+1 end local aa=u/5 local ab=aa*aa*(3-(2*aa))K.ImageLabel.Rotation=ab*
5*9 x.Position=UDim2.new(0,(ab*5*50)-250,0,4)wait()if(u<=0 and Z)or(u>=5 and not
Z)then _=false end until not _ end K.MouseButton1Down:connect(function(aa,ab)Z=
not Z startAnimation()end)function changeOffset(ab)if j==f then m=m+ab elseif j
==g then n=n+ab end repositionList()end function refreshTextHolderForReal()local
ab,ac=J:GetChildren(),nil if j==f then ac=k elseif j==g then ac=l end local ad=0
for ae=1,#ab do ab[ae].Visible=false end for ae=1,#ac do local af,ag=nil,false
if ae>#ab then af=a'TextLabel'{Name='Message',Parent=J,BackgroundTransparency=1,
TextXAlignment='Left',Size=UDim2.new(1,0,0,14),FontSize='Size10',ZIndex=1}ag=
true else af=ab[ae]end if(r or ac[ae].Type~=Enum.MessageType.MessageOutput)and(q
or ac[ae].Type~=Enum.MessageType.MessageInfo)and(p or ac[ae].Type~=Enum.
MessageType.MessageWarning)and(o or ac[ae].Type~=Enum.MessageType.MessageError)
then af.TextWrapped=s af.Size=UDim2.new(0.98,0,0,2000)af.Parent=c af.Text=ac[ae]
.Time..' -- '..ac[ae].Message af.Size=UDim2.new(0.98,0,0,af.TextBounds.Y)af.
Position=UDim2.new(0,5,0,ad)af.Parent=J ad=ad+af.TextBounds.Y if ag then if(j==f
and m>0)or(j==g and n>0)then changeOffset(af.TextBounds.Y)end end af.Visible=
true if ac[ae].Type==Enum.MessageType.MessageError then af.TextColor3=Color3.
new(1,0,0)elseif ac[ae].Type==Enum.MessageType.MessageInfo then af.TextColor3=
Color3.new(0.4,0.5,1)elseif ac[ae].Type==Enum.MessageType.MessageWarning then af
.TextColor3=Color3.new(1,0.6,0.4)else af.TextColor3=Color3.new(1,1,1)end end end
t=ad end local ab=false function refreshTextHolder()if ab then return end Delay(
0.1,function()ab=false refreshTextHolderForReal()end)ab=true end local ac=0
function holdingUpButton()if U then return end U=true wait(0.6)ac=ac+1 while U
and ac<2 do wait()changeOffset(12)end ac=ac-1 end function holdingDownButton()if
@ -141,10 +141,10 @@ function()changeOffset(10)holdingUpButton()end)c.Body.ScrollBar.Up.
MouseButton1Up:connect(function()clean()end)c.Body.ScrollBar.Down.
MouseButton1Down:connect(function()changeOffset(-10)holdingDownButton()end)c.
Body.ScrollBar.Down.MouseButton1Up:connect(function()clean()end)function
handleScroll(ad,ae)if not S then return end local af,_,ag=(Vector2.new(ad,ae)-S)
.Y,1-(c.Body.TextBox.AbsoluteSize.Y/J.AbsoluteSize.Y),E.AbsoluteSize.Y-E.Handle.
AbsoluteSize.Y local ah=math.max(math.min(af,ag),0-ag)local ai,aj=ah/ag,(_*J.
AbsoluteSize.Y)local ak=aj*ai if j==f then m=T-ak elseif j==g then n=T-ak end
handleScroll(ad,ae)if not S then return end local af,ag,ah=(Vector2.new(ad,ae)-S
).Y,1-(c.Body.TextBox.AbsoluteSize.Y/J.AbsoluteSize.Y),E.AbsoluteSize.Y-E.Handle
.AbsoluteSize.Y local ai=math.max(math.min(af,ah),0-ah)local aj,ak=ai/ah,(ag*J.
AbsoluteSize.Y)local al=ak*aj if j==f then m=T-al elseif j==g then n=T-al end
end E.Handle.MouseButton1Down:connect(function(ad,ae)S=Vector2.new(ad,ae)
pScrollHandle=E.Handle.AbsolutePosition if j==f then T=m elseif j==g then T=n
end end)E.Handle.MouseButton1Up:connect(function(ad,ae)clean()end)local function
@ -159,57 +159,57 @@ then J.Position=UDim2.new(0,0,1,0-t)end else c.Body.ScrollBar.Visible=true c.
Body.TextBox.Size=UDim2.new(1,-25,1,-28)local af,ag=1-ae,nil if j==f then ag=m/J
.AbsoluteSize.Y elseif j==g then ag=n/J.AbsoluteSize.Y end local ah,ai=math.max(
0,af-ag),math.max(E.AbsoluteSize.Y*ae,21)local aj=ai/E.AbsoluteSize.Y local ak=(
1-aj)/(1-ae)local _=ah*ak local al=math.min(E.AbsoluteSize.Y*_,E.AbsoluteSize.Y-
ai)E.Handle.Size=UDim2.new(1,0,0,ai)E.Handle.Position=UDim2.new(0,0,0,al)if j==f
then J.Position=UDim2.new(0,0,1,0-t+m)elseif j==g then J.Position=UDim2.new(0,0,
1,0-t+n)end end end local function numberWithZero(ae)return(ae<10 and'0'or'')..
ae end local ae='%s:%s:%s'function ConvertTimeStamp(af)local ag=af-os.time()+
1-aj)/(1-ae)local al=ah*ak local am=math.min(E.AbsoluteSize.Y*al,E.AbsoluteSize.
Y-ai)E.Handle.Size=UDim2.new(1,0,0,ai)E.Handle.Position=UDim2.new(0,0,0,am)if j
==f then J.Position=UDim2.new(0,0,1,0-t+m)elseif j==g then J.Position=UDim2.new(
0,0,1,0-t+n)end end end local function numberWithZero(ae)return(ae<10 and'0'or''
)..ae end local ae='%s:%s:%s'function ConvertTimeStamp(af)local ag=af-os.time()+
math.floor(tick())local ah=ag%86400 local ai=math.floor(ah/3600)ah=ah-(ai*3600)
local aj=math.floor(ah/60)ah=ah-(aj*60)local ak,al,_,am=ah,numberWithZero(ai),
numberWithZero(aj),numberWithZero(ah)return ae:format(al,_,am)end x.
local aj=math.floor(ah/60)ah=ah-(aj*60)local ak,al,am=numberWithZero(ai),
numberWithZero(aj),numberWithZero(ah)return ae:format(ak,al,am)end x.
ErrorToggleButton.MouseButton1Down:connect(function(af,ag)o=not o x.
ErrorToggleButton.CheckFrame.Visible=o refreshTextHolder()repositionList()end)x.
WarningToggleButton.MouseButton1Down:connect(function(af,ag)p=not p x.
WarningToggleButton.MouseButton1Down:connect(function(ag,ah)p=not p x.
WarningToggleButton.CheckFrame.Visible=p refreshTextHolder()repositionList()end)
x.InfoToggleButton.MouseButton1Down:connect(function(af,ag)q=not q x.
x.InfoToggleButton.MouseButton1Down:connect(function(ah,ai)q=not q x.
InfoToggleButton.CheckFrame.Visible=q refreshTextHolder()repositionList()end)x.
OutputToggleButton.MouseButton1Down:connect(function(af,ag)r=not r x.
OutputToggleButton.MouseButton1Down:connect(function(ai,aj)r=not r x.
OutputToggleButton.CheckFrame.Visible=r refreshTextHolder()repositionList()end)x
.WordWrapToggleButton.MouseButton1Down:connect(function(af,ag)s=not s x.
.WordWrapToggleButton.MouseButton1Down:connect(function(aj,ak)s=not s x.
WordWrapToggleButton.CheckFrame.Visible=s refreshTextHolder()repositionList()end
)function AddLocalMessage(af,ag,ah)k[#k+1]={Message=af,Time=ConvertTimeStamp(ah)
,Type=ag}while#k>h do table.remove(k,1)end refreshTextHolder()repositionList()
end function AddServerMessage(af,ag,ah)l[#l+1]={Message=af,Time=
ConvertTimeStamp(ah),Type=ag}while#l>h do table.remove(l,1)end
)function AddLocalMessage(ak,al,am)k[#k+1]={Message=ak,Time=ConvertTimeStamp(am)
,Type=al}while#k>h do table.remove(k,1)end refreshTextHolder()repositionList()
end function AddServerMessage(ak,al,am)l[#l+1]={Message=ak,Time=
ConvertTimeStamp(am),Type=al}while#l>h do table.remove(l,1)end
refreshTextHolder()repositionList()end c.Body.LocalConsole.MouseButton1Click:
connect(function(af,ag)if j==g then j=f local ah,ai=c.Body.LocalConsole,c.Body.
ServerConsole ah.Size=UDim2.new(0,90,0,20)ai.Size=UDim2.new(0,90,0,17)ah.
BackgroundTransparency=0.6 ai.BackgroundTransparency=0.8 if game:FindFirstChild
'Players'and game.Players['LocalPlayer']then local aj=game.Players.LocalPlayer:
GetMouse()local ak=Vector2.new(aj.X,aj.Y)refreshConsolePosition(aj.X,aj.Y)
refreshConsoleSize(aj.X,aj.Y)handleScroll(aj.X,aj.Y)end refreshTextHolder()
repositionList()end end)c.Body.LocalConsole.MouseButton1Up:connect(function()
clean()end)local af=false c.Body.ServerConsole.MouseButton1Click:connect(
function(ag,ah)if not af then af=true game:GetService'LogService':
RequestServerOutput()end if j==f then j=g local ai,aj=c.Body.LocalConsole,c.Body
.ServerConsole aj.Size=UDim2.new(0,90,0,20)ai.Size=UDim2.new(0,90,0,17)aj.
BackgroundTransparency=0.6 ai.BackgroundTransparency=0.8 if game:FindFirstChild
'Players'and game.Players['LocalPlayer']then local ak=game.Players.LocalPlayer:
GetMouse()refreshConsolePosition(ak.X,ak.Y)refreshConsoleSize(ak.X,ak.Y)
handleScroll(ak.X,ak.Y)end refreshTextHolder()repositionList()end end)c.Body.
ServerConsole.MouseButton1Up:connect(function()clean()end)if game:FindFirstChild
'Players'and game.Players['LocalPlayer']then local ag=game.Players.LocalPlayer:
GetMouse()ag.Move:connect(function()if not c.Visible then return end local ah=
game.Players.LocalPlayer:GetMouse()refreshConsolePosition(ah.X,ah.Y)
refreshConsoleSize(ah.X,ah.Y)handleScroll(ah.X,ah.Y)refreshTextHolder()
repositionList()end)ag.Button1Up:connect(function()clean()end)ag.WheelForward:
connect(function()if not c.Visible then return end if existsInsideContainer(c,ag
.X,ag.Y)then changeOffset(10)end end)ag.WheelBackward:connect(function()if not c
.Visible then return end if existsInsideContainer(c,ag.X,ag.Y)then changeOffset(
-10)end end)end E.Handle.MouseButton1Down:connect(function()repositionList()end)
local ag=game:GetService'LogService':GetLogHistory()for ah=1,#ag do
AddLocalMessage(ag[ah].message,ag[ah].messageType,ag[ah].timestamp)end game:
GetService'LogService'.MessageOut:connect(function(ah,ai)AddLocalMessage(ah,ai,
os.time())end)game:GetService'LogService'.ServerMessageOut:connect(
AddServerMessage)end local ab=false function d.OnInvoke()if ab then return end
ab=true initializeDeveloperConsole()c.Visible=not c.Visible ab=false end
connect(function(ak,al)if j==g then j=f local am,an=c.Body.LocalConsole,c.Body.
ServerConsole am.Size=UDim2.new(0,90,0,20)an.Size=UDim2.new(0,90,0,17)am.
BackgroundTransparency=0.6 an.BackgroundTransparency=0.8 if game:FindFirstChild
'Players'and game.Players['LocalPlayer']then local ao=game.Players.LocalPlayer:
GetMouse()refreshConsolePosition(ao.X,ao.Y)refreshConsoleSize(ao.X,ao.Y)
handleScroll(ao.X,ao.Y)end refreshTextHolder()repositionList()end end)c.Body.
LocalConsole.MouseButton1Up:connect(function()clean()end)local al=false c.Body.
ServerConsole.MouseButton1Click:connect(function(am,an)if not al then al=true
game:GetService'LogService':RequestServerOutput()end if j==f then j=g local ao,
ap=c.Body.LocalConsole,c.Body.ServerConsole ap.Size=UDim2.new(0,90,0,20)ao.Size=
UDim2.new(0,90,0,17)ap.BackgroundTransparency=0.6 ao.BackgroundTransparency=0.8
if game:FindFirstChild'Players'and game.Players['LocalPlayer']then local aq=game
.Players.LocalPlayer:GetMouse()refreshConsolePosition(aq.X,aq.Y)
refreshConsoleSize(aq.X,aq.Y)handleScroll(aq.X,aq.Y)end refreshTextHolder()
repositionList()end end)c.Body.ServerConsole.MouseButton1Up:connect(function()
clean()end)if game:FindFirstChild'Players'and game.Players['LocalPlayer']then
local an=game.Players.LocalPlayer:GetMouse()an.Move:connect(function()if not c.
Visible then return end local ao=game.Players.LocalPlayer:GetMouse()
refreshConsolePosition(ao.X,ao.Y)refreshConsoleSize(ao.X,ao.Y)handleScroll(ao.X,
ao.Y)refreshTextHolder()repositionList()end)an.Button1Up:connect(function()
clean()end)an.WheelForward:connect(function()if not c.Visible then return end if
existsInsideContainer(c,an.X,an.Y)then changeOffset(10)end end)an.WheelBackward:
connect(function()if not c.Visible then return end if existsInsideContainer(c,an
.X,an.Y)then changeOffset(-10)end end)end E.Handle.MouseButton1Down:connect(
function()repositionList()end)local an=game:GetService'LogService':
GetLogHistory()for ao=1,#an do AddLocalMessage(an[ao].message,an[ao].messageType
,an[ao].timestamp)end game:GetService'LogService'.MessageOut:connect(function(ao
,ap)AddLocalMessage(ao,ap,os.time())end)game:GetService'LogService'.
ServerMessageOut:connect(AddServerMessage)end local ab=false function d.OnInvoke
()if ab then return end ab=true initializeDeveloperConsole()c.Visible=not c.
Visible ab=false end

File diff suppressed because it is too large Load Diff

View File

@ -15,25 +15,25 @@ end function resumeGameFunction(u)u.Settings:TweenPosition(UDim2.new(0.5,-262,-
function()u.Visible=false for v=1,#o do o[v].Visible=false game.GuiService:
RemoveCenterDialog(o[v])end game.GuiService:RemoveCenterDialog(u)settingsButton.
Active=true k=nil l={}end)end function goToMenu(u,v,w,x,y)if type(v)~='string'
then return end table.insert(l,k)if v=='GameMainMenu'then l={}end local z,A=u:
GetChildren(),false for B=1,#z do if z[B].Name==v then z[B].Visible=true k={
container=u,name=v,direction=w,lastSize=x}A=true if x and y then z[B]:
TweenSizeAndPosition(x,y,Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,e,true
)elseif x then z[B]:TweenSizeAndPosition(x,UDim2.new(0.5,-x.X.Offset/2,0.5,-x.Y.
Offset/2),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,e,true)else z[B]:
TweenPosition(UDim2.new(0,0,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.
Sine,e,true)end else if w=='left'then z[B]:TweenPosition(UDim2.new(-1,-525,0,0),
Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,e,true)elseif w=='right'then z[
B]:TweenPosition(UDim2.new(1,525,0,0),Enum.EasingDirection.InOut,Enum.
EasingStyle.Sine,e,true)elseif w=='up'then z[B]:TweenPosition(UDim2.new(0,0,-1,-
400),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,e,true)elseif w=='down'
then z[B]:TweenPosition(UDim2.new(0,0,1,400),Enum.EasingDirection.InOut,Enum.
EasingStyle.Sine,e,true)end delay(e,function()z[B].Visible=false end)end end end
function resetLocalCharacter()local u=game.Players.LocalPlayer if u then if u.
Character and u.Character:FindFirstChild'Humanoid'then u.Character.Humanoid.
Health=0 end end end local function createTextButton(u,v,w,x,y)local z=Instance.
new'TextButton'z.Font=Enum.Font.Arial z.FontSize=w z.Size=x z.Position=y z.Style
=v z.TextColor3=Color3.new(1,1,1)z.Text=u return z end local function
then return end table.insert(l,k)if v=='GameMainMenu'then l={}end local z=u:
GetChildren()for A=1,#z do if z[A].Name==v then z[A].Visible=true k={container=u
,name=v,direction=w,lastSize=x}if x and y then z[A]:TweenSizeAndPosition(x,y,
Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,e,true)elseif x then z[A]:
TweenSizeAndPosition(x,UDim2.new(0.5,-x.X.Offset/2,0.5,-x.Y.Offset/2),Enum.
EasingDirection.InOut,Enum.EasingStyle.Sine,e,true)else z[A]:TweenPosition(UDim2
.new(0,0,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,e,true)end else
if w=='left'then z[A]:TweenPosition(UDim2.new(-1,-525,0,0),Enum.EasingDirection.
InOut,Enum.EasingStyle.Sine,e,true)elseif w=='right'then z[A]:TweenPosition(
UDim2.new(1,525,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,e,true)
elseif w=='up'then z[A]:TweenPosition(UDim2.new(0,0,-1,-400),Enum.
EasingDirection.InOut,Enum.EasingStyle.Sine,e,true)elseif w=='down'then z[A]:
TweenPosition(UDim2.new(0,0,1,400),Enum.EasingDirection.InOut,Enum.EasingStyle.
Sine,e,true)end delay(e,function()z[A].Visible=false end)end end end function
resetLocalCharacter()local u=game.Players.LocalPlayer if u then if u.Character
and u.Character:FindFirstChild'Humanoid'then u.Character.Humanoid.Health=0 end
end end local function createTextButton(u,v,w,x,y)local z=Instance.new
'TextButton'z.Font=Enum.Font.Arial z.FontSize=w z.Size=x z.Position=y z.Style=v
z.TextColor3=Color3.new(1,1,1)z.Text=u return z end local function
CreateTextButtons(u,v,w,x)if#v<1 then error'Must have more than one button'end
local y,z=1,{}local function toggleSelection(A)for B,C in ipairs(z)do if C==A
then C.Style=Enum.ButtonStyle.RobloxButtonDefault else C.Style=Enum.ButtonStyle.
@ -279,25 +279,25 @@ goToAutoGraphics()end else settings().Rendering.EnableFRM=true
goToManualGraphics(translateSavedQualityLevelToInt(UserSettings().GameSettings.
SavedQualityLevel))end J.MouseButton1Click:connect(function()if q and not game.
Players.LocalPlayer then return end if not N then goToAutoGraphics()else
goToManualGraphics(L.Value)end end)local P=nil game.GraphicsQualityChangeRequest
:connect(function(Q)if N then return end if Q then if(L.Value+1)>i then return
end L.Value=L.Value+1 M.Text=tostring(L.Value)setGraphicsQualityLevel(L.Value)
game:GetService'GuiService':SendNotification('Graphics Quality','Increased to ('
..M.Text..')','',2,function()end)else if(L.Value-1)<=0 then return end L.Value=L
.Value-1 M.Text=tostring(L.Value)setGraphicsQualityLevel(L.Value)game:GetService
goToManualGraphics(L.Value)end end)game.GraphicsQualityChangeRequest:connect(
function(P)if N then return end if P then if(L.Value+1)>i then return end L.
Value=L.Value+1 M.Text=tostring(L.Value)setGraphicsQualityLevel(L.Value)game:
GetService'GuiService':SendNotification('Graphics Quality','Increased to ('..M.
Text..')','',2,function()end)else if(L.Value-1)<=0 then return end L.Value=L.
Value-1 M.Text=tostring(L.Value)setGraphicsQualityLevel(L.Value)game:GetService
'GuiService':SendNotification('Graphics Quality','Decreased to ('..M.Text..')',
'',2,function()end)end end)game.Players.PlayerAdded:connect(function(Q)if Q==
'',2,function()end)end end)game.Players.PlayerAdded:connect(function(P)if P==
game.Players.LocalPlayer and q then enableGraphicsWidget()end end)game.Players.
PlayerRemoving:connect(function(Q)if Q==game.Players.LocalPlayer and q then
PlayerRemoving:connect(function(P)if P==game.Players.LocalPlayer and q then
disableGraphicsWidget()end end)C=createTextButton('',Enum.ButtonStyle.
RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,30,0,176))C.
Name='StudioCheckbox'C.ZIndex=u+4 C:SetVerb'TogglePlayMode'C.Visible=false local
Q=(settings().Rendering.QualityLevel~=Enum.QualityLevel.Automatic)if q and not
P=(settings().Rendering.QualityLevel~=Enum.QualityLevel.Automatic)if q and not
game.Players.LocalPlayer then C.Text='X'disableGraphicsWidget()elseif q then C.
Text='X'enableGraphicsWidget()end if h then UserSettings().GameSettings.
StudioModeChanged:connect(function(R)q=R if R then Q=(settings().Rendering.
StudioModeChanged:connect(function(Q)q=Q if Q then P=(settings().Rendering.
QualityLevel~=Enum.QualityLevel.Automatic)goToAutoGraphics()C.Text='X'J.ZIndex=1
E.ZIndex=1 else if Q then goToManualGraphics()end C.Text=''J.ZIndex=u+4 E.ZIndex
E.ZIndex=1 else if P then goToManualGraphics()end C.Text=''J.ZIndex=u+4 E.ZIndex
=u+4 end end)else C.MouseButton1Click:connect(function()if not C.Active then
return end if C.Text==''then C.Text='X'else C.Text=''end end)end end local D=
createTextButton('',Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.
@ -312,14 +312,14 @@ setDisabledState(B)setDisabledState(C)end local E if h then E=createTextButton(
,50),UDim2.new(0,170,0,330))E.Modal=true else E=createTextButton('OK',Enum.
ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,180,0,50),UDim2
.new(0,170,0,270))E.Modal=true end E.Name='BackButton'E.ZIndex=u+4 E.Parent=w
local F=nil if not r then local G=Instance.new'TextLabel'G.Name=
'VideoCaptureLabel'G.Text='After Capturing Video'G.Font=Enum.Font.Arial G.
FontSize=Enum.FontSize.Size18 G.Position=UDim2.new(0,32,0,100)G.Size=UDim2.new(0
,164,0,18)G.BackgroundTransparency=1 G.TextColor3=Color3I(255,255,255)G.
TextXAlignment=Enum.TextXAlignment.Left G.ZIndex=u+4 G.Parent=w local H,I={},{}H
[1]='Just Save to Disk'I[H[1]]=Enum.UploadSetting['Never']H[2]=
'Upload to YouTube'I[H[2]]=Enum.UploadSetting['Ask me first']local J=nil J,d=
RbxGui.CreateDropDownMenu(H,function(K)UserSettings().GameSettings.
local F if not r then local G=Instance.new'TextLabel'G.Name='VideoCaptureLabel'G
.Text='After Capturing Video'G.Font=Enum.Font.Arial G.FontSize=Enum.FontSize.
Size18 G.Position=UDim2.new(0,32,0,100)G.Size=UDim2.new(0,164,0,18)G.
BackgroundTransparency=1 G.TextColor3=Color3I(255,255,255)G.TextXAlignment=Enum.
TextXAlignment.Left G.ZIndex=u+4 G.Parent=w local H,I={},{}H[1]=
'Just Save to Disk'I[H[1]]=Enum.UploadSetting['Never']H[2]='Upload to YouTube'I[
H[2]]=Enum.UploadSetting['Ask me first']local J=nil J,d=RbxGui.
CreateDropDownMenu(H,function(K)UserSettings().GameSettings.
VideoUploadPromptBehavior=I[K]end)J.Name='VideoCaptureField'J.ZIndex=u+4 J.
DropDownMenuButton.ZIndex=u+4 J.DropDownMenuButton.Icon.ZIndex=u+4 J.Position=
UDim2.new(0,270,0,94)J.Size=UDim2.new(0,200,0,32)J.Parent=w F=function()if
@ -553,26 +553,24 @@ new(1,-4,1,0)x.Position=UDim2.new(0,2,0,0)x.AutoButtonColor=false x.Text=
.Font=Enum.Font.Arial x.FontSize=Enum.FontSize.Size14 x.TextColor3=Color3.new(1,
1,1)x.BackgroundTransparency=1 local y=function()if w.Visible then return end x.
Visible=false w.Text=''w.Visible=true w:CaptureFocus()end x.MouseButton1Click:
connect(y)local z=true local A,B,C=function(A)z=A end,game:GetService
'GuiService',pcall(function()end)if not C then end w.FocusLost:connect(function(
D)if D then if w.Text~=''then local E=w.Text if string.sub(E,1,1)=='%'then game.
Players:TeamChat(string.sub(E,2))else game.Players:Chat(E)end end end w.Text=''w
.Visible=false x.Visible=true end)robloxLock(v)return v,A end,pcall(function()
local v=game.LocalSaveEnabled end)if y then delay(0,function()local z=v()z.
Parent=a game.RequestShutdown=function()table.insert(o,z)game.GuiService:
AddCenterDialog(z,Enum.CenterDialogType.QuitDialog,function()z.Visible=true end,
function()z.Visible=false end)return true end end)end delay(0,function()w().
Parent=a waitForChild(a,'UserSettingsShield')waitForChild(a.UserSettingsShield,
'Settings')waitForChild(a.UserSettingsShield.Settings,'SettingsStyle')
waitForChild(a.UserSettingsShield.Settings.SettingsStyle,'GameMainMenu')
waitForChild(a.UserSettingsShield.Settings.SettingsStyle.GameMainMenu,
'ReportAbuseButton')a.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.
ReportAbuseButton.Active=true end)local z,A,B=game.CoreGui.Version,pcall(
function()return game.GuiService.UseLuaChat end)if A and B then end local C=
41324860 delay(0,function()waitForChild(game,'NetworkClient')waitForChild(game,
'Players')waitForProperty(game.Players,'LocalPlayer')waitForProperty(game.
Players.LocalPlayer,'Character')waitForChild(game.Players.LocalPlayer.Character,
'Humanoid')waitForProperty(game,'PlaceId')if game.PlaceId==C then game.Players.
connect(y)local z=function(z)end pcall(function()end)w.FocusLost:connect(
function(A)if A then if w.Text~=''then local B=w.Text if string.sub(B,1,1)=='%'
then game.Players:TeamChat(string.sub(B,2))else game.Players:Chat(B)end end end
w.Text=''w.Visible=false x.Visible=true end)robloxLock(v)return v,z end,pcall(
function()end)if y then delay(0,function()local z=v()z.Parent=a game.
RequestShutdown=function()table.insert(o,z)game.GuiService:AddCenterDialog(z,
Enum.CenterDialogType.QuitDialog,function()z.Visible=true end,function()z.
Visible=false end)return true end end)end delay(0,function()w().Parent=a
waitForChild(a,'UserSettingsShield')waitForChild(a.UserSettingsShield,'Settings'
)waitForChild(a.UserSettingsShield.Settings,'SettingsStyle')waitForChild(a.
UserSettingsShield.Settings.SettingsStyle,'GameMainMenu')waitForChild(a.
UserSettingsShield.Settings.SettingsStyle.GameMainMenu,'ReportAbuseButton')a.
UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton.Active=
true end)pcall(function()return game.GuiService.UseLuaChat end)local z=41324860
delay(0,function()waitForChild(game,'NetworkClient')waitForChild(game,'Players')
waitForProperty(game.Players,'LocalPlayer')waitForProperty(game.Players.
LocalPlayer,'Character')waitForChild(game.Players.LocalPlayer.Character,
'Humanoid')waitForProperty(game,'PlaceId')if game.PlaceId==z then game.Players.
LocalPlayer.Character.Humanoid:SetClickToWalkEnabled(false)game.Players.
LocalPlayer.CharacterAdded:connect(function(D)waitForChild(D,'Humanoid')D.
LocalPlayer.CharacterAdded:connect(function(A)waitForChild(A,'Humanoid')A.
Humanoid:SetClickToWalkEnabled(false)end)end end)end

View File

@ -205,28 +205,22 @@ false,false,false,false,false,false,false,{},8 if not am then aF=12 end local aG
'Rude or Mean Behavior','False Reporting Me'},nil,nil,{Owner=255,Admin=240,
Member=128,Visitor=10,Banned=0},not not game.Workspace:FindFirstChild
'PSVariable'game.Workspace.ChildAdded:connect(function(aN)if aN.Name==
'PSVariable'and aN:IsA'BoolValue'then aM=true end end)function GetTotalEntries()
return math.min(#ai,_)end function GetEntryListLength()local aN=#ae+#af if ag
then aN=aN+1 end return aN end function AreAllEntriesOnScreen()return#ai*H.Size.
Y.Scale<=1+au end function GetLengthOfVisbleScroll()return 1+au end function
GetMaxScroll()return au*-1 end function GetMinScroll()if AreAllEntriesOnScreen()
then return GetMaxScroll()else return(GetMaxScroll()-(#ai*H.Size.Y.Scale))+(1+au
)end end function AbsoluteToPercent(aN,aO)return Vector2.new(aN,aO)/i.
AbsoluteSize end function TweenProperty(aN,aO,aP,aQ,aR)local aS=tick()while
tick()-aS<aR do aN[aO]=((aQ-aP)*((tick()-aS)/aR))+aP wait(3.333333333333333E-2)
end aN[aO]=aQ end function WaitForClick(aN,aO,aP)if aA then return end aA=true
local aQ,aR aQ=U.MouseButton1Up:connect(function(aS,aT)aP(aS,aT)U.Visible=false
aQ:disconnect()if aR then aR:disconnect()end end)aR=U.MouseMoved:connect(
function(aS,aT)aO(aS,aT)end)U.Visible=true U.Active=true U.Parent=aN aN.
AncestryChanged:connect(function(aS,aT)if aS==aN and aT==nil then aP(nx,ny)U.
Visible=false aQ:disconnect()aR:disconnect()debugprint
'forced out of wait for click'end end)aA=false end function GetPrivilegeType(aN)
if aN<=aL['Banned']then return aL['Banned']elseif aN<=aL['Visitor']then return
aL['Visitor']elseif aN<=aL['Member']then return aL['Member']elseif aN<=aL[
'Admin']then return aL['Admin']else return aL['Owner']end end function
SetPrivilegeRank(aN,aO)while aN.PersonalServerRank<aO do game:GetService
'PersonalServerService':Promote(aN)end while aN.PersonalServerRank>aO do game:
GetService'PersonalServerService':Demote(aN)end end function
'PSVariable'and aN:IsA'BoolValue'then aM=true end end)function
AreAllEntriesOnScreen()return#ai*H.Size.Y.Scale<=1+au end function GetMaxScroll(
)return au*-1 end function GetMinScroll()if AreAllEntriesOnScreen()then return
GetMaxScroll()else return(GetMaxScroll()-(#ai*H.Size.Y.Scale))+(1+au)end end
function AbsoluteToPercent(aN,aO)return Vector2.new(aN,aO)/i.AbsoluteSize end
function TweenProperty(aN,aO,aP,aQ,aR)local aS=tick()while tick()-aS<aR do aN[aO
]=((aQ-aP)*((tick()-aS)/aR))+aP wait(3.333333333333333E-2)end aN[aO]=aQ end
function WaitForClick(aN,aO,aP)if aA then return end aA=true local aQ,aR aQ=U.
MouseButton1Up:connect(function(aS,aT)aP(aS,aT)U.Visible=false aQ:disconnect()if
aR then aR:disconnect()end end)aR=U.MouseMoved:connect(function(aS,aT)aO(aS,aT)
end)U.Visible=true U.Active=true U.Parent=aN aN.AncestryChanged:connect(function
(aS,aT)if aS==aN and aT==nil then aP(nx,ny)U.Visible=false aQ:disconnect()aR:
disconnect()debugprint'forced out of wait for click'end end)aA=false end
function SetPrivilegeRank(aN,aO)while aN.PersonalServerRank<aO do game:
GetService'PersonalServerService':Promote(aN)end while aN.PersonalServerRank>aO
do game:GetService'PersonalServerService':Demote(aN)end end function
OnPrivilegeLevelSelect(aN,aO,aP,aQ,aR,aS)debugprint'setting privilege level'
SetPrivilegeRank(aN,aO)HighlightMyRank(aN,aP,aQ,aR,aS)end function
HighlightMyRank(aN,aO,aP,aQ,aR)aO.Image='http://www.roblox.com/asset/?id='..b[
@ -249,10 +243,10 @@ CloseAbuseDialog()aH=nil N.Active=false N.Image=
'http://www.roblox.com/asset/?id=96502438'Q:Destroy()S.Parent=nil T.Parent=nil J
.Parent=nil L.Visible=true end function InitReportAbuse()aJ=function(aN)aH=aN if
aH and aw then N.Active=true N.Image='http://www.roblox.com/asset/?id=96501119'
end end aK,UpdateAbuseSelection=Z.CreateDropDownMenu(aI,aJ,true)aK.Name=
'AbuseComboBox'aK.Position=UDim2.new(0.425,0,0,142)aK.Size=UDim2.new(0.55,0,0,32
)aK.Parent=L O.MouseButton1Click:connect(CloseAbuseDialog)N.MouseButton1Click:
connect(OnSubmitAbuse)S:FindFirstChild'OkButton'.MouseButton1Down:connect(
end end aK,aa=Z.CreateDropDownMenu(aI,aJ,true)aK.Name='AbuseComboBox'aK.Position
=UDim2.new(0.425,0,0,142)aK.Size=UDim2.new(0.55,0,0,32)aK.Parent=L O.
MouseButton1Click:connect(CloseAbuseDialog)N.MouseButton1Click:connect(
OnSubmitAbuse)S:FindFirstChild'OkButton'.MouseButton1Down:connect(
CloseAbuseDialog)T:FindFirstChild'OkButton'.MouseButton1Down:connect(
CloseAbuseDialog)end local function GetFriendStatus(aN)if aN==game.Players.
LocalPlayer then return Enum.FriendStatus.NotFriend else local aO,aP=pcall(
@ -270,57 +264,57 @@ return false end if not aO['Score']then return true end return aN['Score']<aO[
'Score']end function BlowThisPopsicleStand()Tabify()end function StatSort(aN,aO)
if aN.IsPrimary~=aO.IsPrimary then return aN.IsPrimary end if aN.Priority==aO.
Priority then return aN.AddId<aO.AddId end return aN.Priority<aO.Priority end
function StatChanged(aN,aO)BaseUpdate()end function StatAdded(aN,aO)while ay do
function StatChanged(aN,aO)BaseUpdate()end function StatAdded(aO,aP)while ay do
debugprint'in stat added function lock'wait(3.333333333333333E-2)end ay=true if
not(aN:IsA'StringValue'or aN:IsA'IntValue'or aN:IsA'BoolValue'or aN:IsA
'NumberValue'or aN:IsA'DoubleConstrainedValue'or aN:IsA'IntConstrainedValue')
then BlowThisPopsicleStand()else local aP=false for aQ,aR in pairs(ac)do if aR[
'Name']==aN.Name then aP=true end end if not aP then local aS={}aS['Name']=aN.
Name aS['Priority']=0 if aN:FindFirstChild'Priority'then aS['Priority']=aN.
Priority end aS['IsPrimary']=false if aN:FindFirstChild'IsPrimary'then aS[
'IsPrimary']=true end aS.AddId=ad ad=ad+1 table.insert(ac,aS)table.sort(ac,
StatSort)if not C:FindFirstChild(aS['Name'])then CreateStatTitle(aS['Name'])end
UpdateMaximize()end end ay=false StatChanged(aO)aN.Changed:connect(function(aP)
StatChanged(aO,aP)end)end function DoesStatExist(aN,aO)for aP,aQ in pairs(ae)do
if aQ['Player']~=aO and aQ['Player']:FindFirstChild'leaderstats'and aQ['Player']
.leaderstats:FindFirstChild(aN)then return true end end return false end
function StatRemoved(aN,aO)while ay do debugprint'In Adding Stat Lock1'wait(
3.333333333333333E-2)end ay=true if aO['Frame']:FindFirstChild(aN.Name)then
debugprint'Destroyed frame!'aO['Frame'][aN.Name].Parent=nil end if not
DoesStatExist(aN.Name,aO['Player'])then for aP,aQ in ipairs(ac)do if aQ['Name']
==aN.Name then table.remove(ac,aP)if C:FindFirstChild(aN.Name)then C[aN.Name]:
Destroy()end for aR,aS in pairs(af)do if aS['Frame']:FindFirstChild(aN.Name)then
aS['Frame'][aN.Name]:Destroy()end end end end end ay=false StatChanged(aO)end
function RemoveAllStats(aN)for aO,aP in ipairs(ac)do StatRemoved(aP,aN)end end
function GetScoreValue(aN)if aN:IsA'DoubleConstrainedValue'or aN:IsA
'IntConstrainedValue'then return aN.ConstrainedValue elseif aN:IsA'BoolValue'
then if aN.Value then return 1 else return 0 end else return aN.Value end end
function MakeScoreEntry(aN,aO,aP)if not aP:FindFirstChild'PlayerScore'then
return end local aQ,aR=aP:FindFirstChild'PlayerScore':Clone(),nil wait()if aN[
'Player']:FindFirstChild'leaderstats'and aN['Player'].leaderstats:
FindFirstChild(aO['Name'])then aR=aN['Player']:FindFirstChild'leaderstats':
FindFirstChild(aO['Name'])else return end if not aN['Player'].Parent then return
end aQ.Name=aO['Name']aQ.Text=tostring(GetScoreValue(aR))if aO['Name']==ac[1][
'Name']then debugprint'changing score'aN['Score']=GetScoreValue(aR)if aN[
'Player']==g then p.Text=tostring(GetScoreValue(aR))end end aR.Changed:connect(
function()if not aR.Parent then return end if aO['Name']==ac[1]['Name']then aN[
'Score']=GetScoreValue(aR)if aN['Player']==g then p.Text=tostring(GetScoreValue(
aR))end end aQ.Text=tostring(GetScoreValue(aR))BaseUpdate()end)return aQ end
function CreateStatTitle(aN)local aO=H:FindFirstChild'PlayerScore':Clone()aO.
Name=aN aO.Text=aN if E.Value then aO.TextTransparency=0 else aO.
TextTransparency=1 end aO.Parent=C end function RecreateScoreColumns(aN)while ay
not(aO:IsA'StringValue'or aO:IsA'IntValue'or aO:IsA'BoolValue'or aO:IsA
'NumberValue'or aO:IsA'DoubleConstrainedValue'or aO:IsA'IntConstrainedValue')
then BlowThisPopsicleStand()else local aQ=false for aR,aS in pairs(ac)do if aS[
'Name']==aO.Name then aQ=true end end if not aQ then local aT={}aT['Name']=aO.
Name aT['Priority']=0 if aO:FindFirstChild'Priority'then aT['Priority']=aO.
Priority end aT['IsPrimary']=false if aO:FindFirstChild'IsPrimary'then aT[
'IsPrimary']=true end aT.AddId=ad ad=ad+1 table.insert(ac,aT)table.sort(ac,
StatSort)if not C:FindFirstChild(aT['Name'])then CreateStatTitle(aT['Name'])end
UpdateMaximize()end end ay=false StatChanged(aP)aO.Changed:connect(function(aQ)
StatChanged(aP,aQ)end)end function DoesStatExist(aO,aP)for aQ,aR in pairs(ae)do
if aR['Player']~=aP and aR['Player']:FindFirstChild'leaderstats'and aR['Player']
.leaderstats:FindFirstChild(aO)then return true end end return false end
function StatRemoved(aO,aP)while ay do debugprint'In Adding Stat Lock1'wait(
3.333333333333333E-2)end ay=true if aP['Frame']:FindFirstChild(aO.Name)then
debugprint'Destroyed frame!'aP['Frame'][aO.Name].Parent=nil end if not
DoesStatExist(aO.Name,aP['Player'])then for aQ,aR in ipairs(ac)do if aR['Name']
==aO.Name then table.remove(ac,aQ)if C:FindFirstChild(aO.Name)then C[aO.Name]:
Destroy()end for aS,aT in pairs(af)do if aT['Frame']:FindFirstChild(aO.Name)then
aT['Frame'][aO.Name]:Destroy()end end end end end ay=false StatChanged(aP)end
function RemoveAllStats(aO)for aP,aQ in ipairs(ac)do StatRemoved(aQ,aO)end end
function GetScoreValue(aO)if aO:IsA'DoubleConstrainedValue'or aO:IsA
'IntConstrainedValue'then return aO.ConstrainedValue elseif aO:IsA'BoolValue'
then if aO.Value then return 1 else return 0 end else return aO.Value end end
function MakeScoreEntry(aO,aP,aQ)if not aQ:FindFirstChild'PlayerScore'then
return end local aR,aS=aQ:FindFirstChild'PlayerScore':Clone(),nil wait()if aO[
'Player']:FindFirstChild'leaderstats'and aO['Player'].leaderstats:
FindFirstChild(aP['Name'])then aS=aO['Player']:FindFirstChild'leaderstats':
FindFirstChild(aP['Name'])else return end if not aO['Player'].Parent then return
end aR.Name=aP['Name']aR.Text=tostring(GetScoreValue(aS))if aP['Name']==ac[1][
'Name']then debugprint'changing score'aO['Score']=GetScoreValue(aS)if aO[
'Player']==g then p.Text=tostring(GetScoreValue(aS))end end aS.Changed:connect(
function()if not aS.Parent then return end if aP['Name']==ac[1]['Name']then aO[
'Score']=GetScoreValue(aS)if aO['Player']==g then p.Text=tostring(GetScoreValue(
aS))end end aR.Text=tostring(GetScoreValue(aS))BaseUpdate()end)return aR end
function CreateStatTitle(aO)local aP=H:FindFirstChild'PlayerScore':Clone()aP.
Name=aO aP.Text=aO if E.Value then aP.TextTransparency=0 else aP.
TextTransparency=1 end aP.Parent=C end function RecreateScoreColumns(aO)while ay
do debugprint'In Adding Stat Lock2'wait(3.333333333333333E-2)end ay=true local
aO=5 local aP,aQ=aO,0 for aR=#ac,1,-1 do local aS=ac[aR]aQ=0 for aT,aU in
ipairs(aN)do local aV,aW=aU['Frame'],aU['Player']if not aV:FindFirstChild(aS[
'Name'])then local aX=MakeScoreEntry(aU,aS,aV)if aX then debugprint('adding '..
aX.Name..' to '..aU['Player'].Name)aX.Parent=aV if aU['MyTeam']and aU['MyTeam']
~=ag and not aU['MyTeam']['Frame']:FindFirstChild(aS['Name'])then local aY=aX:
Clone()aY.Parent=aU['MyTeam']['Frame']end end end aS['XOffset']=aO if aV:
FindFirstChild(aS['Name'])then aQ=math.max(aQ,aV[aS['Name']].TextBounds.X)end
end if G.Value then aQ=math.max(aQ,C[aS['Name']].TextBounds.X)C[aS['Name']]:
TweenPosition(UDim2.new(at,-aO,0,0),'Out','Linear',c,true)else C[aS['Name']]:
TweenPosition(UDim2.new((0.4+((0.6/#ac)*(aR-1)))-1,0,0,0),'Out','Linear',c,true)
end aS['ColumnSize']=aQ aO=aO+ao+aQ aP=math.max(aO,aP)end ar=UDim2.new(0,an+aP-
aP=5 local aQ,aR=aP,0 for aS=#ac,1,-1 do local aT=ac[aS]aR=0 for aU,aV in
ipairs(aO)do local aW,aX=aV['Frame'],aV['Player']if not aW:FindFirstChild(aT[
'Name'])then local aY=MakeScoreEntry(aV,aT,aW)if aY then debugprint('adding '..
aY.Name..' to '..aV['Player'].Name)aY.Parent=aW if aV['MyTeam']and aV['MyTeam']
~=ag and not aV['MyTeam']['Frame']:FindFirstChild(aT['Name'])then local aZ=aY:
Clone()aZ.Parent=aV['MyTeam']['Frame']end end end aT['XOffset']=aP if aW:
FindFirstChild(aT['Name'])then aR=math.max(aR,aW[aT['Name']].TextBounds.X)end
end if G.Value then aR=math.max(aR,C[aT['Name']].TextBounds.X)C[aT['Name']]:
TweenPosition(UDim2.new(at,-aP,0,0),'Out','Linear',c,true)else C[aT['Name']]:
TweenPosition(UDim2.new((0.4+((0.6/#ac)*(aS-1)))-1,0,0,0),'Out','Linear',c,true)
end aT['ColumnSize']=aR aP=aP+ao+aR aQ=math.max(aP,aQ)end ar=UDim2.new(0,an+aQ-
ao,0,800)as=UDim2.new(1,-ar.X.Offset,as.Y.Scale,0)UpdateHeaderNameSize()
UpdateMaximize()ay=false end function ToggleMinimize()D.Value=not D.Value
UpdateStatNames()end function ToggleMaximize()E.Value=not E.Value
@ -337,123 +331,122 @@ UDim2.new(0,0,0,0),'Out','Linear',c*1.2,true)k.Size=UDim2.new(1,0,m,0)t.Image=
'http://www.roblox.com/asset/?id=94692731'else if not E.Value then j:
TweenSizeAndPosition(ar,as,'Out','Linear',c*1.2,true)end au=math.min(math.max(au
,-1),-1+(#ai*I.Size.Y.Scale))UpdateScrollPosition()v.Position=UDim2.new(0,0,au,0
)local aN=(au+v.Size.Y.Scale)r.Position=UDim2.new(0,0,aN,0)k.Size=UDim2.new(1,0,
aN+m,0)t.Image='http://www.roblox.com/asset/?id=94825585'end end function
UpdateMaximize()if E.Value then for aN=1,#ac,1 do local aO=ac[aN]C[aO['Name']]:
TweenPosition(UDim2.new(0.4+((0.6/#ac)*(aN-1))-1,0,0,0),'Out','Linear',c,true)
)local aO=(au+v.Size.Y.Scale)r.Position=UDim2.new(0,0,aO,0)k.Size=UDim2.new(1,0,
aO+m,0)t.Image='http://www.roblox.com/asset/?id=94825585'end end function
UpdateMaximize()if E.Value then for aO=1,#ac,1 do local aP=ac[aO]C[aP['Name']]:
TweenPosition(UDim2.new(0.4+((0.6/#ac)*(aO-1))-1,0,0,0),'Out','Linear',c,true)
end if D.Value then ToggleMinimize()else UpdateMinimize()end j:
TweenSizeAndPosition(ap,aq,'Out','Linear',c*1.2,true)p:TweenPosition(UDim2.new(0
,0,o.Position.Y.Scale,0),'Out','Linear',c*1.2,true)o:TweenPosition(UDim2.new(-
0.1,-p.TextBounds.x,o.Position.Y.Scale,0),'Out','Linear',c*1.2,true)l.Background
.Image='http://www.roblox.com/asset/?id='..b['LargeHeader']r.Background.Image=
'http://www.roblox.com/asset/?id='..b['LargeBottom']for aN,aO in ipairs(ai)do if
(aN%2)~=1 then aO.Background.Image='http://www.roblox.com/asset/?id='..b[
'LargeDark']else aO.Background.Image='http://www.roblox.com/asset/?id='..b[
'LargeLight']end end for aP,aQ in ipairs(ah)do if aQ:FindFirstChild
'ClickListener'then aQ.ClickListener.Size=UDim2.new(0.974,0,aQ.ClickListener.
Size.Y.Scale,0)end for aR=1,#ac,1 do local aS=ac[aR]if aQ:FindFirstChild(aS[
'Name'])then aQ[aS['Name']]:TweenPosition(UDim2.new(0.4+((0.6/#ac)*(aR-1))-1,0,0
,0),'Out','Linear',c,true)end end end for aR,aS in ipairs(ae)do WaitForChild(aS[
'Frame'],'TitleFrame').Size=UDim2.new(0.38,0,aS['Frame'].TitleFrame.Size.Y.Scale
,0)end for aT,aU in ipairs(af)do WaitForChild(aU['Frame'],'TitleFrame').Size=
UDim2.new(0.38,0,aU['Frame'].TitleFrame.Size.Y.Scale,0)end else if not D.Value
'http://www.roblox.com/asset/?id='..b['LargeBottom']for aO,aP in ipairs(ai)do if
(aO%2)~=1 then aP.Background.Image='http://www.roblox.com/asset/?id='..b[
'LargeDark']else aP.Background.Image='http://www.roblox.com/asset/?id='..b[
'LargeLight']end end for aQ,aR in ipairs(ah)do if aR:FindFirstChild
'ClickListener'then aR.ClickListener.Size=UDim2.new(0.974,0,aR.ClickListener.
Size.Y.Scale,0)end for aS=1,#ac,1 do local aT=ac[aS]if aR:FindFirstChild(aT[
'Name'])then aR[aT['Name']]:TweenPosition(UDim2.new(0.4+((0.6/#ac)*(aS-1))-1,0,0
,0),'Out','Linear',c,true)end end end for aS,aT in ipairs(ae)do WaitForChild(aT[
'Frame'],'TitleFrame').Size=UDim2.new(0.38,0,aT['Frame'].TitleFrame.Size.Y.Scale
,0)end for aU,aV in ipairs(af)do WaitForChild(aV['Frame'],'TitleFrame').Size=
UDim2.new(0.38,0,aV['Frame'].TitleFrame.Size.Y.Scale,0)end else if not D.Value
then j:TweenSizeAndPosition(ar,as,'Out','Linear',c*1.2,true)end p:TweenPosition(
UDim2.new(0,0,0.4,0),'Out','Linear',c*1.2,true)o:TweenPosition(UDim2.new(0,0,o.
Position.Y.Scale,0),'Out','Linear',c*1.2,true)l.Background.Image=
'http://www.roblox.com/asset/?id='..b['NormalHeader']r.Background.Image=
'http://www.roblox.com/asset/?id='..b['NormalBottom']for aN,aQ in ipairs(ai)do
if aN%2~=1 then aQ.Background.Image='http://www.roblox.com/asset/?id='..b[
'midDark']else aQ.Background.Image='http://www.roblox.com/asset/?id='..b[
'midLight']end end for aT,aU in ipairs(ah)do if aU:FindFirstChild'ClickListener'
then aU.ClickListener.Size=UDim2.new(0.96,0,aU.ClickListener.Size.Y.Scale,0)for
aV=1,#ac,1 do local aW=ac[aV]if aU:FindFirstChild(aW['Name'])and aW['XOffset']
then aU[aW['Name']]:TweenPosition(UDim2.new(at,-aW['XOffset'],0,0),'Out',
'Linear',c,true)end end end end for aV,aW in ipairs(af)do WaitForChild(aW[
'Frame'],'TitleFrame').Size=UDim2.new(0,an*0.9,aW['Frame'].TitleFrame.Size.Y.
Scale,0)end for aX,aY in ipairs(ae)do WaitForChild(aY['Frame'],'TitleFrame').
Size=UDim2.new(0,an*0.9,aY['Frame'].TitleFrame.Size.Y.Scale,0)end end end
function UpdateStatNames()if not G.Value or D.Value then CloseNames()else
ExpandNames()end end function ExpandNames()if#ac~=0 then for aT,aX in pairs(C:
GetChildren())do Spawn(function()TweenProperty(aX,'TextTransparency',aX.
TextTransparency,0,c)end)end m=0.09 l:TweenSizeAndPosition(UDim2.new(l.Size.X.
Scale,l.Size.X.Offset,m,0),l.Position,'Out','Linear',c*1.2,true)u:TweenPosition(
UDim2.new(u.Position.X.Scale,0,m,0),'Out','Linear',c*1.2,true)q:TweenPosition(
UDim2.new(0,0,m,0),'Out','Linear',c*1.2,true)end end function CloseNames()if#ac
~=0 then m=0.07 if not E.Value then for aT,aX in pairs(C:GetChildren())do Spawn(
function()TweenProperty(aX,'TextTransparency',aX.TextTransparency,1,c)end)end
end q:TweenPosition(UDim2.new(0,0,m,0),'Out','Linear',c*1.2,true)l:
TweenSizeAndPosition(UDim2.new(l.Size.X.Scale,l.Size.X.Offset,m,0),l.Position,
'Out','Linear',c*1.2,true)u:TweenPosition(UDim2.new(u.Position.X.Scale,0,m,0),
'Out','Linear',c*1.2,true)end end function OnScrollWheelMove(aT)if not(F.Value
or D.Value or aB)then local aX=y.Position local aY=math.max(math.min(aX.Y.Scale+
aT,GetMaxScroll()),GetMinScroll())y.Position=UDim2.new(aX.X.Scale,aX.X.Offset,aY
,aX.Y.Offset)UpdateScrollPosition()end end function AttachScrollWheel()if aE
then return end aE={}table.insert(aE,h.WheelForward:connect(function()
'http://www.roblox.com/asset/?id='..b['NormalBottom']for aO,aR in ipairs(ai)do
if aO%2~=1 then aR.Background.Image='http://www.roblox.com/asset/?id='..b[
'midDark']else aR.Background.Image='http://www.roblox.com/asset/?id='..b[
'midLight']end end for aU,aV in ipairs(ah)do if aV:FindFirstChild'ClickListener'
then aV.ClickListener.Size=UDim2.new(0.96,0,aV.ClickListener.Size.Y.Scale,0)for
aW=1,#ac,1 do local aX=ac[aW]if aV:FindFirstChild(aX['Name'])and aX['XOffset']
then aV[aX['Name']]:TweenPosition(UDim2.new(at,-aX['XOffset'],0,0),'Out',
'Linear',c,true)end end end end for aW,aX in ipairs(af)do WaitForChild(aX[
'Frame'],'TitleFrame').Size=UDim2.new(0,an*0.9,aX['Frame'].TitleFrame.Size.Y.
Scale,0)end for aY,aZ in ipairs(ae)do WaitForChild(aZ['Frame'],'TitleFrame').
Size=UDim2.new(0,an*0.9,aZ['Frame'].TitleFrame.Size.Y.Scale,0)end end end
function ExpandNames()if#ac~=0 then for aU,aV in pairs(C:GetChildren())do Spawn(
function()TweenProperty(aV,'TextTransparency',aV.TextTransparency,0,c)end)end m=
0.09 l:TweenSizeAndPosition(UDim2.new(l.Size.X.Scale,l.Size.X.Offset,m,0),l.
Position,'Out','Linear',c*1.2,true)u:TweenPosition(UDim2.new(u.Position.X.Scale,
0,m,0),'Out','Linear',c*1.2,true)q:TweenPosition(UDim2.new(0,0,m,0),'Out',
'Linear',c*1.2,true)end end function CloseNames()if#ac~=0 then m=0.07 if not E.
Value then for aU,aV in pairs(C:GetChildren())do Spawn(function()TweenProperty(
aV,'TextTransparency',aV.TextTransparency,1,c)end)end end q:TweenPosition(UDim2.
new(0,0,m,0),'Out','Linear',c*1.2,true)l:TweenSizeAndPosition(UDim2.new(l.Size.X
.Scale,l.Size.X.Offset,m,0),l.Position,'Out','Linear',c*1.2,true)u:
TweenPosition(UDim2.new(u.Position.X.Scale,0,m,0),'Out','Linear',c*1.2,true)end
end function UpdateStatNames()if not G.Value or D.Value then CloseNames()else
ExpandNames()end end function OnScrollWheelMove(aU)if not(F.Value or D.Value or
aB)then local aV=y.Position local aY=math.max(math.min(aV.Y.Scale+aU,
GetMaxScroll()),GetMinScroll())y.Position=UDim2.new(aV.X.Scale,aV.X.Offset,aY,aV
.Y.Offset)UpdateScrollPosition()end end function AttachScrollWheel()if aE then
return end aE={}table.insert(aE,h.WheelForward:connect(function()
OnScrollWheelMove(0.05)end))table.insert(aE,h.WheelBackward:connect(function()
OnScrollWheelMove(-5E-2)end))end function DetachScrollWheel()if aE then for aT,
aX in pairs(aE)do aX:disconnect()end end aE=nil end k.MouseEnter:connect(
OnScrollWheelMove(-5E-2)end))end function DetachScrollWheel()if aE then for aU,
aV in pairs(aE)do aV:disconnect()end end aE=nil end k.MouseEnter:connect(
function()if not(D.Value or F.Value)then AttachScrollWheel()end end)k.MouseLeave
:connect(function()DetachScrollWheel()end)function UpdateScrollBarVisibility()if
AreAllEntriesOnScreen()then x.BackgroundTransparency=1 else x.
BackgroundTransparency=0 UpdateScrollBarSize()end end function
UpdateScrollBarSize()local aT,aX=#ai*H.Size.Y.Scale,(v.Position.Y.Scale+1)x.Size
=UDim2.new(1,0,aX/aT,0)end function UpdateScrollPosition()local aT,aX=
GetMinScroll(),GetMaxScroll()local aY,aZ=aX-aT,math.max(math.min(y.Position.Y.
Scale,aX),aT)y.Position=UDim2.new(y.Position.X.Scale,y.Position.X.Offset,aZ,y.
UpdateScrollBarSize()local aU,aV=#ai*H.Size.Y.Scale,(v.Position.Y.Scale+1)x.Size
=UDim2.new(1,0,aV/aU,0)end function UpdateScrollPosition()local aU,aV=
GetMinScroll(),GetMaxScroll()local aY,aZ=aV-aU,math.max(math.min(y.Position.Y.
Scale,aV),aU)y.Position=UDim2.new(y.Position.X.Scale,y.Position.X.Offset,aZ,y.
Position.Y.Offset)local a_=1-x.Size.Y.Scale x.Position=UDim2.new(0,0,a_-(a_*((y.
Position.Y.Scale-aT)/aY)),0)end function StartDrag(aT,aX,aY)local aZ,a_,a0,a1=
tick(),false,true,WaitForChild(aT['Frame'],'ClickListener')local function
dragExit()a_=true if aT['Player']and aw and a0 and aT['Player']~=g and aw.userId
>1 and g.userId>1 then ActivatePlayerEntryPanel(aT)end end local a2,a3=nil,y.
Position local function dragpoll(a4,a5)if not a2 then a2=AbsoluteToPercent(a4,a5
).Y end local a6=AbsoluteToPercent(a4,a5).Y debugprint('drag dist:'..Vector2.
new(aX-a4,aY-a5).magnitude)if Vector2.new(aX-a4,aY-a5).magnitude>d then a0=false
end local a7=math.max(math.min(a3.Y.Scale+(a6-a2),GetMaxScroll()),GetMinScroll()
)y.Position=UDim2.new(a3.X.Scale,a3.X.Offset,a7,a3.Y.Offset)
UpdateScrollPosition()end WaitForClick(i,dragpoll,dragExit)end function
StartMinimizeDrag()Delay(0,function()local aT=tick()debugprint'Got Click2'local
aX=false local function dragExit()if tick()-aT<0.25 then ToggleMinimize()else aG
=true if D.Value then ToggleMinimize()end end aX=true end local aY,aZ=nil,au
local function dragpoll(a_,a0)if not D.Value then if not aY then aY=
AbsoluteToPercent(a_,a0).Y end local a1,a2=AbsoluteToPercent(a_,a0).Y,nil a2=
math.min(math.max(aZ+(a1-aY),-1),-1+(#ai*I.Size.Y.Scale))au=a2 UpdateMinimize()w
.Size=UDim2.new(w.Size.X.Scale,0,(au+v.Size.Y.Scale),0)w.Position=UDim2.new(w.
Position.X.Scale,0,1-w.Size.Y.Scale,0)UpdateScrollBarSize()UpdateScrollPosition(
)UpdateScrollBarVisibility()end end Spawn(function()WaitForClick(i,dragpoll,
dragExit)end)end)end E.Value=false D.Value=false E.Changed:connect(
UpdateMaximize)D.Changed:connect(UpdateMinimize)s.MouseButton1Down:connect(
function()if(time()-ak<al)or aB then return end ak=time()if F.Value then
UnTabify()else StartMinimizeDrag()end end)n.MouseButton1Click:connect(function()
if(time()-ak<al)or aB then return end ak=time()if F.Value then UnTabify()elseif
not G.Value then G.Value=true BaseUpdate()else ToggleMaximize()end end)n.
MouseButton2Click:connect(function()if(time()-ak<al)or aB then return end ak=
time()if F.Value then UnTabify()elseif E.Value then ToggleMaximize()elseif G.
Value then G.Value=false BaseUpdate()else Tabify()end end)function
AddMiddleBGFrame()local aT=I:Clone()aT.Position=UDim2.new(0.5,0,(#ai*aT.Size.Y.
Scale),0)if(#ai+1)%2~=1 then if E.Value then aT.Background.Image=
'http://www.roblox.com/asset/?id='..b['LargeDark']else aT.Background.Image=
'http://www.roblox.com/asset/?id='..b['midDark']end else if E.Value then aT.
Background.Image='http://www.roblox.com/asset/?id='..b['LargeLight']else aT.
Background.Image='http://www.roblox.com/asset/?id='..b['midLight']end end aT.
Parent=y table.insert(ai,aT)if#ai<aF and not aG then au=-1+(#ai*I.Size.Y.Scale)
Position.Y.Scale-aU)/aY)),0)end function StartDrag(aU,aV,aY)local aZ=true
WaitForChild(aU['Frame'],'ClickListener')local function dragExit()if aU['Player'
]and aw and aZ and aU['Player']~=g and aw.userId>1 and g.userId>1 then
ActivatePlayerEntryPanel(aU)end end local a_,a0=nil,y.Position local function
dragpoll(a1,a2)if not a_ then a_=AbsoluteToPercent(a1,a2).Y end local a3=
AbsoluteToPercent(a1,a2).Y debugprint('drag dist:'..Vector2.new(aV-a1,aY-a2).
magnitude)if Vector2.new(aV-a1,aY-a2).magnitude>d then aZ=false end local a4=
math.max(math.min(a0.Y.Scale+(a3-a_),GetMaxScroll()),GetMinScroll())y.Position=
UDim2.new(a0.X.Scale,a0.X.Offset,a4,a0.Y.Offset)UpdateScrollPosition()end
WaitForClick(i,dragpoll,dragExit)end function StartMinimizeDrag()Delay(0,
function()local aU=tick()debugprint'Got Click2'local function dragExit()if tick(
)-aU<0.25 then ToggleMinimize()else aG=true if D.Value then ToggleMinimize()end
end end local aV,aY=nil,au local function dragpoll(aZ,a_)if not D.Value then if
not aV then aV=AbsoluteToPercent(aZ,a_).Y end local a0,a1=AbsoluteToPercent(aZ,
a_).Y,nil a1=math.min(math.max(aY+(a0-aV),-1),-1+(#ai*I.Size.Y.Scale))au=a1
UpdateMinimize()w.Size=UDim2.new(w.Size.X.Scale,0,(au+v.Size.Y.Scale),0)w.
Position=UDim2.new(w.Position.X.Scale,0,1-w.Size.Y.Scale,0)UpdateScrollBarSize()
UpdateScrollPosition()UpdateScrollBarVisibility()end end Spawn(function()
WaitForClick(i,dragpoll,dragExit)end)end)end E.Value=false D.Value=false E.
Changed:connect(UpdateMaximize)D.Changed:connect(UpdateMinimize)s.
MouseButton1Down:connect(function()if(time()-ak<al)or aB then return end ak=
time()if F.Value then UnTabify()else StartMinimizeDrag()end end)n.
MouseButton1Click:connect(function()if(time()-ak<al)or aB then return end ak=
time()if F.Value then UnTabify()elseif not G.Value then G.Value=true BaseUpdate(
)else ToggleMaximize()end end)n.MouseButton2Click:connect(function()if(time()-ak
<al)or aB then return end ak=time()if F.Value then UnTabify()elseif E.Value then
ToggleMaximize()elseif G.Value then G.Value=false BaseUpdate()else Tabify()end
end)function AddMiddleBGFrame()local aU=I:Clone()aU.Position=UDim2.new(0.5,0,(#
ai*aU.Size.Y.Scale),0)if(#ai+1)%2~=1 then if E.Value then aU.Background.Image=
'http://www.roblox.com/asset/?id='..b['LargeDark']else aU.Background.Image=
'http://www.roblox.com/asset/?id='..b['midDark']end else if E.Value then aU.
Background.Image='http://www.roblox.com/asset/?id='..b['LargeLight']else aU.
Background.Image='http://www.roblox.com/asset/?id='..b['midLight']end end aU.
Parent=y table.insert(ai,aU)if#ai<aF and not aG then au=-1+(#ai*I.Size.Y.Scale)
end if not D.Value then UpdateMinimize()end end function RemoveMiddleBGFrame()ai
[#ai]:Destroy()table.remove(ai,#ai)if not D.Value then UpdateMinimize()end end
local aT={'Size8','Size9','Size10','Size11','Size12','Size14','Size24','Size36',
'Size48'}function ChangeHeaderName(aX)o.Text=aX UpdateHeaderNameSize()end
function UpdateHeaderNameSize()local aX=o:Clone()aX.Position=UDim2.new(2,0,2,0)
aX.Parent=i local aY=7 aX.FontSize=aT[aY]Delay(0.2,function()while aX.TextBounds
.x==0 do wait(3.333333333333333E-2)end while aX.TextBounds.x-ar.X.Offset>1 do aY
=aY-1 aX.FontSize=aT[aY]wait(0.2)end o.FontSize=aX.FontSize aX:Destroy()end)end
i.Changed:connect(UpdateHeaderNameSize)function LeaderstatsAdded(aX)local aY=aX[
'Player']for aZ,a_ in pairs(aY.leaderstats:GetChildren())do StatAdded(a_,aX)end
aY.leaderstats.ChildAdded:connect(function(a0)StatAdded(a0,aX)end)aY.leaderstats
.ChildRemoved:connect(function(a0)StatRemoved(a0,aX)end)end function
LeaderstatsRemoved(aX,aY)while ax do debugprint('waiting to insert '..aY[
local aU={'Size8','Size9','Size10','Size11','Size12','Size14','Size24','Size36',
'Size48'}function ChangeHeaderName(aV)o.Text=aV UpdateHeaderNameSize()end
function UpdateHeaderNameSize()local aV=o:Clone()aV.Position=UDim2.new(2,0,2,0)
aV.Parent=i local aY=7 aV.FontSize=aU[aY]Delay(0.2,function()while aV.TextBounds
.x==0 do wait(3.333333333333333E-2)end while aV.TextBounds.x-ar.X.Offset>1 do aY
=aY-1 aV.FontSize=aU[aY]wait(0.2)end o.FontSize=aV.FontSize aV:Destroy()end)end
i.Changed:connect(UpdateHeaderNameSize)function LeaderstatsAdded(aV)local aY=aV[
'Player']for aZ,a_ in pairs(aY.leaderstats:GetChildren())do StatAdded(a_,aV)end
aY.leaderstats.ChildAdded:connect(function(a0)StatAdded(a0,aV)end)aY.leaderstats
.ChildRemoved:connect(function(a0)StatRemoved(a0,aV)end)end function
LeaderstatsRemoved(aV,aY)while ax do debugprint('waiting to insert '..aY[
'Player'].Name)wait(3.333333333333333E-2)end ax=true RemoveAllStats(aY)ax=false
end function ClosePopUpPanel()if av then local aX=av['Frame']Spawn(function()
TweenProperty(aX,'BackgroundTransparency',0.5,1,c)end)end A:TweenPosition(UDim2.
end function ClosePopUpPanel()if av then local aV=av['Frame']Spawn(function()
TweenProperty(aV,'BackgroundTransparency',0.5,1,c)end)end A:TweenPosition(UDim2.
new(1,0,0,0),'Out','Linear',c,true)wait(0.1)aB=false av=nil end function
InitMovingPanel(aX,aY)z.Parent=i if A then A:Destroy()end A=B:Clone()A.Parent=z
InitMovingPanel(aV,aY)z.Parent=i if A then A:Destroy()end A=B:Clone()A.Parent=z
local aZ,a_=2,GetFriendStatus(aY)debugprint(tostring(a_))local a0,a1=aM and g.
PersonalServerRank>=aL['Admin']and g.PersonalServerRank>aw.PersonalServerRank,
MakePopupButton(A,'Report Player',0)a1.MouseButton1Click:connect(function()
@ -476,112 +469,112 @@ a4,a5,a6)end)a5.MouseButton1Click:connect(function()OnPrivilegeLevelSelect(aY,aL
OnPrivilegeLevelSelect(aY,aL['Admin'],a3,a4,a5,a6)end)HighlightMyRank(aw,a3,a4,
a5,a6)end A:TweenPosition(UDim2.new(0,0,0,0),'Out','Linear',c,true)Delay(0,
function()local a3 a3=h.Button1Down:connect(function()a3:disconnect()
ClosePopUpPanel()end)end)local a3=aX['Frame']Spawn(function()while aB do z.
ClosePopUpPanel()end)end)local a3=aV['Frame']Spawn(function()while aB do z.
Position=UDim2.new(0,a3.AbsolutePosition.X-z.Size.X.Offset,0,a3.AbsolutePosition
.Y)wait()end end)end function OnPlayerEntrySelect(aX,aY,aZ)if not aB then av=aX
aw=aX['Player']StartDrag(aX,aY,aZ)end end function ActivatePlayerEntryPanel(aX)
aX['Frame'].BackgroundColor3=Color3.new(0,1,1)Spawn(function()TweenProperty(aX[
'Frame'],'BackgroundTransparency',1,0.5,0.5)end)aB=true InitMovingPanel(aX,aX[
.Y)wait()end end)end function OnPlayerEntrySelect(aV,aY,aZ)if not aB then av=aV
aw=aV['Player']StartDrag(aV,aY,aZ)end end function ActivatePlayerEntryPanel(aV)
aV['Frame'].BackgroundColor3=Color3.new(0,1,1)Spawn(function()TweenProperty(aV[
'Frame'],'BackgroundTransparency',1,0.5,0.5)end)aB=true InitMovingPanel(aV,aV[
'Player'])end function PlayerListModeUpdate()RecreateScoreColumns(ae)table.sort(
ae,PlayerSortFunction)for aX,aY in ipairs(ae)do ah[aX]=aY['Frame']end for aZ=#ae
+1,#ah,1 do ah[aZ]=nil end UpdateMinimize()end function InsertPlayerFrame(aX)
while ax do debugprint('waiting to insert '..aX.Name)wait(3.333333333333333E-2)
ae,PlayerSortFunction)for aV,aY in ipairs(ae)do ah[aV]=aY['Frame']end for aZ=#ae
+1,#ah,1 do ah[aZ]=nil end UpdateMinimize()end function InsertPlayerFrame(aV)
while ax do debugprint('waiting to insert '..aV.Name)wait(3.333333333333333E-2)
end ax=true local aY=H:Clone()WaitForChild(WaitForChild(aY,'TitleFrame'),'Title'
).Text=aX.Name aY.Position=UDim2.new(1,0,(#ah*aY.Size.Y.Scale),0)local aZ=
GetFriendStatus(aX)aY:FindFirstChild'BCLabel'.Image=getMembershipTypeIcon(aX.
MembershipType,aX.Name)aY:FindFirstChild'FriendLabel'.Image=getFriendStatusIcon(
aZ)aY.Name=aX.Name WaitForChild(WaitForChild(aY,'TitleFrame'),'Title').Text=aX.
).Text=aV.Name aY.Position=UDim2.new(1,0,(#ah*aY.Size.Y.Scale),0)local aZ=
GetFriendStatus(aV)aY:FindFirstChild'BCLabel'.Image=getMembershipTypeIcon(aV.
MembershipType,aV.Name)aY:FindFirstChild'FriendLabel'.Image=getFriendStatusIcon(
aZ)aY.Name=aV.Name WaitForChild(WaitForChild(aY,'TitleFrame'),'Title').Text=aV.
Name aY.FriendLabel.Position=aY.FriendLabel.Position+UDim2.new(0,17,0,0)aY.
TitleFrame.Title.Position=aY.TitleFrame.Title.Position+UDim2.new(0,17,0,0)if aY:
FindFirstChild'FriendLabel'.Image~=''then aY.TitleFrame.Title.Position=aY.
TitleFrame.Title.Position+UDim2.new(0,17,0,0)end if aX.Name==g.Name then aY.
TitleFrame.Title.Position+UDim2.new(0,17,0,0)end if aV.Name==g.Name then aY.
TitleFrame.Title.Font='ArialBold'aY.PlayerScore.Font='ArialBold'
ChangeHeaderName(aX.Name)local a_=aY.TitleFrame.Title:Clone()a_.TextColor3=
ChangeHeaderName(aV.Name)local a_=aY.TitleFrame.Title:Clone()a_.TextColor3=
Color3.new(0,0,0)a_.TextTransparency=0 a_.ZIndex=2 a_.Position=aY.TitleFrame.
Title.Position+UDim2.new(0,1,0,1)a_.Name='DropShadow'a_.Parent=aY.TitleFrame
else end aY.TitleFrame.Title.Font='ArialBold'aY.Parent=y aY:TweenPosition(UDim2.
new(0.5,0,(#ah*aY.Size.Y.Scale),0),'Out','Linear',c,true)UpdateMinimize()local
a_={}a_['Frame']=aY a_['Player']=aX a_['ID']=ad ad=ad+1 table.insert(ae,a_)if#af
~=0 then if aX.Neutral then a_['MyTeam']=nil if not ag then AddNeutralTeam()else
Title.Position+UDim2.new(0,1,0,1)a_.Name='DropShadow'a_.Parent=aY.TitleFrame end
aY.TitleFrame.Title.Font='ArialBold'aY.Parent=y aY:TweenPosition(UDim2.new(0.5,0
,(#ah*aY.Size.Y.Scale),0),'Out','Linear',c,true)UpdateMinimize()local a_={}a_[
'Frame']=aY a_['Player']=aV a_['ID']=ad ad=ad+1 table.insert(ae,a_)if#af~=0 then
if aV.Neutral then a_['MyTeam']=nil if not ag then AddNeutralTeam()else
AddPlayerToTeam(ag,a_)end else local a0=false for a1,a2 in ipairs(af)do if a2[
'MyTeam'].TeamColor==aX.TeamColor then AddPlayerToTeam(a2,a_)a_['MyTeam']=a2 a0=
'MyTeam'].TeamColor==aV.TeamColor then AddPlayerToTeam(a2,a_)a_['MyTeam']=a2 a0=
true end end if not a0 then a_['MyTeam']=nil if not ag then AddNeutralTeam()else
AddPlayerToTeam(ag,a_)end a_['MyTeam']=ag end end end if aX:FindFirstChild
'leaderstats'then LeaderstatsAdded(a_)end aX.ChildAdded:connect(function(a0)if
AddPlayerToTeam(ag,a_)end a_['MyTeam']=ag end end end if aV:FindFirstChild
'leaderstats'then LeaderstatsAdded(a_)end aV.ChildAdded:connect(function(a0)if
a0.Name=='leaderstats'then while ax do debugprint'in adding leaderstats lock'
wait(3.333333333333333E-2)end ax=true LeaderstatsAdded(a_)ax=false end end)aX.
ChildRemoved:connect(function(a0)if aX==g and a0.Name=='leaderstats'then
LeaderstatsRemoved(a0,a_)end end)aX.Changed:connect(function(a0)PlayerChanged(a_
wait(3.333333333333333E-2)end ax=true LeaderstatsAdded(a_)ax=false end end)aV.
ChildRemoved:connect(function(a0)if aV==g and a0.Name=='leaderstats'then
LeaderstatsRemoved(a0,a_)end end)aV.Changed:connect(function(a0)PlayerChanged(a_
,a0)end)local a0=WaitForChild(aY,'ClickListener')a0.Active=true a0.
MouseButton1Down:connect(function(a1,a2)OnPlayerEntrySelect(a_,a1,a2)end)
AddMiddleBGFrame()BaseUpdate()ax=false end function RemovePlayerFrame(aX)while
AddMiddleBGFrame()BaseUpdate()ax=false end function RemovePlayerFrame(aV)while
ax do debugprint'in removing player frame lock'wait(3.333333333333333E-2)end ax=
true local aY for aZ,a_ in ipairs(ae)do if aX==a_['Player']then if z.Parent==a_[
true local aY for aZ,a_ in ipairs(ae)do if aV==a_['Player']then if z.Parent==a_[
'Frame']then z.Parent=nil end a_['Frame']:Destroy()aY=a_['MyTeam']table.remove(
ae,aZ)end end if aY then for a0,a1 in ipairs(aY['MyPlayers'])do if a1['Player']
==aX then RemovePlayerFromTeam(aY,a0)end end end RemoveMiddleBGFrame()
==aV then RemovePlayerFromTeam(aY,a0)end end end RemoveMiddleBGFrame()
UpdateMinimize()BaseUpdate()ax=false end f.ChildRemoved:connect(
RemovePlayerFrame)function UnrollTeams(aX,aY)local aZ=0 if ag and not ag[
RemovePlayerFrame)function UnrollTeams(aV,aY)local aZ=0 if ag and not ag[
'IsHidden']then for a_,a0 in ipairs(ag['MyPlayers'])do aZ=aZ+1 aY[aZ]=a0['Frame'
]end aZ=aZ+1 aY[aZ]=ag['Frame']end for a_,a0 in ipairs(aX)do if not a0[
]end aZ=aZ+1 aY[aZ]=ag['Frame']end for a_,a0 in ipairs(aV)do if not a0[
'IsHidden']then for a1,a2 in ipairs(a0.MyPlayers)do aZ=aZ+1 aY[aZ]=a2['Frame']
end aZ=aZ+1 aY[aZ]=a0['Frame']end end for a1=aZ+1,#aY,1 do aY[a1]=nil end end
function TeamSortFunc(aX,aY)if aX['TeamScore']==aY['TeamScore']then return aX[
'ID']<aY['ID']end if not aX['TeamScore']then return false end if not aY[
'TeamScore']then return true end return aX['TeamScore']<aY['TeamScore']end
function SortTeams(aX)for aY,aZ in ipairs(aX)do table.sort(aZ['MyPlayers'],
PlayerSortFunction)AddTeamScores(aZ)end table.sort(aX,TeamSortFunc)end function
function TeamSortFunc(aV,aY)if aV['TeamScore']==aY['TeamScore']then return aV[
'ID']<aY['ID']end if not aV['TeamScore']then return false end if not aY[
'TeamScore']then return true end return aV['TeamScore']<aY['TeamScore']end
function SortTeams(aV)for aY,aZ in ipairs(aV)do table.sort(aZ['MyPlayers'],
PlayerSortFunction)AddTeamScores(aZ)end table.sort(aV,TeamSortFunc)end function
TeamListModeUpdate()RecreateScoreColumns(ae)SortTeams(af)if ag then
AddTeamScores(ag)end UnrollTeams(af,ah)end function AddTeamScores(aX)for aY=1,#
ac,1 do local aZ,a_=ac[aY],0 for a0,a1 in ipairs(aX['MyPlayers'])do local a2=a1[
AddTeamScores(ag)end UnrollTeams(af,ah)end function AddTeamScores(aV)for aY=1,#
ac,1 do local aZ,a_=ac[aY],0 for a0,a1 in ipairs(aV['MyPlayers'])do local a2=a1[
'Player']:FindFirstChild'leaderstats'and a1['Player'].leaderstats:
FindFirstChild(aZ['Name'])if a2 and not a2:IsA'StringValue'then a_=a_+
GetScoreValue((a1['Player'].leaderstats)[aZ['Name']])end end if aX['Frame']:
FindFirstChild(aZ['Name'])then aX['Frame'][aZ['Name']].Text=tostring(a_)end end
UpdateMinimize()end function FindRemovePlayerFromTeam(aX)if aX['MyTeam']then for
aY,aZ in ipairs(aX['MyTeam']['MyPlayers'])do if aZ['Player']==aX['Player']then
RemovePlayerFromTeam(aX['MyTeam'],aY)return end end elseif ag then for aY,aZ in
ipairs(ag['MyPlayers'])do if aZ['Player']==aX['Player']then
GetScoreValue((a1['Player'].leaderstats)[aZ['Name']])end end if aV['Frame']:
FindFirstChild(aZ['Name'])then aV['Frame'][aZ['Name']].Text=tostring(a_)end end
UpdateMinimize()end function FindRemovePlayerFromTeam(aV)if aV['MyTeam']then for
aY,aZ in ipairs(aV['MyTeam']['MyPlayers'])do if aZ['Player']==aV['Player']then
RemovePlayerFromTeam(aV['MyTeam'],aY)return end end elseif ag then for aY,aZ in
ipairs(ag['MyPlayers'])do if aZ['Player']==aV['Player']then
RemovePlayerFromTeam(ag,aY)return end end end end function RemovePlayerFromTeam(
aX,aY)table.remove(aX['MyPlayers'],aY)if aX==ag and#aX['MyPlayers']==0 then
RemoveNeutralTeam()end end function AddPlayerToTeam(aX,aY)
FindRemovePlayerFromTeam(aY)table.insert(aX['MyPlayers'],aY)aY['MyTeam']=aX if
aX['IsHidden']then aX['Frame'].Parent=y AddMiddleBGFrame()end aX['IsHidden']=
false end function SetPlayerToTeam(aX)FindRemovePlayerFromTeam(aX)local aY=false
for aZ,a_ in ipairs(af)do if a_['MyTeam'].TeamColor==aX['Player'].TeamColor then
AddPlayerToTeam(a_,aX)aY=true end end if not aY and#(game.Teams:GetTeams())>0
then debugprint(aX['Player'].Name..'could not find team')aX['MyTeam']=nil if not
ag then AddNeutralTeam()else AddPlayerToTeam(ag,aX)end end end function
PlayerChanged(aX,aY)while aC do debugprint'in playerchanged lock'wait(
3.333333333333333E-2)end aC=true if aY=='Neutral'then if aX['Player'].Neutral
and#(game.Teams:GetTeams())>0 then debugprint(aX['Player'].Name..
'setting to neutral')FindRemovePlayerFromTeam(aX)aX['MyTeam']=nil if not ag then
debugprint(aX['Player'].Name..'creating neutral team')AddNeutralTeam()else
debugprint(aX['Player'].Name..'adding to neutral team')AddPlayerToTeam(ag,aX)end
elseif#(game.Teams:GetTeams())>0 then debugprint(aX['Player'].Name..
'has been set non-neutral')SetPlayerToTeam(aX)end BaseUpdate()elseif aY==
'TeamColor'and not aX['Player'].Neutral and aX['Player']~=aX['MyTeam']then
debugprint(aX['Player'].Name..'setting to new team')SetPlayerToTeam(aX)
BaseUpdate()elseif aY=='Name'or aY=='MembershipType'then aX['Frame']:
FindFirstChild'BCLabel'.Image=getMembershipTypeIcon(aX['Player'].MembershipType,
aX['Player'].Name)aX['Frame'].Name=aX['Player'].Name aX['Frame'].TitleFrame.
Title.Text=aX['Player'].Name if aX['Frame'].BCLabel.Image~=''then aX['Frame'].
TitleFrame.Title.Position=UDim2.new(0.01,30,0.1,0)end if aX['Player']==g then aX
['Frame'].TitleFrame.DropShadow.Text=aX['Player'].Name ChangeHeaderName(aX[
'Player'].Name)end BaseUpdate()end aC=false end function OnFriendshipChanged(aX,
aY)Delay(0.5,function()debugprint('friend status changed for:'..aX.Name..' '..
tostring(aY)..' vs '..tostring(GetFriendStatus(aX)))for aZ,a_ in ipairs(ae)do if
a_['Player']==aX then local a0=getFriendStatusIcon(aY)if a0==''and a_['Frame'].
aV,aY)table.remove(aV['MyPlayers'],aY)if aV==ag and#aV['MyPlayers']==0 then
RemoveNeutralTeam()end end function AddPlayerToTeam(aV,aY)
FindRemovePlayerFromTeam(aY)table.insert(aV['MyPlayers'],aY)aY['MyTeam']=aV if
aV['IsHidden']then aV['Frame'].Parent=y AddMiddleBGFrame()end aV['IsHidden']=
false end function SetPlayerToTeam(aV)FindRemovePlayerFromTeam(aV)local aY=false
for aZ,a_ in ipairs(af)do if a_['MyTeam'].TeamColor==aV['Player'].TeamColor then
AddPlayerToTeam(a_,aV)aY=true end end if not aY and#(game.Teams:GetTeams())>0
then debugprint(aV['Player'].Name..'could not find team')aV['MyTeam']=nil if not
ag then AddNeutralTeam()else AddPlayerToTeam(ag,aV)end end end function
PlayerChanged(aV,aY)while aC do debugprint'in playerchanged lock'wait(
3.333333333333333E-2)end aC=true if aY=='Neutral'then if aV['Player'].Neutral
and#(game.Teams:GetTeams())>0 then debugprint(aV['Player'].Name..
'setting to neutral')FindRemovePlayerFromTeam(aV)aV['MyTeam']=nil if not ag then
debugprint(aV['Player'].Name..'creating neutral team')AddNeutralTeam()else
debugprint(aV['Player'].Name..'adding to neutral team')AddPlayerToTeam(ag,aV)end
elseif#(game.Teams:GetTeams())>0 then debugprint(aV['Player'].Name..
'has been set non-neutral')SetPlayerToTeam(aV)end BaseUpdate()elseif aY==
'TeamColor'and not aV['Player'].Neutral and aV['Player']~=aV['MyTeam']then
debugprint(aV['Player'].Name..'setting to new team')SetPlayerToTeam(aV)
BaseUpdate()elseif aY=='Name'or aY=='MembershipType'then aV['Frame']:
FindFirstChild'BCLabel'.Image=getMembershipTypeIcon(aV['Player'].MembershipType,
aV['Player'].Name)aV['Frame'].Name=aV['Player'].Name aV['Frame'].TitleFrame.
Title.Text=aV['Player'].Name if aV['Frame'].BCLabel.Image~=''then aV['Frame'].
TitleFrame.Title.Position=UDim2.new(0.01,30,0.1,0)end if aV['Player']==g then aV
['Frame'].TitleFrame.DropShadow.Text=aV['Player'].Name ChangeHeaderName(aV[
'Player'].Name)end BaseUpdate()end aC=false end function OnFriendshipChanged(aV,
aY)Delay(0.5,function()debugprint('friend status changed for:'..aV.Name..' '..
tostring(aY)..' vs '..tostring(GetFriendStatus(aV)))for aZ,a_ in ipairs(ae)do if
a_['Player']==aV then local a0=getFriendStatusIcon(aY)if a0==''and a_['Frame'].
FriendLabel.Image~=''then a_['Frame'].TitleFrame.Title.Position=a_['Frame'].
TitleFrame.Title.Position-UDim2.new(0,17,0,0)elseif a0~=''and a_['Frame'].
FriendLabel.Image==''then a_['Frame'].TitleFrame.Title.Position=a_['Frame'].
TitleFrame.Title.Position+UDim2.new(0,17,0,0)debugprint('confirmed status:'..aX.
TitleFrame.Title.Position+UDim2.new(0,17,0,0)debugprint('confirmed status:'..aV.
Name)end a_['Frame'].FriendLabel.Image=a0 return end end end)end g.
FriendStatusChanged:connect(OnFriendshipChanged)function AddNeutralTeam()while
aD do debugprint'in neutral team 2 lock'wait()end aD=true local aX=Instance.new
'Team'aX.TeamColor=BrickColor.new'White'aX.Name='Neutral'local aY={}aY['MyTeam']
=aX aY['MyPlayers']={}aY['Frame']=H:Clone()WaitForChild(WaitForChild(aY['Frame']
,'TitleFrame'),'Title').Text=aX.Name aY['Frame'].TitleFrame.Position=UDim2.new(
aD do debugprint'in neutral team 2 lock'wait()end aD=true local aV=Instance.new
'Team'aV.TeamColor=BrickColor.new'White'aV.Name='Neutral'local aY={}aY['MyTeam']
=aV aY['MyPlayers']={}aY['Frame']=H:Clone()WaitForChild(WaitForChild(aY['Frame']
,'TitleFrame'),'Title').Text=aV.Name aY['Frame'].TitleFrame.Position=UDim2.new(
aY['Frame'].TitleFrame.Position.X.Scale,aY['Frame'].TitleFrame.Position.X.Offset
,0.1,0)aY['Frame'].TitleFrame.Size=UDim2.new(aY['Frame'].TitleFrame.Size.X.Scale
,aY['Frame'].TitleFrame.Size.X.Offset,0.8,0)aY['Frame'].TitleFrame.Title.Font=
@ -594,61 +587,61 @@ aZ,a_ in pairs(ae)do if a_['Player'].Neutral or not a_['MyTeam']then
AddPlayerToTeam(aY,a_)end end if#aY['MyPlayers']>0 then ag=aY UpdateMinimize()
BaseUpdate()end aD=false end function RemoveNeutralTeam()while aD do debugprint
'in neutral team lock'wait()end aD=true ag['Frame']:Destroy()ag=nil
RemoveMiddleBGFrame()aD=false end function TeamScoreChanged(aX,aY)WaitForChild(
aX['Frame'],'PlayerScore').Text=tostring(aY)aX['TeamScore']=aY end function
TeamChildAdded(aX,aY)if aY.Name=='AutoHide'then aX['AutoHide']=true elseif aY.
Name=='TeamScore'then WaitForChild(aX['Frame'],'PlayerScore').Text=tostring(aY.
Value)aX['TeamScore']=aY.Value aY.Changed:connect(function()TeamScoreChanged(aX,
aY.Value)end)end end function TeamChildRemoved(aX,aY)if aY.Name=='AutoHide'then
aX['AutoHide']=false elseif aY.Name=='TeamScore'then WaitForChild(aX['Frame'],
'PlayerScore').Text=''aX['TeamScore']=nil end end function TeamChanged(aX,aY)if
aY=='Name'then WaitForChild(WaitForChild(aX['Frame'],'TitleFrame'),'Title').Text
=aX['MyTeam'].Name elseif aY=='TeamColor'then aX['Frame'].ClickListener.
BackgroundColor3=aX['MyTeam'].TeamColor.Color for aZ,a_ in pairs(af)do if a_[
'MyTeam'].TeamColor==aX['MyTeam']then RemoveTeamFrame(aX['MyTeam'])end end aX[
RemoveMiddleBGFrame()aD=false end function TeamScoreChanged(aV,aY)WaitForChild(
aV['Frame'],'PlayerScore').Text=tostring(aY)aV['TeamScore']=aY end function
TeamChildAdded(aV,aY)if aY.Name=='AutoHide'then aV['AutoHide']=true elseif aY.
Name=='TeamScore'then WaitForChild(aV['Frame'],'PlayerScore').Text=tostring(aY.
Value)aV['TeamScore']=aY.Value aY.Changed:connect(function()TeamScoreChanged(aV,
aY.Value)end)end end function TeamChildRemoved(aV,aY)if aY.Name=='AutoHide'then
aV['AutoHide']=false elseif aY.Name=='TeamScore'then WaitForChild(aV['Frame'],
'PlayerScore').Text=''aV['TeamScore']=nil end end function TeamChanged(aV,aY)if
aY=='Name'then WaitForChild(WaitForChild(aV['Frame'],'TitleFrame'),'Title').Text
=aV['MyTeam'].Name elseif aY=='TeamColor'then aV['Frame'].ClickListener.
BackgroundColor3=aV['MyTeam'].TeamColor.Color for aZ,a_ in pairs(af)do if a_[
'MyTeam'].TeamColor==aV['MyTeam']then RemoveTeamFrame(aV['MyTeam'])end end aV[
'MyPlayers']={}for a0,a1 in pairs(ae)do SetPlayerToTeam(a1)end BaseUpdate()end
end function InsertTeamFrame(aX)while ax do debugprint
end function InsertTeamFrame(aV)while ax do debugprint
'in adding team frame lock'wait(3.333333333333333E-2)end ax=true local aY={}aY[
'MyTeam']=aX aY['MyPlayers']={}aY['Frame']=H:Clone()WaitForChild(WaitForChild(aY
['Frame'],'TitleFrame'),'Title').Text=aX.Name aY['Frame'].TitleFrame.Title.Font=
'MyTeam']=aV aY['MyPlayers']={}aY['Frame']=H:Clone()WaitForChild(WaitForChild(aY
['Frame'],'TitleFrame'),'Title').Text=aV.Name aY['Frame'].TitleFrame.Title.Font=
'ArialBold'aY['Frame'].TitleFrame.Title.FontSize='Size18'aY['Frame'].TitleFrame.
Position=UDim2.new(aY['Frame'].TitleFrame.Position.X.Scale,aY['Frame'].
TitleFrame.Position.X.Offset,0.1,0)aY['Frame'].TitleFrame.Size=UDim2.new(aY[
'Frame'].TitleFrame.Size.X.Scale,aY['Frame'].TitleFrame.Size.X.Offset,0.8,0)aY[
'Frame'].Position=UDim2.new(1,0,(#ah*aY['Frame'].Size.Y.Scale),0)WaitForChild(aY
['Frame'],'ClickListener').MouseButton1Down:connect(function(a0,a1)StartDrag(aY,
a0,a1)end)aY['Frame'].ClickListener.BackgroundColor3=aX.TeamColor.Color aY[
a0,a1)end)aY['Frame'].ClickListener.BackgroundColor3=aV.TeamColor.Color aY[
'Frame'].ClickListener.BackgroundTransparency=0.7 aY['Frame'].ClickListener.
AutoButtonColor=false ad=ad+1 aY['ID']=ad aY['AutoHide']=false if aX:
FindFirstChild'AutoHide'then aY['AutoHide']=true end if aX:FindFirstChild
'TeamScore'then TeamChildAdded(aY,aX.TeamScore)end aX.ChildAdded:connect(
function(a0)TeamChildAdded(aY,a0)end)aX.ChildRemoved:connect(function(a0)
TeamChildRemoved(aY,a0)end)aX.Changed:connect(function(a0)TeamChanged(aY,a0)end)
AutoButtonColor=false ad=ad+1 aY['ID']=ad aY['AutoHide']=false if aV:
FindFirstChild'AutoHide'then aY['AutoHide']=true end if aV:FindFirstChild
'TeamScore'then TeamChildAdded(aY,aV.TeamScore)end aV.ChildAdded:connect(
function(a0)TeamChildAdded(aY,a0)end)aV.ChildRemoved:connect(function(a0)
TeamChildRemoved(aY,a0)end)aV.Changed:connect(function(a0)TeamChanged(aY,a0)end)
for a0,a1 in pairs(ae)do if not a1['Player'].Neutral and a1['Player'].TeamColor
==aX.TeamColor then AddPlayerToTeam(aY,a1)end end aY['IsHidden']=false if not aY
==aV.TeamColor then AddPlayerToTeam(aY,a1)end end aY['IsHidden']=false if not aY
['AutoHide']or#aY['MyPlayers']>0 then aY['Frame'].Parent=y aY['Frame']:
TweenPosition(UDim2.new(0.5,0,(#ah*aY['Frame'].Size.Y.Scale),0),'Out','Linear',c
,true)AddMiddleBGFrame()else aY['IsHidden']=true aY['Frame'].Parent=nil end
table.insert(af,aY)UpdateMinimize()BaseUpdate()if#af==1 and not ag then
AddNeutralTeam()end ax=false end function RemoveTeamFrame(aX)while ax do
debugprint'in removing team frame lock'wait(3.333333333333333E-2)end ax=true if
D.Value then end local aY for a0,a1 in ipairs(af)do if aX==a1['MyTeam']then aY=
a1 a1['Frame']:Destroy()table.remove(af,a0)end end if#af==0 then debugprint
AddNeutralTeam()end ax=false end function RemoveTeamFrame(aV)while ax do
debugprint'in removing team frame lock'wait(3.333333333333333E-2)end ax=true
local aY for a0,a1 in ipairs(af)do if aV==a1['MyTeam']then aY=a1 a1['Frame']:
Destroy()table.remove(af,a0)end end if#af==0 then debugprint
'removeteamframe, remove neutral'if ag then RemoveNeutralTeam()end end for a2,a3
in ipairs(aY['MyPlayers'])do RemovePlayerFromTeam(aY,a2)PlayerChanged(a3,
'TeamColor')end RemoveMiddleBGFrame()BaseUpdate()ax=false end function TeamAdded
(aX)InsertTeamFrame(aX)end function TeamRemoved(aX)RemoveTeamFrame(aX)end
(aV)InsertTeamFrame(aV)end function TeamRemoved(aV)RemoveTeamFrame(aV)end
function BaseUpdate()while az do debugprint'in baseupdate lock'wait(
3.333333333333333E-2)end az=true UpdateStatNames()if#af==0 and not ag then
PlayerListModeUpdate()else TeamListModeUpdate()end for aX,aY in ipairs(ah)do if
aY.Parent~=nil then aY:TweenPosition(UDim2.new(0.5,0,((#ah-aX)*aY.Size.Y.Scale),
PlayerListModeUpdate()else TeamListModeUpdate()end for aV,aY in ipairs(ah)do if
aY.Parent~=nil then aY:TweenPosition(UDim2.new(0.5,0,((#ah-aV)*aY.Size.Y.Scale),
0),'Out','Linear',c,true)end end if not D.Value and#ah>_ then
UpdateScrollPosition()end UpdateMinimize()UpdateScrollBarSize()
UpdateScrollPosition()UpdateScrollBarVisibility()az=false end game.GuiService:
AddKey'\t'local aX=time()game.GuiService.KeyPressed:connect(function(aY)if aY==
AddKey'\t'local aV=time()game.GuiService.KeyPressed:connect(function(aY)if aY==
'\t'then debugprint'caught tab key'local a2,a3=pcall(function()return game.
GuiService.IsModalDialog end)if a2==false or(a2 and a3==false)then if time()-aX>
0.4 then aX=time()if F.Value then if not E.Value then i:TweenPosition(UDim2.new(
GuiService.IsModalDialog end)if a2==false or(a2 and a3==false)then if time()-aV>
0.4 then aV=time()if F.Value then if not E.Value then i:TweenPosition(UDim2.new(
0,0,0,0),'Out','Linear',c*1.2,true)E.Value=true else i:TweenPosition(UDim2.new(
ar.X.Scale,ar.X.Offset-10,0,0),'Out','Linear',c*1.2,true)E.Value=false D.Value=
true end else ToggleMaximize()end end end end end)function PlayersChildAdded(aY)

View File

@ -34,51 +34,51 @@ showOneButton()local f=script.Parent:FindFirstChild'Popup'if f then f.OKButton.
Visible=true f.DeclineButton.Visible=false f.AcceptButton.Visible=false end end
function showTwoButtons()local f=script.Parent:FindFirstChild'Popup'if f then f.
OKButton.Visible=false f.DeclineButton.Visible=true f.AcceptButton.Visible=true
end end function onTeleport(f,g,h)if game:GetService'TeleportService'.
CustomizedTeleportUI==false then if f==Enum.TeleportState.Started then
showTeleportUI('Teleport started...',0)elseif f==Enum.TeleportState.
WaitingForServer then showTeleportUI('Requesting server...',0)elseif f==Enum.
end end function showTeleportUI(f,g)if b~=nil then b:Remove()end waitForChild(a,
'PlayerGui')b=Instance.new'Message'b.Text=f b.Parent=a.PlayerGui if g>0 then
wait(g)b:Remove()end end function onTeleport(f,g,h)if game:GetService
'TeleportService'.CustomizedTeleportUI==false then if f==Enum.TeleportState.
Started then showTeleportUI('Teleport started...',0)elseif f==Enum.TeleportState
.WaitingForServer then showTeleportUI('Requesting server...',0)elseif f==Enum.
TeleportState.InProgress then showTeleportUI('Teleporting...',0)elseif f==Enum.
TeleportState.Failed then showTeleportUI(
[[Teleport failed. Insufficient privileges or target place does not exist.]],3)
end end end function showTeleportUI(f,h)if b~=nil then b:Remove()end
waitForChild(a,'PlayerGui')b=Instance.new'Message'b.Text=f b.Parent=a.PlayerGui
if h>0 then wait(h)b:Remove()end end if d then a.OnTeleport:connect(onTeleport)
game:GetService'TeleportService'.ErrorCallback=function(f)local h=script.Parent:
FindFirstChild'Popup'showOneButton()h.PopupText.Text=f local i i=h.OKButton.
MouseButton1Click:connect(function()game:GetService'TeleportService':
TeleportCancel()if i then i:disconnect()end game.GuiService:RemoveCenterDialog(
script.Parent:FindFirstChild'Popup')h:TweenSize(UDim2.new(0,0,0,0),Enum.
EasingDirection.Out,Enum.EasingStyle.Quart,1,true,e())end)game.GuiService:
AddCenterDialog(script.Parent:FindFirstChild'Popup',Enum.CenterDialogType.
QuitDialog,function()showOneButton()script.Parent:FindFirstChild'Popup'.Visible=
true h:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.
EasingStyle.Quart,1,true)end,function()h:TweenSize(UDim2.new(0,0,0,0),Enum.
EasingDirection.Out,Enum.EasingStyle.Quart,1,true,e())end)end game:GetService
'TeleportService'.ConfirmationCallback=function(f,h,i)local j=script.Parent:
FindFirstChild'Popup'j.PopupText.Text=f j.PopupImage.Image=''local k,l
local function killCons()if k then k:disconnect()end if l then l:disconnect()end
game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild'Popup')j:
end end end if d then a.OnTeleport:connect(onTeleport)game:GetService
'TeleportService'.ErrorCallback=function(f)local h=script.Parent:FindFirstChild
'Popup'showOneButton()h.PopupText.Text=f local i i=h.OKButton.MouseButton1Click:
connect(function()game:GetService'TeleportService':TeleportCancel()if i then i:
disconnect()end game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild
'Popup')h:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle
.Quart,1,true,e())end)game.GuiService:AddCenterDialog(script.Parent:
FindFirstChild'Popup',Enum.CenterDialogType.QuitDialog,function()showOneButton()
script.Parent:FindFirstChild'Popup'.Visible=true h:TweenSize(UDim2.new(0,330,0,
350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true)end,function()h:
TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,
true,e())end k=j.AcceptButton.MouseButton1Click:connect(function()killCons()
local m,n=pcall(function()game:GetService'TeleportService':TeleportImpl(h,i)end)
if not m then showOneButton()j.PopupText.Text=n local o o=j.OKButton.
MouseButton1Click:connect(function()if o then o:disconnect()end game.GuiService:
RemoveCenterDialog(script.Parent:FindFirstChild'Popup')j:TweenSize(UDim2.new(0,0
,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,e())end)game.
GuiService:AddCenterDialog(script.Parent:FindFirstChild'Popup',Enum.
CenterDialogType.QuitDialog,function()showOneButton()script.Parent:
true,e())end)end game:GetService'TeleportService'.ConfirmationCallback=function(
f,h,i)local j=script.Parent:FindFirstChild'Popup'j.PopupText.Text=f j.PopupImage
.Image=''local k,l local function killCons()if k then k:disconnect()end if l
then l:disconnect()end game.GuiService:RemoveCenterDialog(script.Parent:
FindFirstChild'Popup')j:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,
Enum.EasingStyle.Quart,1,true,e())end k=j.AcceptButton.MouseButton1Click:
connect(function()killCons()local m,n=pcall(function()game:GetService
'TeleportService':TeleportImpl(h,i)end)if not m then showOneButton()j.PopupText.
Text=n local o o=j.OKButton.MouseButton1Click:connect(function()if o then o:
disconnect()end game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild
'Popup')j:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle
.Quart,1,true,e())end)game.GuiService:AddCenterDialog(script.Parent:
FindFirstChild'Popup',Enum.CenterDialogType.QuitDialog,function()showOneButton()
script.Parent:FindFirstChild'Popup'.Visible=true j:TweenSize(UDim2.new(0,330,0,
350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true)end,function()j:
TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,
true,e())end)end end)l=j.DeclineButton.MouseButton1Click:connect(function()
killCons()pcall(function()game:GetService'TeleportService':TeleportCancel()end)
end)local m=pcall(function()game.GuiService:AddCenterDialog(script.Parent:
FindFirstChild'Popup',Enum.CenterDialogType.QuitDialog,function()showTwoButtons(
)j.AcceptButton.Text='Leave'j.DeclineButton.Text='Stay'script.Parent:
FindFirstChild'Popup'.Visible=true j:TweenSize(UDim2.new(0,330,0,350),Enum.
EasingDirection.Out,Enum.EasingStyle.Quart,1,true)end,function()j:TweenSize(
UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,e())
end)end end)l=j.DeclineButton.MouseButton1Click:connect(function()killCons()
pcall(function()game:GetService'TeleportService':TeleportCancel()end)end)local m
=pcall(function()game.GuiService:AddCenterDialog(script.Parent:FindFirstChild
'Popup',Enum.CenterDialogType.QuitDialog,function()showTwoButtons()j.
AcceptButton.Text='Leave'j.DeclineButton.Text='Stay'script.Parent:FindFirstChild
'Popup'.Visible=true j:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out
,Enum.EasingStyle.Quart,1,true)end,function()j:TweenSize(UDim2.new(0,0,0,0),Enum
.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,e())end)end)if m==false then
script.Parent:FindFirstChild'Popup'.Visible=true j.AcceptButton.Text='Leave'j.
DeclineButton.Text='Stay'j:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection
.Out,Enum.EasingStyle.Quart,1,true)end return true end end
end)end)if m==false then script.Parent:FindFirstChild'Popup'.Visible=true j.
AcceptButton.Text='Leave'j.DeclineButton.Text='Stay'j:TweenSize(UDim2.new(0,330,
0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true)end return true
end end

View File

@ -37,80 +37,79 @@ F then if C[F].GearReference.Value then if C[F].GearReference.Value.Parent==game
.Players.LocalPlayer.Character then C[F].GearReference.Value.Parent=game.Players
.LocalPlayer.Backpack end if C[F].GearReference.Value:IsA'HopperBin'and C[F].
GearReference.Value.Active then C[F].GearReference.Value:Disable()C[F].
GearReference.Value.Active=false end end C[F]='empty'local G,H=E.Size.X.Scale/2,
E.Size.Y.Scale/2 delay(0,function()E:remove()end)Spawn(function()while
backpackIsOpen()do wait(0.03)end waitForChild(i,'Backpack')local I=true for J=1,
#C do if C[J]~='empty'then I=false end end if I then if#i.Backpack:GetChildren()
<1 then f.Visible=false else f.Position=UDim2.new(0.5,-60,1,-44)end h.Visible=
false end end)end end function insertGear(E,F)local G=nil if not F then for H=1,
#C do if C[H]=='empty'then G=H break end end if G==1 and C[1]~='empty'then E:
remove()return end else G=F local H=1 for I=1,#C do if C[I]=='empty'then H=I
break end end for I=H,G+1,-1 do C[I]=C[I-1]if I==10 then C[I].SlotNumber.Text=
'0'C[I].SlotNumberDownShadow.Text='0'C[I].SlotNumberUpShadow.Text='0'else C[I].
SlotNumber.Text=I C[I].SlotNumberDownShadow.Text=I C[I].SlotNumberUpShadow.Text=
I end end end C[G]=E if G~=r then if type(tostring(G))=='string'then local H=
tostring(G)E.SlotNumber.Text=H E.SlotNumberDownShadow.Text=H E.
SlotNumberUpShadow.Text=H end else E.SlotNumber.Text='0'E.SlotNumberDownShadow.
Text='0'E.SlotNumberUpShadow.Text='0'end E.Visible=true local H=nil H=E.Kill.
Changed:connect(function(I)kill(I,H,E)end)end function reorganizeLoadout(E,F,G,H
)if F then insertGear(E,H)else removeGear(E)end if E~='empty'then E.ZIndex=1 end
end function checkToolAncestry(E,F)if E:FindFirstChild'RobloxBuildTool'then
return end if E:IsA'Tool'or E:IsA'HopperBin'then for G=1,#C do if C[G]~='empty'
and C[G].GearReference.Value==E then if F==nil then C[G].Kill.Value=true return
false elseif E.Parent==i.Character then C[G].Selected=true return true elseif E.
Parent==i.Backpack then if E:IsA'Tool'or E:IsA'HopperBin'then C[G].Selected=
false end return true else C[G].Kill.Value=true return false end return true end
end end end function removeAllEquippedGear(E)local F=i.Character:GetChildren()
for G=1,#F do if(F[G]:IsA'Tool'or F[G]:IsA'HopperBin')and F[G]~=E then if F[G]:
IsA'Tool'then F[G].Parent=i.Backpack end if F[G]:IsA'HopperBin'then F[G]:
Disable()end end end end function hopperBinSwitcher(E,F)if not F then return end
F:ToggleSelect()if C[E]=='empty'then return end if not F.Active then C[E].
Selected=false normalizeButton(C[E])else C[E].Selected=true enlargeButton(C[E])
end end function toolSwitcher(E)if not C[E]then return end local F=C[E].
GearReference.Value if F==nil then return end removeAllEquippedGear(F)local G=E
if E==0 then G=10 end for H=1,#C do if C[H]and C[H]~='empty'and H~=G then
normalizeButton(C[H])C[H].Selected=false if C[H].GearReference and C[H].
GearReference.Value and C[H].GearReference.Value:IsA'HopperBin'and C[H].
GearReference.Value.Active then C[H].GearReference.Value:ToggleSelect()end end
end if F:IsA'HopperBin'then hopperBinSwitcher(E,F)else if F.Parent==i.Character
then F.Parent=i.Backpack if C[E]~='empty'then C[E].Selected=false
normalizeButton(C[E])end else F.Parent=i.Character C[E].Selected=true
enlargeButton(C[E])end end end function activateGear(E)local F=nil if E=='0'then
F=10 else F=tonumber(E)end if F==nil then return end if C[F]~='empty'then
toolSwitcher(F)end end enlargeButton=function(E)if E.Size.Y.Scale>1 then return
end if not E.Parent then return end if not E.Selected then return end for F=1,#C
do if C[F]=='empty'then break end if C[F]~=E then normalizeButton(C[F])end end
if not y then return end if E:FindFirstChild'Highlight'then E.Highlight.Visible=
true end if E:IsA'ImageButton'or E:IsA'TextButton'then E.ZIndex=5 local F,G=-(w.
X.Scale-E.Size.X.Scale)/2,-(w.Y.Scale-E.Size.Y.Scale)/2 E:TweenSizeAndPosition(w
,UDim2.new(E.Position.X.Scale+F,E.Position.X.Offset,E.Position.Y.Scale+G,E.
Position.Y.Offset),Enum.EasingDirection.Out,Enum.EasingStyle.Quad,z/5,y)end end
normalizeAllButtons=function()for E=1,#C do if C[E]=='empty'then break end if C[
E]~=button then normalizeButton(C[E],0.1)end end end normalizeButton=function(E,
F)if not E then return end if E.Size.Y.Scale<=1 then return end if E.Selected
then return end if not E.Parent then return end local G=F if G==nil or type(G)~=
'number'then G=z/5 end if E:FindFirstChild'Highlight'then E.Highlight.Visible=
false end if E:IsA'ImageButton'or E:IsA'TextButton'then E.ZIndex=1 local H,I,J=1
/v,-(x.X.Scale-E.Size.X.Scale)/2,-(x.Y.Scale-E.Size.Y.Scale)/2 E:
TweenSizeAndPosition(x,UDim2.new(E.Position.X.Scale+I,E.Position.X.Offset,E.
Position.Y.Scale+J,E.Position.Y.Offset),Enum.EasingDirection.Out,Enum.
EasingStyle.Quad,G,y)end end local E=function()while u do wait()end end function
pointInRectangle(F,G,H)if F.x>G.x and F.x<(G.x+H.x)then if F.y>G.y and F.y<(G.y+
H.y)then return true end end return false end function swapGear(F,G)local H=G:
GetChildren()if#H==1 then if H[1]:FindFirstChild'SlotNumber'then local I,J=
tonumber(H[1].SlotNumber.Text),tonumber(F.SlotNumber.Text)if I==0 then I=10 end
if J==0 then J=10 end C[I]=F C[J]=H[1]H[1].SlotNumber.Text=F.SlotNumber.Text H[1
].SlotNumberDownShadow.Text=F.SlotNumber.Text H[1].SlotNumberUpShadow.Text=F.
SlotNumber.Text local K=string.sub(G.Name,5)F.SlotNumber.Text=K F.
SlotNumberDownShadow.Text=K F.SlotNumberUpShadow.Text=K F.Position=UDim2.new(F.
Position.X.Scale,0,F.Position.Y.Scale,0)H[1].Position=UDim2.new(H[1].Position.X.
Scale,0,H[1].Position.Y.Scale,0)H[1].Parent=F.Parent F.Parent=G end else local I
=tonumber(F.SlotNumber.Text)if I==0 then I=10 end C[I]='empty'local J=string.
sub(G.Name,5)F.SlotNumber.Text=J F.SlotNumberDownShadow.Text=J F.
SlotNumberUpShadow.Text=J local K=tonumber(F.SlotNumber.Text)if K==0 then K=10
end C[K]=F F.Position=UDim2.new(F.Position.X.Scale,0,F.Position.Y.Scale,0)F.
Parent=G end end function resolveDrag(F,G,H)local I,J=Vector2.new(G,H),F.Parent
local K=J.Parent:GetChildren()for L=1,#K do if K[L]:IsA'Frame'then if
GearReference.Value.Active=false end end C[F]='empty'delay(0,function()E:remove(
)end)Spawn(function()while backpackIsOpen()do wait(0.03)end waitForChild(i,
'Backpack')local G=true for H=1,#C do if C[H]~='empty'then G=false end end if G
then if#i.Backpack:GetChildren()<1 then f.Visible=false else f.Position=UDim2.
new(0.5,-60,1,-44)end h.Visible=false end end)end end function insertGear(E,F)
local G=nil if not F then for H=1,#C do if C[H]=='empty'then G=H break end end
if G==1 and C[1]~='empty'then E:remove()return end else G=F local H=1 for I=1,#C
do if C[I]=='empty'then H=I break end end for I=H,G+1,-1 do C[I]=C[I-1]if I==10
then C[I].SlotNumber.Text='0'C[I].SlotNumberDownShadow.Text='0'C[I].
SlotNumberUpShadow.Text='0'else C[I].SlotNumber.Text=I C[I].SlotNumberDownShadow
.Text=I C[I].SlotNumberUpShadow.Text=I end end end C[G]=E if G~=r then if type(
tostring(G))=='string'then local H=tostring(G)E.SlotNumber.Text=H E.
SlotNumberDownShadow.Text=H E.SlotNumberUpShadow.Text=H end else E.SlotNumber.
Text='0'E.SlotNumberDownShadow.Text='0'E.SlotNumberUpShadow.Text='0'end E.
Visible=true local H=nil H=E.Kill.Changed:connect(function(I)kill(I,H,E)end)end
function reorganizeLoadout(E,F,G,H)if F then insertGear(E,H)else removeGear(E)
end if E~='empty'then E.ZIndex=1 end end function checkToolAncestry(E,F)if E:
FindFirstChild'RobloxBuildTool'then return end if E:IsA'Tool'or E:IsA'HopperBin'
then for G=1,#C do if C[G]~='empty'and C[G].GearReference.Value==E then if F==
nil then C[G].Kill.Value=true return false elseif E.Parent==i.Character then C[G
].Selected=true return true elseif E.Parent==i.Backpack then if E:IsA'Tool'or E:
IsA'HopperBin'then C[G].Selected=false end return true else C[G].Kill.Value=true
return false end return true end end end end function removeAllEquippedGear(E)
local F=i.Character:GetChildren()for G=1,#F do if(F[G]:IsA'Tool'or F[G]:IsA
'HopperBin')and F[G]~=E then if F[G]:IsA'Tool'then F[G].Parent=i.Backpack end if
F[G]:IsA'HopperBin'then F[G]:Disable()end end end end function hopperBinSwitcher
(E,F)if not F then return end F:ToggleSelect()if C[E]=='empty'then return end if
not F.Active then C[E].Selected=false normalizeButton(C[E])else C[E].Selected=
true enlargeButton(C[E])end end function toolSwitcher(E)if not C[E]then return
end local F=C[E].GearReference.Value if F==nil then return end
removeAllEquippedGear(F)local G=E if E==0 then G=10 end for H=1,#C do if C[H]and
C[H]~='empty'and H~=G then normalizeButton(C[H])C[H].Selected=false if C[H].
GearReference and C[H].GearReference.Value and C[H].GearReference.Value:IsA
'HopperBin'and C[H].GearReference.Value.Active then C[H].GearReference.Value:
ToggleSelect()end end end if F:IsA'HopperBin'then hopperBinSwitcher(E,F)else if
F.Parent==i.Character then F.Parent=i.Backpack if C[E]~='empty'then C[E].
Selected=false normalizeButton(C[E])end else F.Parent=i.Character C[E].Selected=
true enlargeButton(C[E])end end end function activateGear(E)local F=nil if E==
'0'then F=10 else F=tonumber(E)end if F==nil then return end if C[F]~='empty'
then toolSwitcher(F)end end enlargeButton=function(E)if E.Size.Y.Scale>1 then
return end if not E.Parent then return end if not E.Selected then return end for
F=1,#C do if C[F]=='empty'then break end if C[F]~=E then normalizeButton(C[F])
end end if not y then return end if E:FindFirstChild'Highlight'then E.Highlight.
Visible=true end if E:IsA'ImageButton'or E:IsA'TextButton'then E.ZIndex=5 local
F,G=-(w.X.Scale-E.Size.X.Scale)/2,-(w.Y.Scale-E.Size.Y.Scale)/2 E:
TweenSizeAndPosition(w,UDim2.new(E.Position.X.Scale+F,E.Position.X.Offset,E.
Position.Y.Scale+G,E.Position.Y.Offset),Enum.EasingDirection.Out,Enum.
EasingStyle.Quad,z/5,y)end end normalizeAllButtons=function()for E=1,#C do if C[
E]=='empty'then break end if C[E]~=button then normalizeButton(C[E],0.1)end end
end normalizeButton=function(E,F)if not E then return end if E.Size.Y.Scale<=1
then return end if E.Selected then return end if not E.Parent then return end
local G=F if G==nil or type(G)~='number'then G=z/5 end if E:FindFirstChild
'Highlight'then E.Highlight.Visible=false end if E:IsA'ImageButton'or E:IsA
'TextButton'then E.ZIndex=1 local H,I,J=1/v,-(x.X.Scale-E.Size.X.Scale)/2,-(x.Y.
Scale-E.Size.Y.Scale)/2 E:TweenSizeAndPosition(x,UDim2.new(E.Position.X.Scale+I,
E.Position.X.Offset,E.Position.Y.Scale+J,E.Position.Y.Offset),Enum.
EasingDirection.Out,Enum.EasingStyle.Quad,G,y)end end local E=function()while u
do wait()end end function pointInRectangle(F,G,H)if F.x>G.x and F.x<(G.x+H.x)
then if F.y>G.y and F.y<(G.y+H.y)then return true end end return false end
function swapGear(F,G)local H=G:GetChildren()if#H==1 then if H[1]:FindFirstChild
'SlotNumber'then local I,J=tonumber(H[1].SlotNumber.Text),tonumber(F.SlotNumber.
Text)if I==0 then I=10 end if J==0 then J=10 end C[I]=F C[J]=H[1]H[1].SlotNumber
.Text=F.SlotNumber.Text H[1].SlotNumberDownShadow.Text=F.SlotNumber.Text H[1].
SlotNumberUpShadow.Text=F.SlotNumber.Text local K=string.sub(G.Name,5)F.
SlotNumber.Text=K F.SlotNumberDownShadow.Text=K F.SlotNumberUpShadow.Text=K F.
Position=UDim2.new(F.Position.X.Scale,0,F.Position.Y.Scale,0)H[1].Position=UDim2
.new(H[1].Position.X.Scale,0,H[1].Position.Y.Scale,0)H[1].Parent=F.Parent F.
Parent=G end else local I=tonumber(F.SlotNumber.Text)if I==0 then I=10 end C[I]=
'empty'local J=string.sub(G.Name,5)F.SlotNumber.Text=J F.SlotNumberDownShadow.
Text=J F.SlotNumberUpShadow.Text=J local K=tonumber(F.SlotNumber.Text)if K==0
then K=10 end C[K]=F F.Position=UDim2.new(F.Position.X.Scale,0,F.Position.Y.
Scale,0)F.Parent=G end end function resolveDrag(F,G,H)local I,J=Vector2.new(G,H)
,F.Parent local K=J.Parent:GetChildren()for L=1,#K do if K[L]:IsA'Frame'then if
pointInRectangle(I,K[L].AbsolutePosition,K[L].AbsoluteSize)then swapGear(F,K[L])
return true end end end if G<J.AbsolutePosition.x or G>(J.AbsolutePosition.x+J.
AbsoluteSize.x)then reorganizeLoadout(F,false)return false elseif H<J.

View File

@ -7,19 +7,18 @@ end local o={backslashes={['\b']='\\b',['\t']='\\t',['\n']='\\n',['\f']='\\f',[
writer=n:New()i(p,self)self.__index=self return p end function o:Append(p)self.
writer:Append(p)end function o:ToString()return self.writer:ToString()end
function o:Write(p)local q=h(p)if q=='nil'then self:WriteNil()elseif q==
'boolean'then self:WriteString(p)elseif q=='number'then self:WriteString(p)
elseif q=='string'then self:ParseString(p)elseif q=='table'then self:WriteTable(
p)elseif q=='function'then self:WriteFunction(p)elseif q=='thread'then self:
WriteError(p)elseif q=='userdata'then self:WriteError(p)end end function o:
WriteNil()self:Append'null'end function o:WriteString(p)self:Append(g(p))end
function o:ParseString(p)self:Append'"'self:Append(b.gsub(p,'[%z%c\\"/]',
function(q)local r=self.backslashes[q]if r then return r end return b.format(
'\\u%.4X',b.byte(q))end))self:Append'"'end function o:IsArray(p)local q,r=0,
function(q)if h(q)=='number'and q>0 then if c.floor(q)==q then return true end
end return false end for s,t in j(p)do if not r(s)then return false,'{','}'else
q=c.max(q,s)end end return true,'[',']',q end function o:WriteTable(p)local q,r,
s,t=self:IsArray(p)self:Append(r)if q then for u=1,t do self:Write(p[u])if u<t
then self:Append','end end else local u=true for v,w in j(p)do if not u then
'boolean'or q=='number'then self:WriteString(p)elseif q=='string'then self:
ParseString(p)elseif q=='table'then self:WriteTable(p)elseif q=='function'then
self:WriteFunction(p)elseif q=='thread'or q=='userdata'then self:WriteError(p)
end end function o:WriteNil()self:Append'null'end function o:WriteString(p)self:
Append(g(p))end function o:ParseString(p)self:Append'"'self:Append(b.gsub(p,
'[%z%c\\"/]',function(q)local r=self.backslashes[q]if r then return r end return
b.format('\\u%.4X',b.byte(q))end))self:Append'"'end function o:IsArray(p)local q
,r=0,function(q)if h(q)=='number'and q>0 then if c.floor(q)==q then return true
end end return false end for s,t in j(p)do if not r(s)then return false,'{','}'
else q=c.max(q,s)end end return true,'[',']',q end function o:WriteTable(p)local
q,r,s,t=self:IsArray(p)self:Append(r)if q then for u=1,t do self:Write(p[u])if u
<t then self:Append','end end else local u=true for v,w in j(p)do if not u then
self:Append','end u=false self:ParseString(v)self:Append':'self:Write(w)end end
self:Append(s)end function o:WriteError(p)e(b.format(
'Encoding of %s unsupported',g(p)))end function o:WriteFunction(p)if p==Null

View File

@ -1,5 +1,4 @@
local a={}function waitForChild(b,c)while not b:FindFirstChild(c)do b.ChildAdded
:wait()end end function PlaneIntersection(b)local c,d=false,game.Workspace.
local a={}function PlaneIntersection(b)local c,d=false,game.Workspace.
CurrentCamera local e,f,g,h=Vector3.new(d.CoordinateFrame.p.X,d.CoordinateFrame.
p.Y,d.CoordinateFrame.p.Z),Vector3.new(b.X,b.Y,b.Z),Vector3.new(0,1,0),Vector3.
new(0,0,0)local i,j=g:Dot(f-e),b if i~=0 then local k=g:Dot(h-e)/i if k>=0 and k

View File

@ -75,7 +75,7 @@ ZIndex=10 S=T end)R.DragStopped:connect(function(T,U)waitForChild(R,'Background'
true)R.Draggable=false delay(0.5,function()R.Draggable=true end)else R.Position=
S end end end)local T=tick()j[R]=R.MouseEnter:connect(function()previewGear(R)
end)k[R]=R.MouseButton1Click:connect(function()local U=tick()if R.Active and(U-T
)<0.5 then local V=findEmptySlot()if V then R.ZIndex=1 swapGearSlot(V,R)end else
)<0.5 then local W=findEmptySlot()if W then R.ZIndex=1 swapGearSlot(W,R)end else
buttonClick(R)end T=U end)end end end F()end function showPartialGrid(aa)for Q,R
in pairs(g)do R.Parent=nil end if aa then for S,T in pairs(aa)do T.Parent=s.
ScrollingFrame end end F()end function showEntireGrid()for aa,Q in pairs(g)do Q.
@ -110,9 +110,9 @@ new(0.8,0.8,0.8)end function clearHighlight(aa)aa.TextColor3=Color3.new(1,1,1)aa
then u.Slot.Value=aa u.GearButton.Value=Q u.Value=true updateGridActive()end end
local aa=function(aa,Q)if type(aa.Action)~='number'then return end local R=aa.
Action if R==1 then unequipGear(Q.Parent.GearReference.Value)local S=Q.Parent
local T,U,V=S.GearReference.Value,r:GetChildren(),-1 for W=1,#U do if U[W]:IsA
'Frame'then local X=U[W]:GetChildren()if X[1]and X[1].GearReference.Value==T
then V=X[1].SlotNumber.Text break end end end swapGearSlot(V,nil)end end
local T,U,W=S.GearReference.Value,r:GetChildren(),-1 for X=1,#U do if U[X]:IsA
'Frame'then local Y=U[X]:GetChildren()if Y[1]and Y[1].GearReference.Value==T
then W=Y[1].SlotNumber.Text break end end end swapGearSlot(W,nil)end end
function setupCharacterConnections()if n then n:disconnect()end n=game.Players.
LocalPlayer.Backpack.ChildAdded:connect(function(Q)addToGrid(Q)end)local Q=game.
Players.LocalPlayer.Backpack:GetChildren()for R=1,#Q do addToGrid(Q[R])end if l
@ -123,7 +123,7 @@ end)wait()centerGear(r:GetChildren())end function removeCharacterConnections()if
l then l:disconnect()end if m then m:disconnect()end if n then n:disconnect()end
end function trim(Q)return(Q:gsub('^%s*(.-)%s*$','%1'))end function filterGear(Q
)local R={}for S,T in pairs(f)do if g[T]then local U=string.lower(g[T].
GearReference.Value.Name)U=trim(U)for V=1,#Q do if string.match(U,Q[V])then
GearReference.Value.Name)U=trim(U)for W=1,#Q do if string.match(U,Q[W])then
table.insert(R,g[T])break end end end end return R end function
splitByWhitespace(Q)if type(Q)~='string'then return nil end local R={}for S in
string.gmatch(Q,'[^%s]+')do if string.len(S)>0 then table.insert(R,S)end end
@ -138,30 +138,30 @@ getGearContextMenu()local Q=Instance.new'Frame'Q.Active=true Q.Name=
)Q.BackgroundTransparency=1 Q.Visible=false local R=Instance.new'TextButton'R.
Name='UnequipContextMenuButton'R.Text=''R.Style=Enum.ButtonStyle.
RobloxButtonDefault R.ZIndex=8 R.Size=UDim2.new(1,0,1,-20)R.Visible=true R.
Parent=Q local S,T,U=12,{},{'Remove Hotkey'}for V=1,#U do local W={}W.Type=
'Button'W.Text=U[V]W.Action=V W.DoIt=aa table.insert(T,W)end for V,W in ipairs(T
)do local X=W if X.Type=='Button'then local Y=Instance.new'TextButton'Y.Name=
'UnequipContextButton'..V Y.BackgroundColor3=Color3.new(0,0,0)Y.BorderSizePixel=
0 Y.TextXAlignment=Enum.TextXAlignment.Left Y.Text=' '..W.Text Y.Font=Enum.Font.
Arial Y.FontSize=Enum.FontSize.Size14 Y.Size=UDim2.new(1,8,0,S)Y.Position=UDim2.
new(0,0,0,S*V)Y.TextColor3=Color3.new(1,1,1)Y.ZIndex=9 Y.Parent=R if not
IsTouchDevice()then Y.MouseButton1Click:connect(function()if Y.Active and not Q.
Parent.Active then pcall(function()X.DoIt(X,Q)end)i=false Q.Visible=false
clearHighlight(Y)clearPreview()end end)Y.MouseEnter:connect(function()if Y.
Active and Q.Parent.Active then highlight(Y)end end)Y.MouseLeave:connect(
function()if Y.Active and Q.Parent.Active then clearHighlight(Y)end end)end W.
Button=Y W.Element=Y elseif X.Type=='Label'then local Y=Instance.new'Frame'Y.
Name='ContextLabel'..V Y.BackgroundTransparency=1 Y.Size=UDim2.new(1,8,0,S)local
Z=Instance.new'TextLabel'Z.Name='Text1'Z.BackgroundTransparency=1 Z.
BackgroundColor3=Color3.new(1,1,1)Z.BorderSizePixel=0 Z.TextXAlignment=Enum.
TextXAlignment.Left Z.Font=Enum.Font.ArialBold Z.FontSize=Enum.FontSize.Size14 Z
.Position=UDim2.new(0,0,0,0)Z.Size=UDim2.new(0.5,0,1,0)Z.TextColor3=Color3.new(1
,1,1)Z.ZIndex=9 Z.Parent=Y X.Label1=Z if X.GetText2 then Z=Instance.new
'TextLabel'Z.Name='Text2'Z.BackgroundTransparency=1 Z.BackgroundColor3=Color3.
new(1,1,1)Z.BorderSizePixel=0 Z.TextXAlignment=Enum.TextXAlignment.Right Z.Font=
Enum.Font.Arial Z.FontSize=Enum.FontSize.Size14 Z.Position=UDim2.new(0.5,0,0,0)Z
.Size=UDim2.new(0.5,0,1,0)Z.TextColor3=Color3.new(1,1,1)Z.ZIndex=9 Z.Parent=Y X.
Label2=Z end Y.Parent=R X.Label=Y X.Element=Y end end Q.ZIndex=4 Q.MouseLeave:
Parent=Q local S,T,U=12,{},{'Remove Hotkey'}for W=1,#U do local X={}X.Type=
'Button'X.Text=U[W]X.Action=W X.DoIt=aa table.insert(T,X)end for W,X in ipairs(T
)do local Y=X if Y.Type=='Button'then local Z=Instance.new'TextButton'Z.Name=
'UnequipContextButton'..W Z.BackgroundColor3=Color3.new(0,0,0)Z.BorderSizePixel=
0 Z.TextXAlignment=Enum.TextXAlignment.Left Z.Text=' '..X.Text Z.Font=Enum.Font.
Arial Z.FontSize=Enum.FontSize.Size14 Z.Size=UDim2.new(1,8,0,S)Z.Position=UDim2.
new(0,0,0,S*W)Z.TextColor3=Color3.new(1,1,1)Z.ZIndex=9 Z.Parent=R if not
IsTouchDevice()then Z.MouseButton1Click:connect(function()if Z.Active and not Q.
Parent.Active then pcall(function()Y.DoIt(Y,Q)end)i=false Q.Visible=false
clearHighlight(Z)clearPreview()end end)Z.MouseEnter:connect(function()if Z.
Active and Q.Parent.Active then highlight(Z)end end)Z.MouseLeave:connect(
function()if Z.Active and Q.Parent.Active then clearHighlight(Z)end end)end X.
Button=Z X.Element=Z elseif Y.Type=='Label'then local Z=Instance.new'Frame'Z.
Name='ContextLabel'..W Z.BackgroundTransparency=1 Z.Size=UDim2.new(1,8,0,S)local
_=Instance.new'TextLabel'_.Name='Text1'_.BackgroundTransparency=1 _.
BackgroundColor3=Color3.new(1,1,1)_.BorderSizePixel=0 _.TextXAlignment=Enum.
TextXAlignment.Left _.Font=Enum.Font.ArialBold _.FontSize=Enum.FontSize.Size14 _
.Position=UDim2.new(0,0,0,0)_.Size=UDim2.new(0.5,0,1,0)_.TextColor3=Color3.new(1
,1,1)_.ZIndex=9 _.Parent=Z Y.Label1=_ if Y.GetText2 then _=Instance.new
'TextLabel'_.Name='Text2'_.BackgroundTransparency=1 _.BackgroundColor3=Color3.
new(1,1,1)_.BorderSizePixel=0 _.TextXAlignment=Enum.TextXAlignment.Right _.Font=
Enum.Font.Arial _.FontSize=Enum.FontSize.Size14 _.Position=UDim2.new(0.5,0,0,0)_
.Size=UDim2.new(0.5,0,1,0)_.TextColor3=Color3.new(1,1,1)_.ZIndex=9 _.Parent=Z Y.
Label2=_ end Z.Parent=R Y.Label=Z Y.Element=Z end end Q.ZIndex=4 Q.MouseLeave:
connect(function()i=false Q.Visible=false clearPreview()end)robloxLock(Q)return
Q end function coreGuiChanged(Q,R)if Q==Enum.CoreGuiType.Backpack or Q==Enum.
CoreGuiType.All then if not R then e.Gear.Visible=false end end end local Q=a.

View File

@ -2,101 +2,99 @@ if game.CoreGui.Version<7 then return end local function waitForChild(a,b)while
not a:FindFirstChild(b)do a.ChildAdded:wait()end return a:FindFirstChild(b)end
local function waitForProperty(a,b)while not a[b]do a.Changed:wait()end end
waitForChild(game,'Players')if#game.Players:GetChildren()<1 then game.Players.
ChildAdded:wait()end waitForProperty(game.Players,'LocalPlayer')local a,b=game.
Players.LocalPlayer,script.Parent waitForChild(b,'Gear')local c=script.Parent.
Parent assert(c:IsA'ScreenGui')waitForChild(b,'Tabs')waitForChild(b.Tabs,
'CloseButton')local d=b.Tabs.CloseButton waitForChild(b.Tabs,'InventoryButton')
local e=b.Tabs.InventoryButton if game.CoreGui.Version>=8 then waitForChild(b.
Tabs,'WardrobeButton')local f=b.Tabs.WardrobeButton end waitForChild(b.Parent,
'ControlFrame')local f,g,h=waitForChild(b.Parent.ControlFrame,'BackpackButton'),
'gear',waitForChild(b,'SearchFrame')waitForChild(b.SearchFrame,'SearchBoxFrame')
local i,j,k,l=waitForChild(b.SearchFrame.SearchBoxFrame,'SearchBox'),
waitForChild(b.SearchFrame,'SearchButton'),waitForChild(b.SearchFrame,
ChildAdded:wait()end waitForProperty(game.Players,'LocalPlayer')local a=script.
Parent waitForChild(a,'Gear')local b=script.Parent.Parent assert(b:IsA
'ScreenGui')waitForChild(a,'Tabs')waitForChild(a.Tabs,'CloseButton')local c=a.
Tabs.CloseButton waitForChild(a.Tabs,'InventoryButton')local d,e=a.Tabs.
InventoryButton,nil if game.CoreGui.Version>=8 then waitForChild(a.Tabs,
'WardrobeButton')e=a.Tabs.WardrobeButton end waitForChild(a.Parent,
'ControlFrame')local f,g,h=waitForChild(a.Parent.ControlFrame,'BackpackButton'),
'gear',waitForChild(a,'SearchFrame')waitForChild(a.SearchFrame,'SearchBoxFrame')
local i,j,k,l=waitForChild(a.SearchFrame.SearchBoxFrame,'SearchBox'),
waitForChild(a.SearchFrame,'SearchButton'),waitForChild(a.SearchFrame,
'ResetButton'),waitForChild(Game.CoreGui,'RobloxGui')local m=waitForChild(l,
'CurrentLoadout')local n,o,p,q,r,s,t,u,v,w,x,y,z=waitForChild(m,'Background'),
true,true,false,true,false,nil,nil,0.25,'Search...','~','`',UDim2.new(0,600,0,
400)if l.AbsoluteSize.Y<=320 then z=UDim2.new(0,200,0,140)end function
createPublicEvent(A)assert(A,'eventName is nil')assert(tostring(A),
'eventName is not a string')local B=Instance.new'BindableEvent'B.Name=tostring(A
)B.Parent=script return B end function createPublicFunction(A,B)assert(A,
'funcName is nil')assert(tostring(A),'funcName is not a string')assert(B,
'invokeFunc is nil')assert(type(B)=='function',
"invokeFunc should be of type 'function'")local C=Instance.new'BindableFunction'
C.Name=tostring(A)C.OnInvoke=B C.Parent=script return C end local A,B,C,D,E=
createPublicEvent'ResizeEvent',createPublicEvent'BackpackOpenEvent',
createPublicEvent'BackpackCloseEvent',createPublicEvent'TabClickedEvent',
createPublicEvent'SearchRequestedEvent'function deactivateBackpack()b.Visible=
false r=false end function activateBackpack()initHumanoidDiedConnections()r=true
b.Visible=q if q then toggleBackpack()end end function
'CurrentLoadout')local n,o,p,q,r,s,t,u,v,w,x,y=waitForChild(m,'Background'),true
,true,false,true,false,nil,0.25,'Search...','~','`',UDim2.new(0,600,0,400)if l.
AbsoluteSize.Y<=320 then y=UDim2.new(0,200,0,140)end function createPublicEvent(
z)assert(z,'eventName is nil')assert(tostring(z),'eventName is not a string')
local A=Instance.new'BindableEvent'A.Name=tostring(z)A.Parent=script return A
end function createPublicFunction(z,A)assert(z,'funcName is nil')assert(
tostring(z),'funcName is not a string')assert(A,'invokeFunc is nil')assert(type(
A)=='function',"invokeFunc should be of type 'function'")local B=Instance.new
'BindableFunction'B.Name=tostring(z)B.OnInvoke=A B.Parent=script return B end
local z,A,B,C,D=createPublicEvent'ResizeEvent',createPublicEvent
'BackpackOpenEvent',createPublicEvent'BackpackCloseEvent',createPublicEvent
'TabClickedEvent',createPublicEvent'SearchRequestedEvent'function
deactivateBackpack()a.Visible=false r=false end function
initHumanoidDiedConnections()if t then t:disconnect()end waitForProperty(game.
Players.LocalPlayer,'Character')waitForChild(game.Players.LocalPlayer.Character,
'Humanoid')t=game.Players.LocalPlayer.Character.Humanoid.Died:connect(
deactivateBackpack)end local F=function()q=false p=false f.Selected=false
resetSearch()C:Fire(g)b.Tabs.Visible=false h.Visible=false b:
TweenSizeAndPosition(UDim2.new(0,z.X.Offset,0,0),UDim2.new(0.5,-z.X.Offset/2,1,-
85),Enum.EasingDirection.Out,Enum.EasingStyle.Quad,v,true,function()game.
GuiService:RemoveCenterDialog(b)b.Visible=false f.Selected=false end)delay(v,
function()game.GuiService:RemoveCenterDialog(b)b.Visible=false f.Selected=false
p=true o=true end)end function showBackpack()game.GuiService:AddCenterDialog(b,
Enum.CenterDialogType.PlayerInitiatedDialog,function()b.Visible=true f.Selected=
true end,function()b.Visible=false f.Selected=false end)b.Visible=true f.
Selected=true b:TweenSizeAndPosition(z,UDim2.new(0.5,-z.X.Offset/2,1,-z.Y.Offset
-88),Enum.EasingDirection.Out,Enum.EasingStyle.Quad,v,true)delay(v,function()b.
Tabs.Visible=false h.Visible=true B:Fire(g)o=true p=true f.Image=
'http://www.roblox.com/asset/?id=97644093'f.Position=UDim2.new(0.5,-60,1,-z.Y.
Offset-103)end)end function toggleBackpack()if not game.Players.LocalPlayer then
return end if not game.Players.LocalPlayer['Character']then return end if not o
then return end if not p then return end p=false o=false q=not q if q then n.
Image='http://www.roblox.com/asset/?id=97623721'n.Position=UDim2.new(-3E-2,0,-
deactivateBackpack)end function activateBackpack()initHumanoidDiedConnections()r
=true a.Visible=q if q then toggleBackpack()end end local E=function()q=false p=
false f.Selected=false resetSearch()B:Fire(g)a.Tabs.Visible=false h.Visible=
false a:TweenSizeAndPosition(UDim2.new(0,y.X.Offset,0,0),UDim2.new(0.5,-y.X.
Offset/2,1,-85),Enum.EasingDirection.Out,Enum.EasingStyle.Quad,u,true,function()
game.GuiService:RemoveCenterDialog(a)a.Visible=false f.Selected=false end)delay(
u,function()game.GuiService:RemoveCenterDialog(a)a.Visible=false f.Selected=
false p=true o=true end)end function showBackpack()game.GuiService:
AddCenterDialog(a,Enum.CenterDialogType.PlayerInitiatedDialog,function()a.
Visible=true f.Selected=true end,function()a.Visible=false f.Selected=false end)
a.Visible=true f.Selected=true a:TweenSizeAndPosition(y,UDim2.new(0.5,-y.X.
Offset/2,1,-y.Y.Offset-88),Enum.EasingDirection.Out,Enum.EasingStyle.Quad,u,true
)delay(u,function()a.Tabs.Visible=false h.Visible=true A:Fire(g)o=true p=true f.
Image='http://www.roblox.com/asset/?id=97644093'f.Position=UDim2.new(0.5,-60,1,-
y.Y.Offset-103)end)end function toggleBackpack()if not game.Players.LocalPlayer
then return end if not game.Players.LocalPlayer['Character']then return end if
not o then return end if not p then return end p=false o=false q=not q if q then
n.Image='http://www.roblox.com/asset/?id=97623721'n.Position=UDim2.new(-3E-2,0,-
0.17,0)n.Size=UDim2.new(1.05,0,1.25,0)n.ZIndex=2 n.Visible=true showBackpack()
else f.Position=UDim2.new(0.5,-60,1,-44)n.Visible=false f.Selected=false f.Image
='http://www.roblox.com/asset/?id=97617958'n.Image=
'http://www.roblox.com/asset/?id=96536002'n.Position=UDim2.new(-0.1,0,-0.1,0)n.
Size=UDim2.new(1.2,0,1.2,0)F()local G=m:GetChildren()for H=1,#G do if G[H]and G[
H]:IsA'Frame'then local I=G[H]if#I:GetChildren()>0 then f.Position=UDim2.new(0.5
,-60,1,-108)f.Visible=true n.Visible=true if I:GetChildren()[1]:IsA'ImageButton'
then local J=I:GetChildren()[1]J.Active=true J.Draggable=false end end end end
Size=UDim2.new(1.2,0,1.2,0)E()local F=m:GetChildren()for G=1,#F do if F[G]and F[
G]:IsA'Frame'then local H=F[G]if#H:GetChildren()>0 then f.Position=UDim2.new(0.5
,-60,1,-108)f.Visible=true n.Visible=true if H:GetChildren()[1]:IsA'ImageButton'
then local I=H:GetChildren()[1]I.Active=true I.Draggable=false end end end end
end end function closeBackpack()if q then toggleBackpack()end end function
setSelected(G)assert(G)assert(G:IsA'TextButton')G.BackgroundColor3=Color3.new(1,
1,1)G.TextColor3=Color3.new(0,0,0)G.Selected=true G.ZIndex=3 end function
setUnselected(G)assert(G)assert(G:IsA'TextButton')G.BackgroundColor3=Color3.new(
0,0,0)G.TextColor3=Color3.new(1,1,1)G.Selected=false G.ZIndex=1 end function
updateTabGui(G)assert(G)if G=='gear'then setSelected(e)setUnselected(
wardrobeButton)elseif G=='wardrobe'then setSelected(wardrobeButton)
setUnselected(e)end end function mouseLeaveTab(G)assert(G)assert(G:IsA
'TextButton')if G.Selected then return end G.BackgroundColor3=Color3.new(0,0,0)
end function mouseOverTab(G)assert(G)assert(G:IsA'TextButton')if G.Selected then
return end G.BackgroundColor3=Color3.new(0.15294117647058825,0.15294117647058825
,0.15294117647058825)end function newTabClicked(G)assert(G)G=string.lower(G)g=G
updateTabGui(G)D:Fire(G)resetSearch()end function trim(G)return(G:gsub(
'^%s*(.-)%s*$','%1'))end function splitByWhitespace(G)if type(G)~='string'then
return nil end local H={}for I in string.gmatch(G,'[^%s]+')do if string.len(I)>0
then table.insert(H,I)end end return H end function resetSearchBoxGui()k.Visible
=false i.Text=w end function doSearch()local G=i.Text if G==''then resetSearch()
return end G=trim(G)k.Visible=true termTable=splitByWhitespace(G)E:Fire(G)end
function resetSearch()resetSearchBoxGui()E:Fire()end local G=function()p=true
end function coreGuiChanged(H,I)if H==Enum.CoreGuiType.Backpack or H==Enum.
CoreGuiType.All then r=I s=not I if s then pcall(function()game:GetService
'GuiService':RemoveKey(x)game:GetService'GuiService':RemoveKey(y)end)else game:
GetService'GuiService':AddKey(x)game:GetService'GuiService':AddKey(y)end
resetSearch()h.Visible=I and q m.Visible=I b.Visible=I f.Visible=I end end
createPublicFunction('CloseBackpack',F)createPublicFunction('BackpackReady',G)
setSelected(F)assert(F)assert(F:IsA'TextButton')F.BackgroundColor3=Color3.new(1,
1,1)F.TextColor3=Color3.new(0,0,0)F.Selected=true F.ZIndex=3 end function
setUnselected(F)assert(F)assert(F:IsA'TextButton')F.BackgroundColor3=Color3.new(
0,0,0)F.TextColor3=Color3.new(1,1,1)F.Selected=false F.ZIndex=1 end function
updateTabGui(F)assert(F)if F=='gear'then setSelected(d)setUnselected(e)elseif F
=='wardrobe'then setSelected(e)setUnselected(d)end end function mouseLeaveTab(F)
assert(F)assert(F:IsA'TextButton')if F.Selected then return end F.
BackgroundColor3=Color3.new(0,0,0)end function mouseOverTab(F)assert(F)assert(F:
IsA'TextButton')if F.Selected then return end F.BackgroundColor3=Color3.new(
0.15294117647058825,0.15294117647058825,0.15294117647058825)end function
newTabClicked(F)assert(F)F=string.lower(F)g=F updateTabGui(F)C:Fire(F)
resetSearch()end function trim(F)return(F:gsub('^%s*(.-)%s*$','%1'))end function
splitByWhitespace(F)if type(F)~='string'then return nil end local G={}for H in
string.gmatch(F,'[^%s]+')do if string.len(H)>0 then table.insert(G,H)end end
return G end function resetSearchBoxGui()k.Visible=false i.Text=v end function
doSearch()local F=i.Text if F==''then resetSearch()return end F=trim(F)k.Visible
=true termTable=splitByWhitespace(F)D:Fire(F)end function resetSearch()
resetSearchBoxGui()D:Fire()end local F=function()p=true end function
coreGuiChanged(G,H)if G==Enum.CoreGuiType.Backpack or G==Enum.CoreGuiType.All
then r=H s=not H if s then pcall(function()game:GetService'GuiService':
RemoveKey(w)game:GetService'GuiService':RemoveKey(x)end)else game:GetService
'GuiService':AddKey(w)game:GetService'GuiService':AddKey(x)end resetSearch()h.
Visible=H and q m.Visible=H a.Visible=H f.Visible=H end end
createPublicFunction('CloseBackpack',E)createPublicFunction('BackpackReady',F)
pcall(function()coreGuiChanged(Enum.CoreGuiType.Backpack,Game.StarterGui:
GetCoreGuiEnabled(Enum.CoreGuiType.Backpack))Game.StarterGui.
CoreGuiChangedSignal:connect(coreGuiChanged)end)e.MouseButton1Click:connect(
function()newTabClicked'gear'end)e.MouseEnter:connect(function()mouseOverTab(e)
end)e.MouseLeave:connect(function()mouseLeaveTab(e)end)if game.CoreGui.Version>=
8 then wardrobeButton.MouseButton1Click:connect(function()newTabClicked
'wardrobe'end)wardrobeButton.MouseEnter:connect(function()mouseOverTab(
wardrobeButton)end)wardrobeButton.MouseLeave:connect(function()mouseLeaveTab(
wardrobeButton)end)end d.MouseButton1Click:connect(closeBackpack)c.Changed:
connect(function(H)if H=='AbsoluteSize'then A:Fire(c.AbsoluteSize)end end)game:
GetService'GuiService':AddKey(x)game:GetService'GuiService':AddKey(y)game:
GetService'GuiService'.KeyPressed:connect(function(H)if not r or s then return
end if H==x or H==y then toggleBackpack()end end)f.MouseButton1Click:connect(
CoreGuiChangedSignal:connect(coreGuiChanged)end)d.MouseButton1Click:connect(
function()newTabClicked'gear'end)d.MouseEnter:connect(function()mouseOverTab(d)
end)d.MouseLeave:connect(function()mouseLeaveTab(d)end)if game.CoreGui.Version>=
8 then e.MouseButton1Click:connect(function()newTabClicked'wardrobe'end)e.
MouseEnter:connect(function()mouseOverTab(e)end)e.MouseLeave:connect(function()
mouseLeaveTab(e)end)end c.MouseButton1Click:connect(closeBackpack)b.Changed:
connect(function(G)if G=='AbsoluteSize'then z:Fire(b.AbsoluteSize)end end)game:
GetService'GuiService':AddKey(w)game:GetService'GuiService':AddKey(x)game:
GetService'GuiService'.KeyPressed:connect(function(G)if not r or s then return
end if G==w or G==x then toggleBackpack()end end)f.MouseButton1Click:connect(
function()if not r or s then return end toggleBackpack()end)if game.Players.
LocalPlayer['Character']then activateBackpack()end game.Players.LocalPlayer.
CharacterAdded:connect(activateBackpack)i.FocusLost:connect(function(H)if H or i
CharacterAdded:connect(activateBackpack)i.FocusLost:connect(function(G)if G or i
.Text~=''then doSearch()elseif i.Text==''then resetSearch()end end)j.
MouseButton1Click:connect(doSearch)k.MouseButton1Click:connect(resetSearch)if h
and l.AbsoluteSize.Y<=320 then h.RobloxLocked=false h:Destroy()end

View File

@ -5,33 +5,33 @@ local function IsPhone()local b=Game:GetService'CoreGui'local c=WaitForChild(b,
local function StringTrim(b)return(b:gsub('^%s*(.-)%s*$','%1'))end while Game.
Players.LocalPlayer==nil do wait(0.03)end local b=Game.Players.LocalPlayer while
b.Character==nil do wait(0.03)end local c=LoadLibrary'RbxUtility'local d,e,f,g,h
,i,j=typedef(c),Game.Workspace.CurrentCamera,Game:GetService'CoreGui',Game:
GetService'Players',Game:GetService'Debris',Game:GetService'GuiService',nil do j
={}local k={}local l,m={__call=function(l,m)return l[m]or l[tonumber(m)]end,
__index={GetEnumItems=function(l)local m={}for n,o in pairs(l)do if type(n)==
'number'then m[#m+1]=o end end table.sort(m,function(p,q)return p.Value<q.Value
end)return m end},__tostring=function(l)return'Enum.'..l[k]end},{__call=function
(l,m)return m==l or m==l.Name or m==l.Value end,__tostring=function(l)return
'Enum.'..l[k]..'.'..l.Name end}function CreateEnum(n)return function(o)local p={
[k]=n}for q,r in pairs(o)do local s=setmetatable({Name=r,Value=q,Enum=p,[k]=n},m
)p[q]=s p[r]=s p[s]=s end j[n]=p return setmetatable(p,l)end end end local k,l={
Mouse=b:GetMouse(),Speed=0,Simulating=false,Configuration={DefaultSpeed=1},
UserIsScrolling=false},{ChatColors={BrickColor.new'Bright red',BrickColor.new
'Bright blue',BrickColor.new'Earth green',BrickColor.new'Bright violet',
BrickColor.new'Bright orange',BrickColor.new'Bright yellow',BrickColor.new
'Light reddish violet',BrickColor.new'Brick yellow'},Gui=nil,Frame=nil,
RenderFrame=nil,TapToChatLabel=nil,ClickToChatButton=nil,ScrollingLock=false,
EventListener=nil,MessageQueue={},Configuration={FontSize=Enum.FontSize.Size12,
NumFontSize=12,HistoryLength=20,Size=UDim2.new(0.38,0,0.2,0),MessageColor=Color3
.new(1,1,1),AdminMessageColor=Color3.new(1,0.8431372549019608,0),XScale=0.025,
LifeTime=45,Position=UDim2.new(0,2,0.05,0),DefaultTweenSpeed=0.15},
SlotPositions_List={},CachedSpaceStrings_List={},MouseOnFrame=false,GotFocus=
false,Messages_List={},MessageThread=nil,Admins_List={'taskmanager','Heliodex',
'tako'},SafeChat_List={['Use the Chat menu to talk to me.']={'/sc 0',true},[
'I can only see menu chats.']={'/sc 1',true},['Hello']={['Hi']={'/sc 2_0',true,[
'Hi there!']=true,['Hi everyone']=true},['Howdy']={'/sc 2_1',true,[
'Howdy partner!']=true},['Greetings']={'/sc 2_2',true,['Greetings everyone']=
true,['Greetings Robloxians!']=true,['Seasons greetings!']=true},['Welcome']={
,i=typedef(c),Game.Workspace.CurrentCamera,Game:GetService'CoreGui',Game:
GetService'Players',Game:GetService'GuiService',nil do i={}local j={}local k,l={
__call=function(k,l)return k[l]or k[tonumber(l)]end,__index={GetEnumItems=
function(k)local l={}for m,n in pairs(k)do if type(m)=='number'then l[#l+1]=n
end end table.sort(l,function(o,p)return o.Value<p.Value end)return l end},
__tostring=function(k)return'Enum.'..k[j]end},{__call=function(k,l)return l==k
or l==k.Name or l==k.Value end,__tostring=function(k)return'Enum.'..k[j]..'.'..k
.Name end}function CreateEnum(m)return function(n)local o={[j]=m}for p,q in
pairs(n)do local r=setmetatable({Name=q,Value=p,Enum=o,[j]=m},l)o[p]=r o[q]=r o[
r]=r end i[m]=o return setmetatable(o,k)end end end local j,k={Mouse=b:GetMouse(
),Speed=0,Simulating=false,Configuration={DefaultSpeed=1},UserIsScrolling=false}
,{ChatColors={BrickColor.new'Bright red',BrickColor.new'Bright blue',BrickColor.
new'Earth green',BrickColor.new'Bright violet',BrickColor.new'Bright orange',
BrickColor.new'Bright yellow',BrickColor.new'Light reddish violet',BrickColor.
new'Brick yellow'},Gui=nil,Frame=nil,RenderFrame=nil,TapToChatLabel=nil,
ClickToChatButton=nil,ScrollingLock=false,EventListener=nil,MessageQueue={},
Configuration={FontSize=Enum.FontSize.Size12,NumFontSize=12,HistoryLength=20,
Size=UDim2.new(0.38,0,0.2,0),MessageColor=Color3.new(1,1,1),AdminMessageColor=
Color3.new(1,0.8431372549019608,0),XScale=0.025,LifeTime=45,Position=UDim2.new(0
,2,0.05,0),DefaultTweenSpeed=0.15},SlotPositions_List={},CachedSpaceStrings_List
={},MouseOnFrame=false,GotFocus=false,Messages_List={},MessageThread=nil,
Admins_List={'taskmanager','Heliodex','tako'},SafeChat_List={[
'Use the Chat menu to talk to me.']={'/sc 0',true},['I can only see menu chats.'
]={'/sc 1',true},['Hello']={['Hi']={'/sc 2_0',true,['Hi there!']=true,[
'Hi everyone']=true},['Howdy']={'/sc 2_1',true,['Howdy partner!']=true},[
'Greetings']={'/sc 2_2',true,['Greetings everyone']=true,[
'Greetings Robloxians!']=true,['Seasons greetings!']=true},['Welcome']={
'/sc 2_3',true,['Welcome to my place']=true,['Welcome to my barbeque']=true,[
'Welcome to our base']=true},['Hey there!']={'/sc 2_4',true},["What's up?"]={
'/sc 2_5',true,['How are you doing?']=true,["How's it going?"]=true,[
@ -196,100 +196,97 @@ true},['Ratings']={['Rate it!']=true,['I give it a 1 out of 10']=true,[
'I give it a 6 out of 10']=true,['I give it a 7 out of 10']=true,[
'I give it a 8 out of 10']=true,['I give it a 9 out of 10']=true,[
'I give it a 10 out of 10!']=true}},CreateEnum'SafeChat'{'Level1','Level2',
'Level3'},SafeChatTree={},TempSpaceLabel=nil}local function GetNameValue(m)local
n=0 for o=1,#m do local p,q=string.byte(string.sub(m,o,o)),#m-o+1 if#m%2==1 then
q=q-1 end if q%4>=2 then p=-p end n=n+p end return n%8 end function l:
ComputeChatColor(m)return self.ChatColors[GetNameValue(m)+1].Color end function
l:EnableScrolling(m)self.MouseOnFrame=false if self.RenderFrame then self.
RenderFrame.MouseEnter:connect(function()local n=b.Character local o,p,q=
WaitForChild(n,'Torso'),WaitForChild(n,'Humanoid'),WaitForChild(n,'Head')if m
then self.MouseOnFrame=true e.CameraType='Scriptable'Spawn(function()local r=e.
CoordinateFrame.p-o.Position while l.MouseOnFrame do e.CoordinateFrame=CFrame.
new(o.Position+r,q.Position)wait(0.015)end end)end end)self.RenderFrame.
MouseLeave:connect(function()e.CameraType='Custom'self.MouseOnFrame=false end)
end end function l:IsTouchDevice()local m=false pcall(function()m=Game:
GetService'UserInputService'.TouchEnabled end)return m end function l:
UpdateQueue(m,n)for o=#self.MessageQueue,1,-1 do if self.MessageQueue[o]then for
p,q in pairs(self.MessageQueue[o])do if q and type(q)~='table'and type(q)~=
'number'then if q:IsA'TextLabel'or q:IsA'TextButton'then if n then q.Position=q.
Position-UDim2.new(0,0,n,0)else if m==self.MessageQueue[o]then q.Position=UDim2.
new(self.Configuration.XScale,0,q.Position.Y.Scale-m['Message'].Size.Y.Scale,0)
Spawn(function()wait(0.05)while q.TextTransparency>=0 do q.TextTransparency=q.
TextTransparency-0.2 wait(0.03)end if q==m['Message']then q.
TextStrokeTransparency=0.8 else q.TextStrokeTransparency=1 end end)else q.
Position=UDim2.new(self.Configuration.XScale,0,q.Position.Y.Scale-m['Message'].
Size.Y.Scale,0)end if q.Position.Y.Scale<-1E-2 then q.Visible=false q:Destroy()
end end end end end end end end function l:CreateScrollBar()end function l:
CheckIfInBounds(m)if#l.MessageQueue<3 then return true end if m>0 and l.
MessageQueue[1]and l.MessageQueue[1]['Player']and l.MessageQueue[1]['Player'].
Position.Y.Scale==0 then return true elseif m<0 and l.MessageQueue[1]and l.
MessageQueue[1]['Player']and l.MessageQueue[1]['Player'].Position.Y.Scale<0 then
return true else return false end return false end function l:ComputeSpaceString
(m)local n=' 'if not self.TempSpaceLabel then self.TempSpaceLabel=d.Create
'TextButton'{Size=UDim2.new(0,m.AbsoluteSize.X,0,m.AbsoluteSize.Y),FontSize=self
.Configuration.FontSize,Parent=self.RenderFrame,BackgroundTransparency=1,Text=n,
Name='SpaceButton'}else self.TempSpaceLabel.Text=n end while self.TempSpaceLabel
.TextBounds.X<m.TextBounds.X do n=n..' 'self.TempSpaceLabel.Text=n end n=n..' '
self.CachedSpaceStrings_List[m.Text]=n self.TempSpaceLabel.Text=''return n end
function l:UpdateChat(m,n)local o={['Player']=m,['Message']=n}if coroutine.
status(l.MessageThread)=='dead'then table.insert(l.Messages_List,o)l.
MessageThread=coroutine.create(function()for p=1,#l.Messages_List do local q=l.
Messages_List[p]l:CreateMessage(q['Player'],q['Message'])end l.Messages_List={}
end)coroutine.resume(l.MessageThread)else table.insert(l.Messages_List,o)end end
function l:RecalculateSpacing()end function l:ApplyFilter(m)end function l:
CreateMessage(m,n)local o if not m then o=''else o=m.Name end n=StringTrim(n)
local p,q if#self.MessageQueue>self.Configuration.HistoryLength then self.
MessageQueue[#self.MessageQueue]=nil end p=d.Create'TextLabel'{Name=o,Text=o..
':',TextColor3=pColor,FontSize=l.Configuration.FontSize,TextXAlignment=Enum.
TextXAlignment.Left,TextYAlignment=Enum.TextYAlignment.Top,Parent=self.
RenderFrame,TextWrapped=false,Size=UDim2.new(1,0,0.1,0),BackgroundTransparency=1
,TextTransparency=1,Position=UDim2.new(0,0,1,0),BorderSizePixel=0,
TextStrokeColor3=Color3.new(0.5,0.5,0.5),TextStrokeTransparency=0.75}local r if
m.Neutral then p.TextColor3=l:ComputeChatColor(o)else p.TextColor3=m.TeamColor.
Color end local s if not self.CachedSpaceStrings_List[o]then s=l:
ComputeSpaceString(p)else s=self.CachedSpaceStrings_List[o]end q=d.Create
'TextLabel'{Name=o..' - message',Size=UDim2.new(1,0,0.5,0),TextColor3=l.
Configuration.MessageColor,FontSize=l.Configuration.FontSize,TextXAlignment=Enum
.TextXAlignment.Left,TextYAlignment=Enum.TextYAlignment.Top,Text='',Parent=self.
RenderFrame,TextWrapped=true,BackgroundTransparency=1,TextTransparency=1,
Position=UDim2.new(0,0,1,0),BorderSizePixel=0,TextStrokeColor3=Color3.new(0,0,0)
}q.Text=s..n if not o then p.Text=''q.TextColor3=Color3.new(0,0.4,1)end for t,u
in pairs(self.Admins_List)do if string.lower(u)==string.lower(o)then q.
TextColor3=self.Configuration.AdminMessageColor end end p.Visible=true q.Visible
=true local v=q.TextBounds.Y q.Size=UDim2.new(1,0,v/self.RenderFrame.
AbsoluteSize.Y,0)p.Size=q.Size local w,x,y=self.RenderFrame.AbsoluteSize.Y,q.
TextBounds.Y,{}y['Player']=p y['Message']=q y['SpawnTime']=tick()table.insert(
self.MessageQueue,1,y)l:UpdateQueue(y)end function l:ScreenSizeChanged()wait()
while self.Frame.AbsoluteSize.Y>120 do self.Frame.Size=self.Frame.Size-UDim2.
new(0,0,0.005,0)end l:RecalculateSpacing()end function l:FindButtonTree(m,n)
local o={}n=n or self.SafeChatTree for p,q in pairs(n)do if p==m then o=n[p]
elseif type(n[p])=='table'then o=l:FindButtonTree(m,n[p])end end return o end
function l:ToggleSafeChatMenu(m)local n=l:FindButtonTree(m,self.SafeChatTree)if
n then for o,p in pairs(n)do if o:IsA'TextButton'or o:IsA'ImageButton'then o.
Visible=not o.Visible end end return true end return false end function l:
CreateSafeChatOptions(m,n)local o={}level=level or 0 local p=0 o[n]={}o[n][1]=m[
1]n=n or self.SafeChatButton for q,r in pairs(m)do if type(q)=='string'then
local s=d.Create'TextButton'{Name=q,Text=q,Size=UDim2.new(0,100,0,20),
'Level3'},SafeChatTree={},TempSpaceLabel=nil}local function GetNameValue(l)local
m=0 for n=1,#l do local o,p=string.byte(string.sub(l,n,n)),#l-n+1 if#l%2==1 then
p=p-1 end if p%4>=2 then o=-o end m=m+o end return m%8 end function k:
ComputeChatColor(l)return self.ChatColors[GetNameValue(l)+1].Color end function
k:EnableScrolling(l)self.MouseOnFrame=false if self.RenderFrame then self.
RenderFrame.MouseEnter:connect(function()local m=b.Character local n,o=
WaitForChild(m,'Torso'),WaitForChild(m,'Head')if l then self.MouseOnFrame=true e
.CameraType='Scriptable'Spawn(function()local p=e.CoordinateFrame.p-n.Position
while k.MouseOnFrame do e.CoordinateFrame=CFrame.new(n.Position+p,o.Position)
wait(0.015)end end)end end)self.RenderFrame.MouseLeave:connect(function()e.
CameraType='Custom'self.MouseOnFrame=false end)end end function k:IsTouchDevice(
)local l=false pcall(function()l=Game:GetService'UserInputService'.TouchEnabled
end)return l end function k:UpdateQueue(l,m)for n=#self.MessageQueue,1,-1 do if
self.MessageQueue[n]then for o,p in pairs(self.MessageQueue[n])do if p and type(
p)~='table'and type(p)~='number'then if p:IsA'TextLabel'or p:IsA'TextButton'then
if m then p.Position=p.Position-UDim2.new(0,0,m,0)else if l==self.MessageQueue[n
]then p.Position=UDim2.new(self.Configuration.XScale,0,p.Position.Y.Scale-l[
'Message'].Size.Y.Scale,0)Spawn(function()wait(0.05)while p.TextTransparency>=0
do p.TextTransparency=p.TextTransparency-0.2 wait(0.03)end if p==l['Message']
then p.TextStrokeTransparency=0.8 else p.TextStrokeTransparency=1 end end)else p
.Position=UDim2.new(self.Configuration.XScale,0,p.Position.Y.Scale-l['Message'].
Size.Y.Scale,0)end if p.Position.Y.Scale<-1E-2 then p.Visible=false p:Destroy()
end end end end end end end end function k:CreateScrollBar()end function k:
CheckIfInBounds(l)if#k.MessageQueue<3 then return true end if l>0 and k.
MessageQueue[1]and k.MessageQueue[1]['Player']and k.MessageQueue[1]['Player'].
Position.Y.Scale==0 then return true elseif l<0 and k.MessageQueue[1]and k.
MessageQueue[1]['Player']and k.MessageQueue[1]['Player'].Position.Y.Scale<0 then
return true else return false end return false end function k:ComputeSpaceString
(l)local m=' 'if not self.TempSpaceLabel then self.TempSpaceLabel=d.Create
'TextButton'{Size=UDim2.new(0,l.AbsoluteSize.X,0,l.AbsoluteSize.Y),FontSize=self
.Configuration.FontSize,Parent=self.RenderFrame,BackgroundTransparency=1,Text=m,
Name='SpaceButton'}else self.TempSpaceLabel.Text=m end while self.TempSpaceLabel
.TextBounds.X<l.TextBounds.X do m=m..' 'self.TempSpaceLabel.Text=m end m=m..' '
self.CachedSpaceStrings_List[l.Text]=m self.TempSpaceLabel.Text=''return m end
function k:UpdateChat(l,m)local n={['Player']=l,['Message']=m}if coroutine.
status(k.MessageThread)=='dead'then table.insert(k.Messages_List,n)k.
MessageThread=coroutine.create(function()for o=1,#k.Messages_List do local p=k.
Messages_List[o]k:CreateMessage(p['Player'],p['Message'])end k.Messages_List={}
end)coroutine.resume(k.MessageThread)else table.insert(k.Messages_List,n)end end
function k:RecalculateSpacing()end function k:CreateMessage(l,m)local n if not l
then n=''else n=l.Name end m=StringTrim(m)local o,p if#self.MessageQueue>self.
Configuration.HistoryLength then self.MessageQueue[#self.MessageQueue]=nil end o
=d.Create'TextLabel'{Name=n,Text=n..':',FontSize=k.Configuration.FontSize,
TextXAlignment=Enum.TextXAlignment.Left,TextYAlignment=Enum.TextYAlignment.Top,
Parent=self.RenderFrame,TextWrapped=false,Size=UDim2.new(1,0,0.1,0),
BackgroundTransparency=1,TextTransparency=1,Position=UDim2.new(0,0,1,0),
BorderSizePixel=0,TextStrokeColor3=Color3.new(0.5,0.5,0.5),
TextStrokeTransparency=0.75}if l.Neutral then o.TextColor3=k:ComputeChatColor(n)
else o.TextColor3=l.TeamColor.Color end local q if not self.
CachedSpaceStrings_List[n]then q=k:ComputeSpaceString(o)else q=self.
CachedSpaceStrings_List[n]end p=d.Create'TextLabel'{Name=n..' - message',Size=
UDim2.new(1,0,0.5,0),TextColor3=k.Configuration.MessageColor,FontSize=k.
Configuration.FontSize,TextXAlignment=Enum.TextXAlignment.Left,TextYAlignment=
Enum.TextYAlignment.Top,Text='',Parent=self.RenderFrame,TextWrapped=true,
BackgroundTransparency=1,TextTransparency=1,Position=UDim2.new(0,0,1,0),
BorderSizePixel=0,TextStrokeColor3=Color3.new(0,0,0)}p.Text=q..m if not n then o
.Text=''p.TextColor3=Color3.new(0,0.4,1)end for r,s in pairs(self.Admins_List)do
if string.lower(s)==string.lower(n)then p.TextColor3=self.Configuration.
AdminMessageColor end end o.Visible=true p.Visible=true local t=p.TextBounds.Y p
.Size=UDim2.new(1,0,t/self.RenderFrame.AbsoluteSize.Y,0)o.Size=p.Size local u={}
u['Player']=o u['Message']=p u['SpawnTime']=tick()table.insert(self.MessageQueue
,1,u)k:UpdateQueue(u)end function k:ScreenSizeChanged()wait()while self.Frame.
AbsoluteSize.Y>120 do self.Frame.Size=self.Frame.Size-UDim2.new(0,0,0.005,0)end
k:RecalculateSpacing()end function k:FindButtonTree(l,m)local n={}m=m or self.
SafeChatTree for o,p in pairs(m)do if o==l then n=m[o]elseif type(m[o])=='table'
then n=k:FindButtonTree(l,m[o])end end return n end function k:
ToggleSafeChatMenu(l)local m=k:FindButtonTree(l,self.SafeChatTree)if m then for
n,o in pairs(m)do if n:IsA'TextButton'or n:IsA'ImageButton'then n.Visible=not n.
Visible end end return true end return false end function k:
CreateSafeChatOptions(l,m)local n={}level=level or 0 local o=0 n[m]={}n[m][1]=l[
1]m=m or self.SafeChatButton for p,q in pairs(l)do if type(p)=='string'then
local r=d.Create'TextButton'{Name=p,Text=p,Size=UDim2.new(0,100,0,20),
TextXAlignment=Enum.TextXAlignment.Center,TextColor3=Color3.new(0.2,0.1,0.1),
BackgroundTransparency=0.5,BackgroundColor3=Color3.new(1,1,1),Parent=self.
SafeChatFrame,Visible=false,Position=UDim2.new(0,n.Position.X.Scale+105,0,n.
Position.Y.Scale-((p-3)*100))}p=p+1 if type(m[q])=='table'then o[n][s]=l:
CreateSafeChatOptions(m[q],s)else end s.MouseEnter:connect(function()l:
ToggleSafeChatMenu(s)end)s.MouseLeave:connect(function()l:ToggleSafeChatMenu(s)
end)s.MouseButton1Click:connect(function()local t=l:FindButtonTree(s)if t then
for u,v in pairs(t)do end else end pcall(function()g:Chat(t[1])end)end)end end
return o end function l:CreateSafeChatGui()self.SafeChatFrame=d.Create'Frame'{
Name='SafeChatFrame',Size=UDim2.new(1,0,1,0),Parent=self.Gui,
BackgroundTransparency=1,d.Create'ImageButton'{Name='SafeChatButton',Size=UDim2.
new(0,44,0,31),Position=UDim2.new(0,1,0.35,0),BackgroundTransparency=1,Image=
'http://www.roblox.com/asset/?id=97080365'}}self.SafeChatButton=self.
SafeChatFrame.SafeChatButton self.SafeChatTree[self.SafeChatButton]=l:
CreateSafeChatOptions(self.SafeChat_List,self.SafeChatButton)self.SafeChatButton
.MouseButton1Click:connect(function()l:ToggleSafeChatMenu(self.SafeChatButton)
end)end function l:FocusOnChatBar()if self.ClickToChatButton then self.
ClickToChatButton.Visible=false end self.GotFocus=true if self.Frame[
SafeChatFrame,Visible=false,Position=UDim2.new(0,m.Position.X.Scale+105,0,m.
Position.Y.Scale-((o-3)*100))}o=o+1 if type(l[p])=='table'then n[m][r]=k:
CreateSafeChatOptions(l[p],r)end r.MouseEnter:connect(function()k:
ToggleSafeChatMenu(r)end)r.MouseLeave:connect(function()k:ToggleSafeChatMenu(r)
end)r.MouseButton1Click:connect(function()local s=k:FindButtonTree(r)pcall(
function()g:Chat(s[1])end)end)end end return n end function k:CreateSafeChatGui(
)self.SafeChatFrame=d.Create'Frame'{Name='SafeChatFrame',Size=UDim2.new(1,0,1,0)
,Parent=self.Gui,BackgroundTransparency=1,d.Create'ImageButton'{Name=
'SafeChatButton',Size=UDim2.new(0,44,0,31),Position=UDim2.new(0,1,0.35,0),
BackgroundTransparency=1,Image='http://www.roblox.com/asset/?id=97080365'}}self.
SafeChatButton=self.SafeChatFrame.SafeChatButton self.SafeChatTree[self.
SafeChatButton]=k:CreateSafeChatOptions(self.SafeChat_List,self.SafeChatButton)
self.SafeChatButton.MouseButton1Click:connect(function()k:ToggleSafeChatMenu(
self.SafeChatButton)end)end function k:FocusOnChatBar()if self.ClickToChatButton
then self.ClickToChatButton.Visible=false end self.GotFocus=true if self.Frame[
'Background']then self.Frame.Background.Visible=false end self.ChatBar:
CaptureFocus()end function l:CreateTouchButton()self.ChatTouchFrame=d.Create
CaptureFocus()end function k:CreateTouchButton()self.ChatTouchFrame=d.Create
'Frame'{Name='ChatTouchFrame',Size=UDim2.new(0,128,0,32),Position=UDim2.new(0,88
,0,0),BackgroundTransparency=1,Parent=self.Gui,d.Create'ImageButton'{Name=
'ChatLabel',Size=UDim2.new(0,74,0,28),Position=UDim2.new(0,0,0,0),
@ -303,8 +300,8 @@ Parent=self.Frame,TextXAlignment=Enum.TextXAlignment.Left,TextColor3=Color3.new(
1,1,1),ClearTextOnFocus=false}self.TapToChatLabel.MouseButton1Click:connect(
function()self.TapToChatLabel.Visible=false self.ChatBar:CaptureFocus()self.
GotFocus=true if self.TouchLabelBackground then self.TouchLabelBackground.
Visible=false end end)end function l:CreateChatBar()local m,n=pcall(function()
return i.UseLuaChat end)if a or(m and n)then self.ClickToChatButton=d.Create
Visible=false end end)end function k:CreateChatBar()local l,m=pcall(function()
return h.UseLuaChat end)if a or(l and m)then self.ClickToChatButton=d.Create
'TextButton'{Name='ClickToChat',Size=UDim2.new(1,0,0,20),BackgroundTransparency=
1,ZIndex=2,Parent=self.Gui,Text='To chat click here or press "/" key',TextColor3
=Color3.new(1,1,0.9),Position=UDim2.new(0,0,1,0),TextXAlignment=Enum.
@ -312,71 +309,69 @@ TextXAlignment.Left,FontSize=Enum.FontSize.Size12}self.ChatBar=d.Create'TextBox'
{Name='ChatBar',Size=UDim2.new(1,0,0,20),Position=UDim2.new(0,0,1,0),Text='',
ZIndex=1,BackgroundColor3=Color3.new(0,0,0),BackgroundTransparency=0.25,Parent=
self.Gui,TextXAlignment=Enum.TextXAlignment.Left,TextColor3=Color3.new(1,1,1),
FontSize=Enum.FontSize.Size12,ClearTextOnFocus=false,Text=''}local o,p=pcall(
function()i:SetGlobalGuiInset(0,0,0,20)end)if not o then i:
SetGlobalSizeOffsetPixel(0,-20)end i:AddSpecialKey(Enum.SpecialKey.ChatHotkey)i.
SpecialKeyPressed:connect(function(q)if q==Enum.SpecialKey.ChatHotkey then l:
FocusOnChatBar()end end)self.ClickToChatButton.MouseButton1Click:connect(
function()l:FocusOnChatBar()end)end end function l:CreateGui()self.Gui=
WaitForChild(f,'RobloxGui')self.Frame=d.Create'Frame'{Name='ChatFrame',Size=
UDim2.new(0,500,0,120),Position=UDim2.new(0,0,0,5),BackgroundTransparency=1,
ZIndex=0,Parent=self.Gui,Active=false,d.Create'ImageLabel'{Name='Background',
Image='http://www.roblox.com/asset/?id=97120937',Size=UDim2.new(1.3,0,1.64,0),
Position=UDim2.new(0,0,0,0),BackgroundTransparency=1,ZIndex=0,Visible=false},d.
Create'Frame'{Name='Border',Size=UDim2.new(1,0,0,1),Position=UDim2.new(0,0,0.8,0
),BackgroundTransparency=0,BackgroundColor3=Color3.new(0.9254901960784314,
0.9254901960784314,0.9254901960784314),BorderSizePixel=0,Visible=false},d.Create
'Frame'{Name='ChatRenderFrame',Size=UDim2.new(1.02,0,1.01,0),Position=UDim2.new(
0,0,0,0),BackgroundTransparency=1,ZIndex=0,Active=false}}Spawn(function()wait(
0.5)if IsPhone()then self.Frame.Size=UDim2.new(0,280,0,120)end end)self.
RenderFrame=self.Frame.ChatRenderFrame if l:IsTouchDevice()then self.Frame.
Position=self.Configuration.Position self.RenderFrame.Size=UDim2.new(1,0,1,0)
elseif self.Frame.AbsoluteSize.Y>120 then l:ScreenSizeChanged()self.Gui.Changed:
connect(function(m)if m=='AbsoluteSize'then l:ScreenSizeChanged()end end)end if
a or b.ChatMode==Enum.ChatMode.TextAndMenu then if l:IsTouchDevice()then l:
CreateTouchButton()else l:CreateChatBar()end if self.ChatBar then self.ChatBar.
FocusLost:connect(function(m)l.GotFocus=false if l:IsTouchDevice()then self.
FontSize=Enum.FontSize.Size12,ClearTextOnFocus=false}local n,o=pcall(function()h
:SetGlobalGuiInset(0,0,0,20)end)if not n then h:SetGlobalSizeOffsetPixel(0,-20)
end h:AddSpecialKey(Enum.SpecialKey.ChatHotkey)h.SpecialKeyPressed:connect(
function(p)if p==Enum.SpecialKey.ChatHotkey then k:FocusOnChatBar()end end)self.
ClickToChatButton.MouseButton1Click:connect(function()k:FocusOnChatBar()end)end
end function k:CreateGui()self.Gui=WaitForChild(f,'RobloxGui')self.Frame=d.
Create'Frame'{Name='ChatFrame',Size=UDim2.new(0,500,0,120),Position=UDim2.new(0,
0,0,5),BackgroundTransparency=1,ZIndex=0,Parent=self.Gui,Active=false,d.Create
'ImageLabel'{Name='Background',Image='http://www.roblox.com/asset/?id=97120937',
Size=UDim2.new(1.3,0,1.64,0),Position=UDim2.new(0,0,0,0),BackgroundTransparency=
1,ZIndex=0,Visible=false},d.Create'Frame'{Name='Border',Size=UDim2.new(1,0,0,1),
Position=UDim2.new(0,0,0.8,0),BackgroundTransparency=0,BackgroundColor3=Color3.
new(0.9254901960784314,0.9254901960784314,0.9254901960784314),BorderSizePixel=0,
Visible=false},d.Create'Frame'{Name='ChatRenderFrame',Size=UDim2.new(1.02,0,1.01
,0),Position=UDim2.new(0,0,0,0),BackgroundTransparency=1,ZIndex=0,Active=false}}
Spawn(function()wait(0.5)if IsPhone()then self.Frame.Size=UDim2.new(0,280,0,120)
end end)self.RenderFrame=self.Frame.ChatRenderFrame if k:IsTouchDevice()then
self.Frame.Position=self.Configuration.Position self.RenderFrame.Size=UDim2.new(
1,0,1,0)elseif self.Frame.AbsoluteSize.Y>120 then k:ScreenSizeChanged()self.Gui.
Changed:connect(function(l)if l=='AbsoluteSize'then k:ScreenSizeChanged()end end
)end if a or b.ChatMode==Enum.ChatMode.TextAndMenu then if k:IsTouchDevice()then
k:CreateTouchButton()else k:CreateChatBar()end if self.ChatBar then self.ChatBar
.FocusLost:connect(function(l)k.GotFocus=false if k:IsTouchDevice()then self.
ChatBar.Visible=false self.TapToChatLabel.Visible=true if self.
TouchLabelBackground then self.TouchLabelBackground.Visible=true end end if m
and self.ChatBar.Text~=''then local n=self.ChatBar.Text if string.sub(self.
ChatBar.Text,1,1)=='%'then n='(TEAM) '..string.sub(n,2,#n)pcall(function()g:
TeamChat(n)end)else pcall(function()g:Chat(n)end)end if self.ClickToChatButton
TouchLabelBackground then self.TouchLabelBackground.Visible=true end end if l
and self.ChatBar.Text~=''then local m=self.ChatBar.Text if string.sub(self.
ChatBar.Text,1,1)=='%'then m='(TEAM) '..string.sub(m,2,#m)pcall(function()g:
TeamChat(m)end)else pcall(function()g:Chat(m)end)end if self.ClickToChatButton
then self.ClickToChatButton.Visible=true end self.ChatBar.Text=''end Spawn(
function()wait(5)if not l.GotFocus then l.Frame.Background.Visible=false end end
)end)end end end function k:OnMouseScroll()Spawn(function()while k.Speed~=0 do
if k.Speed>1 then while k.Speed>0 do k.Speed=k.Speed-1 wait(0.25)end elseif k.
Speed<0 then while k.Speed<0 do k.Speed=k.Speed+1 wait(0.25)end end wait(0.03)
end end)if l:CheckIfInBounds(k.Speed)then return end l:ScrollQueue()end function
k:ApplySpeed(m)k.Speed=k.Speed+m if not self.Simulating then k:OnMouseScroll()
end end function k:Initialize()self.Mouse.WheelBackward:connect(function()k:
function()wait(5)if not k.GotFocus then k.Frame.Background.Visible=false end end
)end)end end end function j:OnMouseScroll()Spawn(function()while j.Speed~=0 do
if j.Speed>1 then while j.Speed>0 do j.Speed=j.Speed-1 wait(0.25)end elseif j.
Speed<0 then while j.Speed<0 do j.Speed=j.Speed+1 wait(0.25)end end wait(0.03)
end end)if k:CheckIfInBounds(j.Speed)then return end k:ScrollQueue()end function
j:ApplySpeed(l)j.Speed=j.Speed+l if not self.Simulating then j:OnMouseScroll()
end end function j:Initialize()self.Mouse.WheelBackward:connect(function()j:
ApplySpeed(self.Configuration.DefaultSpeed)end)self.Mouse.WheelForward:connect(
function()k:ApplySpeed(self.Configuration.DefaultSpeed)end)end function l:
FindMessageInSafeChat(m,n)local o=false for p,q in pairs(n)do if p==m then
return true end if type(n[p])=='table'then o=l:FindMessageInSafeChat(m,n[p])if o
then return true end end end return o end function l:PlayerChatted(...)local m,n
,o,p={...},select('#',...),nil,nil if m[2]then o=m[2]end if m[3]then p=m[3]if
string.sub(p,1,1)=='%'then p='(TEAM) '..string.sub(p,2,#p)end end if g.
ClassicChat then if string.sub(p,1,3)=='/e 'or string.sub(p,1,7)=='/emote 'then
elseif a or b.ChatMode==Enum.ChatMode.TextAndMenu then l:UpdateChat(o,p)elseif b
.ChatMode==Enum.ChatMode.Menu and string.sub(p,1,3)=='/sc'then l:UpdateChat(o,p)
else if l:FindMessageInSafeChat(p,self.SafeChat_List)then l:UpdateChat(o,p)end
end end end function l:CullThread()while true do if#self.MessageQueue>0 then for
m,n in pairs(self.MessageQueue)do if n['SpawnTime']and n['Player']and n[
'Message']and tick()-n['SpawnTime']>self.Configuration.LifeTime then n['Player']
.Visible=false n['Message'].Visible=false end end end wait(5)end end function l:
LockAllFields(m)local n=m:GetChildren()for o=1,#n do n[o].RobloxLocked=true if#n
[o]:GetChildren()>0 then l:LockAllFields(n[o])end end end function l:
CoreGuiChanged(m,n)if m==Enum.CoreGuiType.Chat or m==Enum.CoreGuiType.All then
if self.Frame then self.Frame.Visible=n end if not l:IsTouchDevice()and self.
ChatBar then self.ChatBar.Visible=n if n then i:SetGlobalGuiInset(0,0,0,20)else
i:SetGlobalGuiInset(0,0,0,0)end end end end function l:Initialize()l:CreateGui()
pcall(function()l:CoreGuiChanged(Enum.CoreGuiType.Chat,Game.StarterGui:
function()j:ApplySpeed(self.Configuration.DefaultSpeed)end)end function k:
FindMessageInSafeChat(l,m)local n=false for o,p in pairs(m)do if o==l then
return true end if type(m[o])=='table'then n=k:FindMessageInSafeChat(l,m[o])if n
then return true end end end return n end function k:PlayerChatted(...)local l,m
,n={...},nil,nil if l[2]then m=l[2]end if l[3]then n=l[3]if string.sub(n,1,1)==
'%'then n='(TEAM) '..string.sub(n,2,#n)end end if g.ClassicChat then if string.
sub(n,1,3)=='/e 'or string.sub(n,1,7)=='/emote 'then elseif(a or b.ChatMode==
Enum.ChatMode.TextAndMenu)or(b.ChatMode==Enum.ChatMode.Menu and string.sub(n,1,3
)=='/sc')or(k:FindMessageInSafeChat(n,self.SafeChat_List))then k:UpdateChat(m,n)
end end end function k:CullThread()while true do if#self.MessageQueue>0 then for
l,m in pairs(self.MessageQueue)do if m['SpawnTime']and m['Player']and m[
'Message']and tick()-m['SpawnTime']>self.Configuration.LifeTime then m['Player']
.Visible=false m['Message'].Visible=false end end end wait(5)end end function k:
LockAllFields(l)local m=l:GetChildren()for n=1,#m do m[n].RobloxLocked=true if#m
[n]:GetChildren()>0 then k:LockAllFields(m[n])end end end function k:
CoreGuiChanged(l,m)if l==Enum.CoreGuiType.Chat or l==Enum.CoreGuiType.All then
if self.Frame then self.Frame.Visible=m end if not k:IsTouchDevice()and self.
ChatBar then self.ChatBar.Visible=m if m then h:SetGlobalGuiInset(0,0,0,20)else
h:SetGlobalGuiInset(0,0,0,0)end end end end function k:Initialize()k:CreateGui()
pcall(function()k:CoreGuiChanged(Enum.CoreGuiType.Chat,Game.StarterGui:
GetCoreGuiEnabled(Enum.CoreGuiType.Chat))Game.StarterGui.CoreGuiChangedSignal:
connect(function(m,n)l:CoreGuiChanged(m,n)end)end)self.EventListener=g.
PlayerChatted:connect(function(...)l:PlayerChatted(...)end)self.MessageThread=
coroutine.create(function()end)coroutine.resume(self.MessageThread)k:Initialize(
)g.ChildAdded:connect(function()l.EventListener:disconnect()self.EventListener=g
.PlayerChatted:connect(function(...)l:PlayerChatted(...)end)end)Spawn(function()
l:CullThread()end)self.Frame.RobloxLocked=true l:LockAllFields(self.Frame)self.
Frame.DescendantAdded:connect(function(m)l:LockAllFields(m)end)end l:Initialize(
connect(function(l,m)k:CoreGuiChanged(l,m)end)end)self.EventListener=g.
PlayerChatted:connect(function(...)k:PlayerChatted(...)end)self.MessageThread=
coroutine.create(function()end)coroutine.resume(self.MessageThread)j:Initialize(
)g.ChildAdded:connect(function()k.EventListener:disconnect()self.EventListener=g
.PlayerChatted:connect(function(...)k:PlayerChatted(...)end)end)Spawn(function()
k:CullThread()end)self.Frame.RobloxLocked=true k:LockAllFields(self.Frame)self.
Frame.DescendantAdded:connect(function(l)k:LockAllFields(l)end)end k:Initialize(
)