Further optimisations of corescripts

This commit is contained in:
Lewin Kelly 2023-04-13 01:57:56 +01:00
parent 3cc782a49c
commit 5a6acac25c
29 changed files with 3415 additions and 3468 deletions

View File

@ -161,7 +161,7 @@ function signalPromptEnded(isSuccess)
end end
-- make sure our gui displays the proper purchase data, and set the productid we will try and buy if use specifies a buy action -- make sure our gui displays the proper purchase data, and set the productid we will try and buy if use specifies a buy action
function updatePurchasePromptData(toggleColoredText) function updatePurchasePromptData(_)
local newItemDescription = "" local newItemDescription = ""
-- id to use when we request a purchase -- id to use when we request a purchase
@ -199,7 +199,7 @@ end
function doPlayerFundsCheck(checkIndefinitely) function doPlayerFundsCheck(checkIndefinitely)
if checkingPlayerFunds then if checkingPlayerFunds then
canPurchase, insufficientFunds = canPurchaseItem() -- check again to see if we can buy item local canPurchase, insufficientFunds = canPurchaseItem() -- check again to see if we can buy item
if canPurchase and insufficientFunds then -- wait a bit and try a few more times if canPurchase and insufficientFunds then -- wait a bit and try a few more times
local retries = 1000 local retries = 1000
while (retries > 0 or checkIndefinitely) and insufficientFunds and checkingPlayerFunds and canPurchase do while (retries > 0 or checkIndefinitely) and insufficientFunds and checkingPlayerFunds and canPurchase do
@ -344,7 +344,7 @@ function purchaseFailed(inGamePurchasesDisabled)
end end
-- user has specified they want to buy an item, now try to attempt to buy it for them -- user has specified they want to buy an item, now try to attempt to buy it for them
function doAcceptPurchase(currencyPreferredByUser) function doAcceptPurchase(_)
showPurchasing() -- shows a purchasing ui (shows spinner) showPurchasing() -- shows a purchasing ui (shows spinner)
local startTime = tick() local startTime = tick()
@ -813,24 +813,24 @@ function canPurchaseItem()
return true, insufficientFunds return true, insufficientFunds
end end
function computeSpaceString(pLabel) -- function computeSpaceString(pLabel)
local nString = " " -- local nString = " "
local tempSpaceLabel = Instance.new "TextButton" -- local tempSpaceLabel = Instance.new "TextButton"
tempSpaceLabel.Size = UDim2.new(0, pLabel.AbsoluteSize.X, 0, pLabel.AbsoluteSize.Y) -- tempSpaceLabel.Size = UDim2.new(0, pLabel.AbsoluteSize.X, 0, pLabel.AbsoluteSize.Y)
tempSpaceLabel.FontSize = pLabel.FontSize -- tempSpaceLabel.FontSize = pLabel.FontSize
tempSpaceLabel.Parent = pLabel.Parent -- tempSpaceLabel.Parent = pLabel.Parent
tempSpaceLabel.BackgroundTransparency = 1 -- tempSpaceLabel.BackgroundTransparency = 1
tempSpaceLabel.Text = nString -- tempSpaceLabel.Text = nString
tempSpaceLabel.Name = "SpaceButton" -- tempSpaceLabel.Name = "SpaceButton"
while tempSpaceLabel.TextBounds.X < pLabel.TextBounds.X do -- while tempSpaceLabel.TextBounds.X < pLabel.TextBounds.X do
nString = nString .. " " -- nString = nString .. " "
tempSpaceLabel.Text = nString -- tempSpaceLabel.Text = nString
end -- end
nString = nString .. " " -- nString = nString .. " "
tempSpaceLabel.Text = "" -- tempSpaceLabel.Text = ""
return nString -- return nString
end -- end
---------------------------------------------- End Data Functions ----------------------------------------------------- ---------------------------------------------- End Data Functions -----------------------------------------------------
@ -1149,7 +1149,7 @@ function setHeaderText(text)
purchaseDialog.TitleBackdrop.Text = text purchaseDialog.TitleBackdrop.Text = text
end end
function cutSizeInHalfRecursive(instance) function cutSizeInHalfRecursive(_)
-- todo: change the gui size based on how much space we have -- todo: change the gui size based on how much space we have
--[[changeSize(instance,0.5) --[[changeSize(instance,0.5)
@ -1159,7 +1159,7 @@ function cutSizeInHalfRecursive(instance)
end]] end]]
end end
function doubleSizeRecursive(instance) function doubleSizeRecursive(_)
-- todo: change the gui size based on how much space we have -- todo: change the gui size based on how much space we have
--[[changeSize(instance,2) --[[changeSize(instance,2)

View File

@ -189,8 +189,8 @@ function followThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocati
thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation, thumbstickFrame) thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation, thumbstickFrame)
-- a bit of error checking to make sure thumbsticks stay close to eachother -- a bit of error checking to make sure thumbsticks stay close to eachother
thumbstickFramePosition = Vector2.new(thumbstickFrame.Position.X.Offset, thumbstickFrame.Position.Y.Offset) local thumbstickFramePosition = Vector2.new(thumbstickFrame.Position.X.Offset, thumbstickFrame.Position.Y.Offset)
thumbstickOuterPosition = Vector2.new(thumbstickOuter.Position.X.Offset, thumbstickOuter.Position.Y.Offset) local thumbstickOuterPosition = Vector2.new(thumbstickOuter.Position.X.Offset, thumbstickOuter.Position.Y.Offset)
if DistanceBetweenTwoPoints(thumbstickFramePosition, thumbstickOuterPosition) > thumbstickSize / 2 then if DistanceBetweenTwoPoints(thumbstickFramePosition, thumbstickOuterPosition) > thumbstickSize / 2 then
local vectorWithLength = (thumbstickOuterPosition - thumbstickFramePosition).unit * thumbstickSize / 2 local vectorWithLength = (thumbstickOuterPosition - thumbstickFramePosition).unit * thumbstickSize / 2
thumbstickOuter.Position = UDim2.new( thumbstickOuter.Position = UDim2.new(
@ -573,7 +573,7 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
if cameraTouch == nil and not usedByThumbstick then if cameraTouch == nil and not usedByThumbstick then
cameraTouch = inputObject cameraTouch = inputObject
lastPos = Vector2.new(cameraTouch.Position.x, cameraTouch.Position.y) lastPos = Vector2.new(cameraTouch.Position.x, cameraTouch.Position.y)
lastTick = tick() -- lastTick = tick()
end end
end) end)
userInputService.InputChanged:connect(function(inputObject) userInputService.InputChanged:connect(function(inputObject)

View File

@ -426,7 +426,7 @@ function initializeDeveloperConsole()
Size = UDim2.new(0, 185, 0, 20), Size = UDim2.new(0, 185, 0, 20),
Font = "SourceSansBold", Font = "SourceSansBold",
FontSize = Enum.FontSize.Size18, FontSize = Enum.FontSize.Size18,
Text = "Server Console", -- Text = "Server Console",
TextColor3 = Color3.new(1, 1, 1), TextColor3 = Color3.new(1, 1, 1),
Text = "Roblox Developer Console", Text = "Roblox Developer Console",
TextYAlignment = Enum.TextYAlignment.Top, TextYAlignment = Enum.TextYAlignment.Top,
@ -440,6 +440,9 @@ function initializeDeveloperConsole()
local pSize = nil local pSize = nil
local previousMousePosScroll = nil local previousMousePosScroll = nil
local pScrollHandle = nil
local pOffset = nil local pOffset = nil
local scrollUpIsDown = false local scrollUpIsDown = false

View File

@ -111,7 +111,7 @@ myHealth.Changed:connect(setMaxHealth)
-- Visual Effects -- -- Visual Effects --
fireEffect = Instance.new "Fire" local fireEffect = Instance.new "Fire"
fireEffect.Heat = 0.1 fireEffect.Heat = 0.1
fireEffect.Size = 3.0 fireEffect.Size = 3.0
fireEffect.Name = "FireEffect" fireEffect.Name = "FireEffect"
@ -125,11 +125,11 @@ while true do
if health > 0 then -- and health < Humanoid.MaxHealth then if health > 0 then -- and health < Humanoid.MaxHealth then
local delta = 0 local delta = 0
if config then if config then
regen = config:FindFirstChild "Regen" local regen = config:FindFirstChild "Regen"
poison = config:FindFirstChild "Poison" local poison = config:FindFirstChild "Poison"
ice = config:FindFirstChild "Ice" local ice = config:FindFirstChild "Ice"
fire = config:FindFirstChild "Fire" local fire = config:FindFirstChild "Fire"
stun = config:FindFirstChild "Stun" local stun = config:FindFirstChild "Stun"
if regen then if regen then
delta = delta + regen.Value.X delta = delta + regen.Value.X
if regen.Value.Y >= 0 then if regen.Value.Y >= 0 then
@ -200,7 +200,7 @@ while true do
else else
Torso.Anchored = false Torso.Anchored = false
for i = 1, #backpackTools do for i = 1, #backpackTools do
rbTool = backpackTools[i]:FindFirstChild "RobloxBuildTool" local rbTool = backpackTools[i]:FindFirstChild "RobloxBuildTool"
if rbTool then if rbTool then
rbTool:Remove() rbTool:Remove()
end end
@ -208,7 +208,7 @@ while true do
end end
wait(0.2) wait(0.2)
for i = 1, #backpackTools do for i = 1, #backpackTools do
wasInCharacter = backpackTools[i]:FindFirstChild "InCharTag" local wasInChar = backpackTools[i]:FindFirstChild "InCharTag"
if wasInChar then if wasInChar then
wasInChar:Remove() wasInChar:Remove()
backpackTools[i].Parent = script.Parent backpackTools[i].Parent = script.Parent
@ -221,8 +221,7 @@ while true do
end end
if delta ~= 0 then if delta ~= 0 then
newCo = coroutine.create(billboardHealthChange) coroutine.resume(coroutine.create(billboardHealthChange), delta)
coroutine.resume(newCo, delta)
end end
--delta = delta * .01 --delta = delta * .01
end end

View File

@ -328,7 +328,7 @@ function initialize(parent)
mainFrame.Style = Enum.FrameStyle.ChatBlue mainFrame.Style = Enum.FrameStyle.ChatBlue
mainFrame.Visible = false mainFrame.Visible = false
imageLabel = Instance.new "ImageLabel" local imageLabel = Instance.new "ImageLabel"
imageLabel.Name = "Tail" imageLabel.Name = "Tail"
imageLabel.Size = UDim2.new(0, 62, 0, 53) imageLabel.Size = UDim2.new(0, 62, 0, 53)
imageLabel.Position = UDim2.new(1, 8, 0.25) imageLabel.Position = UDim2.new(1, 8, 0.25)
@ -354,7 +354,7 @@ function presentDialogChoices(talkingPart, dialogChoices)
end end
currentConversationPartner = talkingPart currentConversationPartner = talkingPart
sortedDialogChoices = {} local sortedDialogChoices = {}
for _, obj in pairs(dialogChoices) do for _, obj in pairs(dialogChoices) do
if obj:IsA "DialogChoice" then if obj:IsA "DialogChoice" then
table.insert(sortedDialogChoices, obj) table.insert(sortedDialogChoices, obj)

File diff suppressed because it is too large Load Diff

View File

@ -33,8 +33,8 @@ local recordingVideo = false
local currentMenuSelection = nil local currentMenuSelection = nil
local lastMenuSelection = {} local lastMenuSelection = {}
local defaultPosition = UDim2.new(0, 0, 0, 0) -- local defaultPosition = UDim2.new(0, 0, 0, 0)
local newGuiPlaces = { 0, 41324860 } -- local newGuiPlaces = { 0, 41324860 }
local centerDialogs = {} local centerDialogs = {}
local mainShield = nil local mainShield = nil
@ -53,7 +53,7 @@ end
local function robloxLock(instance) local function robloxLock(instance)
instance.RobloxLocked = true instance.RobloxLocked = true
children = instance:GetChildren() local children = instance:GetChildren()
if children then if children then
for _, child in ipairs(children) do for _, child in ipairs(children) do
robloxLock(child) robloxLock(child)
@ -1312,7 +1312,7 @@ local function createGameSettingsMenu(baseZIndex, _)
backButton.ZIndex = baseZIndex + 4 backButton.ZIndex = baseZIndex + 4
backButton.Parent = gameSettingsMenuFrame backButton.Parent = gameSettingsMenuFrame
local syncVideoCaptureSetting syncVideoCaptureSetting = nil
if not macClient then if not macClient then
local videoCaptureLabel = Instance.new "TextLabel" local videoCaptureLabel = Instance.new "TextLabel"
@ -1937,7 +1937,7 @@ if LoadLibrary then
shield.BackgroundTransparency = 0.4 shield.BackgroundTransparency = 0.4
shield.ZIndex = baseZIndex + 1 shield.ZIndex = baseZIndex + 1
local closeAndResetDialgo local closeAndResetDialog
local messageBoxButtons = {} local messageBoxButtons = {}
messageBoxButtons[1] = {} messageBoxButtons[1] = {}
@ -2037,7 +2037,7 @@ if LoadLibrary then
local children = players:GetChildren() local children = players:GetChildren()
local pos = 1 local pos = 1
if children then if children then
for i, player in ipairs(children) do for _, player in ipairs(children) do
if player:IsA "Player" and player ~= localPlayer then if player:IsA "Player" and player ~= localPlayer then
playerNames[pos] = player.Name playerNames[pos] = player.Name
nameToPlayer[player.Name] = player nameToPlayer[player.Name] = player
@ -2229,90 +2229,90 @@ if LoadLibrary then
return shield return shield
end end
local createChatBar = function() -- local createChatBar = function()
--Only show a chat bar if we are a NetworkClient -- --Only show a chat bar if we are a NetworkClient
waitForChild(game, "NetworkClient") -- waitForChild(game, "NetworkClient")
waitForChild(game, "Players") -- waitForChild(game, "Players")
waitForProperty(game.Players, "LocalPlayer") -- waitForProperty(game.Players, "LocalPlayer")
local chatBar = Instance.new "Frame" -- local chatBar = Instance.new "Frame"
chatBar.Name = "ChatBar" -- chatBar.Name = "ChatBar"
chatBar.Size = UDim2.new(1, 0, 0, 22) -- chatBar.Size = UDim2.new(1, 0, 0, 22)
chatBar.Position = UDim2.new(0, 0, 1, 0) -- chatBar.Position = UDim2.new(0, 0, 1, 0)
chatBar.BackgroundColor3 = Color3.new(0, 0, 0) -- chatBar.BackgroundColor3 = Color3.new(0, 0, 0)
chatBar.BorderSizePixel = 0 -- chatBar.BorderSizePixel = 0
local chatBox = Instance.new "TextBox" -- local chatBox = Instance.new "TextBox"
chatBox.Text = "" -- chatBox.Text = ""
chatBox.Visible = false -- chatBox.Visible = false
chatBox.Size = UDim2.new(1, -4, 1, 0) -- chatBox.Size = UDim2.new(1, -4, 1, 0)
chatBox.Position = UDim2.new(0, 2, 0, 0) -- chatBox.Position = UDim2.new(0, 2, 0, 0)
chatBox.TextXAlignment = Enum.TextXAlignment.Left -- chatBox.TextXAlignment = Enum.TextXAlignment.Left
chatBox.Font = Enum.Font.Arial -- chatBox.Font = Enum.Font.Arial
chatBox.ClearTextOnFocus = false -- chatBox.ClearTextOnFocus = false
chatBox.FontSize = Enum.FontSize.Size14 -- chatBox.FontSize = Enum.FontSize.Size14
chatBox.TextColor3 = Color3.new(1, 1, 1) -- chatBox.TextColor3 = Color3.new(1, 1, 1)
chatBox.BackgroundTransparency = 1 -- chatBox.BackgroundTransparency = 1
--chatBox.Parent = chatBar -- --chatBox.Parent = chatBar
local chatButton = Instance.new "TextButton" -- local chatButton = Instance.new "TextButton"
chatButton.Size = UDim2.new(1, -4, 1, 0) -- chatButton.Size = UDim2.new(1, -4, 1, 0)
chatButton.Position = UDim2.new(0, 2, 0, 0) -- chatButton.Position = UDim2.new(0, 2, 0, 0)
chatButton.AutoButtonColor = false -- chatButton.AutoButtonColor = false
chatButton.Text = 'To chat click here or press "/" key' -- chatButton.Text = 'To chat click here or press "/" key'
chatButton.TextXAlignment = Enum.TextXAlignment.Left -- chatButton.TextXAlignment = Enum.TextXAlignment.Left
chatButton.Font = Enum.Font.Arial -- chatButton.Font = Enum.Font.Arial
chatButton.FontSize = Enum.FontSize.Size14 -- chatButton.FontSize = Enum.FontSize.Size14
chatButton.TextColor3 = Color3.new(1, 1, 1) -- chatButton.TextColor3 = Color3.new(1, 1, 1)
chatButton.BackgroundTransparency = 1 -- chatButton.BackgroundTransparency = 1
--chatButton.Parent = chatBar -- --chatButton.Parent = chatBar
local activateChat = function() -- local activateChat = function()
if chatBox.Visible then -- if chatBox.Visible then
return -- return
end -- end
chatButton.Visible = false -- chatButton.Visible = false
chatBox.Text = "" -- chatBox.Text = ""
chatBox.Visible = true -- chatBox.Visible = true
chatBox:CaptureFocus() -- chatBox:CaptureFocus()
end -- end
chatButton.MouseButton1Click:connect(activateChat) -- chatButton.MouseButton1Click:connect(activateChat)
-- local hotKeyEnabled = true -- -- local hotKeyEnabled = true
local toggleHotKey = function(_) -- local toggleHotKey = function(_)
-- hotKeyEnabled = value -- -- hotKeyEnabled = value
end -- end
-- local guiService = game:GetService "GuiService" -- -- local guiService = game:GetService "GuiService"
--[[local newChatMode = ]]pcall(function() -- --[[local newChatMode = ]]pcall(function()
--guiService:AddSpecialKey(Enum.SpecialKey.ChatHotkey) -- --guiService:AddSpecialKey(Enum.SpecialKey.ChatHotkey)
--guiService.SpecialKeyPressed:connect(function(key) if key == Enum.SpecialKey.ChatHotkey and hotKeyEnabled then activateChat() end end) -- --guiService.SpecialKeyPressed:connect(function(key) if key == Enum.SpecialKey.ChatHotkey and hotKeyEnabled then activateChat() end end)
end) -- end)
-- if not newChatMode then -- -- if not newChatMode then
--guiService:AddKey("/") -- --guiService:AddKey("/")
--guiService.KeyPressed:connect(function(key) if key == "/" and hotKeyEnabled then activateChat() end end) -- --guiService.KeyPressed:connect(function(key) if key == "/" and hotKeyEnabled then activateChat() end end)
-- end -- -- end
chatBox.FocusLost:connect(function(enterPressed) -- chatBox.FocusLost:connect(function(enterPressed)
if enterPressed then -- if enterPressed then
if chatBox.Text ~= "" then -- if chatBox.Text ~= "" then
local str = chatBox.Text -- local str = chatBox.Text
if string.sub(str, 1, 1) == "%" then -- if string.sub(str, 1, 1) == "%" then
game.Players:TeamChat(string.sub(str, 2)) -- game.Players:TeamChat(string.sub(str, 2))
else -- else
game.Players:Chat(str) -- game.Players:Chat(str)
end -- end
end -- end
end -- end
chatBox.Text = "" -- chatBox.Text = ""
chatBox.Visible = false -- chatBox.Visible = false
chatButton.Visible = true -- chatButton.Visible = true
end) -- end)
robloxLock(chatBar) -- robloxLock(chatBar)
return chatBar, toggleHotKey -- return chatBar, toggleHotKey
end -- end
--Spawn a thread for the Save dialogs --Spawn a thread for the Save dialogs
local isSaveDialogSupported = pcall(function() local isSaveDialogSupported = pcall(function()
@ -2355,12 +2355,13 @@ if LoadLibrary then
end) end)
--Spawn a thread for Chat Bar --Spawn a thread for Chat Bar
--[[local success, luaChat = ]]pcall(function() --[[local success, luaChat = ]]
pcall(function()
return game.GuiService.UseLuaChat return game.GuiService.UseLuaChat
end) end)
-- if success and luaChat then -- if success and luaChat then
--[[delay(0, --[[delay(0,
function() function()
waitForChild(game, "Players") waitForChild(game, "Players")
waitForProperty(game.Players, "LocalPlayer") waitForProperty(game.Players, "LocalPlayer")

View File

@ -904,7 +904,6 @@ local NeutralTeam = nil
-- final 'to be displayed' list of frames -- final 'to be displayed' list of frames
local MiddleFrames = {} local MiddleFrames = {}
local MiddleFrameBackgrounds = {} local MiddleFrameBackgrounds = {}
local MiddleFrameHeight = 0.03
-- time of last click -- time of last click
local LastClick = 0 local LastClick = 0
local ButtonCooldown = 0.25 local ButtonCooldown = 0.25
@ -1459,7 +1458,7 @@ end
used when leaderstats are removed, or when new leaderstats are added(for weird edge case)+ used when leaderstats are removed, or when new leaderstats are added(for weird edge case)+
--]] --]]
function RemoveAllStats(playerEntry) function RemoveAllStats(playerEntry)
for i, val in ipairs(ScoreNames) do for _, val in ipairs(ScoreNames) do
StatRemoved(val, playerEntry) StatRemoved(val, playerEntry)
end end
end end
@ -1789,7 +1788,7 @@ function UpdateMaximize()
i.Background.Image = "http://www.roblox.com/asset/?id=" .. Images["midLight"] i.Background.Image = "http://www.roblox.com/asset/?id=" .. Images["midLight"]
end end
end end
for index, i in ipairs(MiddleFrames) do for _, i in ipairs(MiddleFrames) do
if i:FindFirstChild "ClickListener" then if i:FindFirstChild "ClickListener" then
i.ClickListener.Size = UDim2.new(0.96, 0, i.ClickListener.Size.Y.Scale, 0) i.ClickListener.Size = UDim2.new(0.96, 0, i.ClickListener.Size.Y.Scale, 0)
for j = 1, #ScoreNames, 1 do for j = 1, #ScoreNames, 1 do
@ -2447,8 +2446,8 @@ function InsertPlayerFrame(nplayer)
dropShadow.Position = nFrame.TitleFrame.Title.Position + UDim2.new(0, 1, 0, 1) dropShadow.Position = nFrame.TitleFrame.Title.Position + UDim2.new(0, 1, 0, 1)
dropShadow.Name = "DropShadow" dropShadow.Name = "DropShadow"
dropShadow.Parent = nFrame.TitleFrame dropShadow.Parent = nFrame.TitleFrame
-- else -- else
-- --Delay(2, function () OnFriendshipChanged(nplayer,LocalPlayer:GetFriendStatus(nplayer)) end) -- --Delay(2, function () OnFriendshipChanged(nplayer,LocalPlayer:GetFriendStatus(nplayer)) end)
end end
nFrame.TitleFrame.Title.Font = "ArialBold" nFrame.TitleFrame.Title.Font = "ArialBold"
@ -2471,7 +2470,7 @@ function InsertPlayerFrame(nplayer)
end end
else else
local addedToTeam = false local addedToTeam = false
for i, tval in ipairs(TeamFrames) do for _, tval in ipairs(TeamFrames) do
if tval["MyTeam"].TeamColor == nplayer.TeamColor then if tval["MyTeam"].TeamColor == nplayer.TeamColor then
AddPlayerToTeam(tval, nentry) AddPlayerToTeam(tval, nentry)
nentry["MyTeam"] = tval nentry["MyTeam"] = tval
@ -2621,7 +2620,7 @@ end
tentries table of team entries tentries table of team entries
--]] --]]
function SortTeams(tentries) function SortTeams(tentries)
for i, val in ipairs(tentries) do for _, val in ipairs(tentries) do
table.sort(val["MyPlayers"], PlayerSortFunction) table.sort(val["MyPlayers"], PlayerSortFunction)
AddTeamScores(val) AddTeamScores(val)
end end

View File

@ -81,7 +81,7 @@ local backpackManager = waitForChild(guiBackpack, "CoreScripts/BackpackScripts/B
local backpackOpenEvent = waitForChild(backpackManager, "BackpackOpenEvent") local backpackOpenEvent = waitForChild(backpackManager, "BackpackOpenEvent")
local backpackCloseEvent = waitForChild(backpackManager, "BackpackCloseEvent") local backpackCloseEvent = waitForChild(backpackManager, "BackpackCloseEvent")
local tabClickedEvent = waitForChild(backpackManager, "TabClickedEvent") local tabClickedEvent = waitForChild(backpackManager, "TabClickedEvent")
local resizeEvent = waitForChild(backpackManager, "ResizeEvent") -- local resizeEvent = waitForChild(backpackManager, "ResizeEvent")
local inGearTab = true local inGearTab = true
@ -275,7 +275,7 @@ function insertGear(gear, addToSlot)
end) end)
end end
function reorganizeLoadout(gear, inserting, equipped, addToSlot) function reorganizeLoadout(gear, inserting, _, addToSlot)
if inserting then -- add in gear if inserting then -- add in gear
insertGear(gear, addToSlot) insertGear(gear, addToSlot)
else else
@ -304,11 +304,10 @@ function checkToolAncestry(child, parent)
gearSlots[i].Selected = false gearSlots[i].Selected = false
end end
return true return true
else
gearSlots[i].Kill.Value = true
return false
end end
return true
gearSlots[i].Kill.Value = true
return false
end end
end end
end end
@ -501,7 +500,6 @@ normalizeButton = function(button, speed)
if button:IsA "ImageButton" or button:IsA "TextButton" then if button:IsA "ImageButton" or button:IsA "TextButton" then
button.ZIndex = 1 button.ZIndex = 1
local inverseEnlarge = 1 / enlargeFactor
local centerizeX = -(buttonSizeNormal.X.Scale - button.Size.X.Scale) / 2 local centerizeX = -(buttonSizeNormal.X.Scale - button.Size.X.Scale) / 2
local centerizeY = -(buttonSizeNormal.Y.Scale - button.Size.Y.Scale) / 2 local centerizeY = -(buttonSizeNormal.Y.Scale - button.Size.Y.Scale) / 2
button:TweenSizeAndPosition( button:TweenSizeAndPosition(
@ -604,10 +602,10 @@ function resolveDrag(gearClone, x, y)
end end
end end
if x < frame.AbsolutePosition.x or x > (frame.AbsolutePosition.x + frame.AbsoluteSize.x) then if
reorganizeLoadout(gearClone, false) (x < frame.AbsolutePosition.x or x > (frame.AbsolutePosition.x + frame.AbsoluteSize.x))
return false or (y < frame.AbsolutePosition.y or y > (frame.AbsolutePosition.y + frame.AbsoluteSize.y))
elseif y < frame.AbsolutePosition.y or y > (frame.AbsolutePosition.y + frame.AbsoluteSize.y) then then
reorganizeLoadout(gearClone, false) reorganizeLoadout(gearClone, false)
return false return false
else else
@ -649,7 +647,7 @@ function showToolTip(button, tip)
end end
end end
function hideToolTip(button, tip) function hideToolTip(button, _)
if button and button:FindFirstChild "ToolTipLabel" and button.ToolTipLabel:IsA "TextLabel" then if button and button:FindFirstChild "ToolTipLabel" and button.ToolTipLabel:IsA "TextLabel" then
button.ToolTipLabel.Visible = false button.ToolTipLabel.Visible = false
end end
@ -1128,7 +1126,7 @@ player.ChildAdded:connect(function(child)
end) end)
waitForProperty(player, "Character") waitForProperty(player, "Character")
for i, v in ipairs(player.Character:GetChildren()) do for _, v in ipairs(player.Character:GetChildren()) do
playerCharacterChildAdded(v) playerCharacterChildAdded(v)
end end
characterChildAddedCon = player.Character.ChildAdded:connect(function(child) characterChildAddedCon = player.Character.ChildAdded:connect(function(child)

View File

@ -43,7 +43,6 @@ local setmetatable = setmetatable
local pairs = pairs local pairs = pairs
local ipairs = ipairs local ipairs = ipairs
local assert = assert local assert = assert
local Chipmunk = Chipmunk
local StringBuilder = { local StringBuilder = {
buffer = {}, buffer = {},
@ -458,6 +457,10 @@ end
-------------------- End JSON Parser ------------------------ -------------------- End JSON Parser ------------------------
t.DecodeJSON = function(jsonString) t.DecodeJSON = function(jsonString)
pcall(function()
warn "RbxUtility.DecodeJSON is deprecated, please use Game:GetService('HttpService'):JSONDecode() instead."
end)
if type(jsonString) == "string" then if type(jsonString) == "string" then
return Decode(jsonString) return Decode(jsonString)
end end
@ -466,6 +469,9 @@ t.DecodeJSON = function(jsonString)
end end
t.EncodeJSON = function(jsonTable) t.EncodeJSON = function(jsonTable)
pcall(function()
warn "RbxUtility.EncodeJSON is deprecated, please use Game:GetService('HttpService'):JSONEncode() instead."
end)
return Encode(jsonTable) return Encode(jsonTable)
end end
@ -528,13 +534,12 @@ t.SelectTerrainRegion = function(regionToSelect, color, selectEmptyCells, select
selectionPart.Anchored = true selectionPart.Anchored = true
selectionPart.Locked = true selectionPart.Locked = true
selectionPart.CanCollide = false selectionPart.CanCollide = false
selectionPart.FormFactor = Enum.FormFactor.Custom
selectionPart.Size = Vector3.new(4.2, 4.2, 4.2) selectionPart.Size = Vector3.new(4.2, 4.2, 4.2)
local selectionBox = Instance.new "SelectionBox" local selectionBox = Instance.new "SelectionBox"
-- srs translation from region3 to region3int16 -- srs translation from region3 to region3int16
-- function Region3ToRegion3int16(region3) -- local function Region3ToRegion3int16(region3)
-- local theLowVec = region3.CFrame.p - (region3.Size / 2) + Vector3.new(2, 2, 2) -- local theLowVec = region3.CFrame.p - (region3.Size / 2) + Vector3.new(2, 2, 2)
-- local lowCell = WorldToCellPreferSolid(terrain, theLowVec) -- local lowCell = WorldToCellPreferSolid(terrain, theLowVec)
@ -749,8 +754,11 @@ function t.CreateSignal()
cn:disconnect() cn:disconnect()
mAllCns[cn] = nil mAllCns[cn] = nil
end end
pubCn.Disconnect = pubCn.disconnect
return pubCn return pubCn
end end
function this:disconnect() function this:disconnect()
if self ~= this then if self ~= this then
error("disconnect must be called with `:`, not `.`", 2) error("disconnect must be called with `:`, not `.`", 2)
@ -760,12 +768,14 @@ function t.CreateSignal()
mAllCns[cn] = nil mAllCns[cn] = nil
end end
end end
function this:wait() function this:wait()
if self ~= this then if self ~= this then
error("wait must be called with `:`, not `.`", 2) error("wait must be called with `:`, not `.`", 2)
end end
return mBindableEvent.Event:wait() return mBindableEvent.Event:wait()
end end
function this:fire(...) function this:fire(...)
if self ~= this then if self ~= this then
error("fire must be called with `:`, not `.`", 2) error("fire must be called with `:`, not `.`", 2)
@ -773,6 +783,11 @@ function t.CreateSignal()
mBindableEvent:Fire(...) mBindableEvent:Fire(...)
end end
this.Connect = this.connect
this.Disconnect = this.disconnect
this.Wait = this.wait
this.Fire = this.fire
return this return this
end end
@ -885,6 +900,7 @@ local function Create_PrivImpl(objectType)
--make the object to mutate --make the object to mutate
local obj = Instance.new(objectType) local obj = Instance.new(objectType)
local parent = nil
--stored constructor function to be called after other initialization --stored constructor function to be called after other initialization
local ctor = nil local ctor = nil
@ -892,7 +908,13 @@ local function Create_PrivImpl(objectType)
for k, v in pairs(dat) do for k, v in pairs(dat) do
--add property --add property
if type(k) == "string" then if type(k) == "string" then
obj[k] = v if k == "Parent" then
-- Parent should always be set last, setting the Parent of a new object
-- immediately makes performance worse for all subsequent property updates.
parent = v
else
obj[k] = v
end
--add child --add child
elseif type(k) == "number" then elseif type(k) == "number" then
@ -937,6 +959,10 @@ local function Create_PrivImpl(objectType)
ctor(obj) ctor(obj)
end end
if parent then
obj.Parent = parent
end
--return the completed object --return the completed object
return obj return obj
end end

View File

@ -92,7 +92,7 @@ local function collectParts(object, baseParts, scripts, decals)
decals[#decals + 1] = object decals[#decals + 1] = object
end end
for index, child in pairs(object:GetChildren()) do for _, child in pairs(object:GetChildren()) do
collectParts(child, baseParts, scripts, decals) collectParts(child, baseParts, scripts, decals)
end end
end end
@ -323,12 +323,12 @@ local function getBoundingBox2(partOrModel)
local justifyValue = partOrModel:FindFirstChild "Justification" local justifyValue = partOrModel:FindFirstChild "Justification"
if justifyValue ~= nil then if justifyValue ~= nil then
-- find the multiple of 4 that contains the model -- find the multiple of 4 that contains the model
justify = justifyValue.Value local justify = justifyValue.Value
two = Vector3.new(2, 2, 2) local two = Vector3.new(2, 2, 2)
actualBox = maxVec - minVec - Vector3.new(0.01, 0.01, 0.01) local actualBox = maxVec - minVec - Vector3.new(0.01, 0.01, 0.01)
containingGridBox = local containingGridBox =
Vector3.new(4 * math.ceil(actualBox.x / 4), 4 * math.ceil(actualBox.y / 4), 4 * math.ceil(actualBox.z / 4)) Vector3.new(4 * math.ceil(actualBox.x / 4), 4 * math.ceil(actualBox.y / 4), 4 * math.ceil(actualBox.z / 4))
adjustment = containingGridBox - actualBox local adjustment = containingGridBox - actualBox
minVec = minVec - 0.5 * adjustment * justify minVec = minVec - 0.5 * adjustment * justify
maxVec = maxVec + 0.5 * adjustment * (two - justify) maxVec = maxVec + 0.5 * adjustment * (two - justify)
end end
@ -341,17 +341,17 @@ local function getBoundingBoxInWorldCoordinates(partOrModel)
local maxVec = Vector3.new(-math.huge, -math.huge, -math.huge) local maxVec = Vector3.new(-math.huge, -math.huge, -math.huge)
if partOrModel:IsA "BasePart" and not partOrModel:IsA "Terrain" then if partOrModel:IsA "BasePart" and not partOrModel:IsA "Terrain" then
vec1 = partOrModel.CFrame:pointToWorldSpace(-0.5 * partOrModel.Size) local vec1 = partOrModel.CFrame:pointToWorldSpace(-0.5 * partOrModel.Size)
vec2 = partOrModel.CFrame:pointToWorldSpace(0.5 * partOrModel.Size) local vec2 = partOrModel.CFrame:pointToWorldSpace(0.5 * partOrModel.Size)
minVec = Vector3.new(math.min(vec1.X, vec2.X), math.min(vec1.Y, vec2.Y), math.min(vec1.Z, vec2.Z)) minVec = Vector3.new(math.min(vec1.X, vec2.X), math.min(vec1.Y, vec2.Y), math.min(vec1.Z, vec2.Z))
maxVec = Vector3.new(math.max(vec1.X, vec2.X), math.max(vec1.Y, vec2.Y), math.max(vec1.Z, vec2.Z)) maxVec = Vector3.new(math.max(vec1.X, vec2.X), math.max(vec1.Y, vec2.Y), math.max(vec1.Z, vec2.Z))
elseif partOrModel:IsA "Terrain" then elseif not partOrModel:IsA "Terrain" then
-- we shouldn't have to deal with this case -- we shouldn't have to deal with this case
--minVec = Vector3.new(-2, -2, -2) --minVec = Vector3.new(-2, -2, -2)
--maxVec = Vector3.new(2, 2, 2) --maxVec = Vector3.new(2, 2, 2)
else -- else
vec1 = partOrModel:GetModelCFrame():pointToWorldSpace(-0.5 * partOrModel:GetModelSize()) local vec1 = partOrModel:GetModelCFrame():pointToWorldSpace(-0.5 * partOrModel:GetModelSize())
vec2 = partOrModel:GetModelCFrame():pointToWorldSpace(0.5 * partOrModel:GetModelSize()) local vec2 = partOrModel:GetModelCFrame():pointToWorldSpace(0.5 * partOrModel:GetModelSize())
minVec = Vector3.new(math.min(vec1.X, vec2.X), math.min(vec1.Y, vec2.Y), math.min(vec1.Z, vec2.Z)) minVec = Vector3.new(math.min(vec1.X, vec2.X), math.min(vec1.Y, vec2.Y), math.min(vec1.Z, vec2.Z))
maxVec = Vector3.new(math.max(vec1.X, vec2.X), math.max(vec1.Y, vec2.Y), math.max(vec1.Z, vec2.Z)) maxVec = Vector3.new(math.max(vec1.X, vec2.X), math.max(vec1.Y, vec2.Y), math.max(vec1.Z, vec2.Z))
end end
@ -587,7 +587,7 @@ local function findConfigAtMouseTarget(Mouse, stampData)
local InsertTouchInWorld = insertCFrame:vectorToWorldSpace(insertRefPointInInsert) local InsertTouchInWorld = insertCFrame:vectorToWorldSpace(insertRefPointInInsert)
local posInsertOriginInWorld = TargetTouchRelToWorld - InsertTouchInWorld local posInsertOriginInWorld = TargetTouchRelToWorld - InsertTouchInWorld
local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = insertCFrame:components() local _, _, _, R00, R01, R02, R10, R11, R12, R20, R21, R22 = insertCFrame:components()
targetConfig = CFrame.new( targetConfig = CFrame.new(
posInsertOriginInWorld.x, posInsertOriginInWorld.x,
posInsertOriginInWorld.y, posInsertOriginInWorld.y,
@ -687,7 +687,7 @@ t.GetStampModel = function(assetId, terrainShape, useAssetVersionId)
if object:IsA "BasePart" then if object:IsA "BasePart" then
object.Locked = false object.Locked = false
end end
for index, child in pairs(object:GetChildren()) do for _, child in pairs(object:GetChildren()) do
UnlockInstances(child) UnlockInstances(child)
end end
end end
@ -781,7 +781,7 @@ t.GetStampModel = function(assetId, terrainShape, useAssetVersionId)
-- below we wait a max of 8 seconds before deciding to bail out on loading -- below we wait a max of 8 seconds before deciding to bail out on loading
local root local root
local loader local loader
loading = true local loading = true
if useAssetVersionId then if useAssetVersionId then
loader = coroutine.create(function() loader = coroutine.create(function()
root = game:GetService("InsertService"):LoadAssetVersion(assetId) root = game:GetService("InsertService"):LoadAssetVersion(assetId)
@ -830,12 +830,12 @@ t.GetStampModel = function(assetId, terrainShape, useAssetVersionId)
root = root:GetChildren()[1] root = root:GetChildren()[1]
--Examine the contents and decide what it looks like --Examine the contents and decide what it looks like
for pos, instance in pairs(instances) do for _, instance in pairs(instances) do
if instance:IsA "Team" then if instance:IsA "Team" then
instance.Parent = game:GetService "Teams" instance.Parent = game:GetService "Teams"
elseif instance:IsA "Sky" then elseif instance:IsA "Sky" then
local lightingService = game:GetService "Lighting" local lightingService = game:GetService "Lighting"
for index, child in pairs(lightingService:GetChildren()) do for _, child in pairs(lightingService:GetChildren()) do
if child:IsA "Sky" then if child:IsA "Sky" then
child:Remove() child:Remove()
end end
@ -848,12 +848,12 @@ t.GetStampModel = function(assetId, terrainShape, useAssetVersionId)
-- ...and tag all inserted models for subsequent origin identification -- ...and tag all inserted models for subsequent origin identification
-- if no RobloxModel tag already exists, then add it. -- if no RobloxModel tag already exists, then add it.
if root:FindFirstChild "RobloxModel" == nil then if root:FindFirstChild "RobloxModel" == nil then
local stringTag = Instance.new("BoolValue") local stringTag = Instance.new "BoolValue"
stringTag.Name = "RobloxModel" stringTag.Name = "RobloxModel"
stringTag.Parent = root stringTag.Parent = root
if root:FindFirstChild "RobloxStamper" == nil then if root:FindFirstChild "RobloxStamper" == nil then
local stringTag2 = Instance.new("BoolValue") local stringTag2 = Instance.new "BoolValue"
stringTag2.Name = "RobloxStamper" stringTag2.Name = "RobloxStamper"
stringTag2.Parent = root stringTag2.Parent = root
end end
@ -1098,9 +1098,10 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
if game.Players["LocalPlayer"] then if game.Players["LocalPlayer"] then
gui = game.Players.LocalPlayer:FindFirstChild "PlayerGui" gui = game.Players.LocalPlayer:FindFirstChild "PlayerGui"
if gui and gui:IsA "PlayerGui" then if gui and gui:IsA "PlayerGui" then
if HighScalabilityLine.Dimensions == 1 and line.magnitude > 3 then -- don't show if mouse hasn't moved enough if
HighScalabilityLine.Adorn.Parent = gui (HighScalabilityLine.Dimensions == 1 and line.magnitude > 3)
elseif HighScalabilityLine.Dimensions > 1 then or HighScalabilityLine.Dimensions > 1
then -- don't show if mouse hasn't moved enough
HighScalabilityLine.Adorn.Parent = gui HighScalabilityLine.Adorn.Parent = gui
end end
end end
@ -1108,9 +1109,7 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
if gui == nil then -- we are in studio if gui == nil then -- we are in studio
gui = game:GetService "CoreGui" gui = game:GetService "CoreGui"
if HighScalabilityLine.Dimensions == 1 and line.magnitude > 3 then -- don't show if mouse hasn't moved enough if (HighScalabilityLine.Dimensions == 1 and line.magnitude > 3) or HighScalabilityLine.Dimensions > 1 then -- don't show if mouse hasn't moved enough
HighScalabilityLine.Adorn.Parent = gui
elseif HighScalabilityLine.Dimensions > 1 then
HighScalabilityLine.Adorn.Parent = gui HighScalabilityLine.Adorn.Parent = gui
end end
end end
@ -1204,7 +1203,7 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
local cellToStamp = game.Workspace.Terrain:WorldToCell(targetCFrame.p) local cellToStamp = game.Workspace.Terrain:WorldToCell(targetCFrame.p)
local newCFramePosition = local newCFramePosition =
game.Workspace.Terrain:CellCenterToWorld(cellToStamp.X, cellToStamp.Y, cellToStamp.Z) game.Workspace.Terrain:CellCenterToWorld(cellToStamp.X, cellToStamp.Y, cellToStamp.Z)
local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = targetCFrame:components() local _, _, _, R00, R01, R02, R10, R11, R12, R20, R21, R22 = targetCFrame:components()
targetCFrame = CFrame.new( targetCFrame = CFrame.new(
newCFramePosition.X, newCFramePosition.X,
newCFramePosition.Y, newCFramePosition.Y,
@ -1404,7 +1403,7 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
end end
delay(0, function() delay(0, function()
for i = 1, 3 do for _ = 1, 3 do
if stampData["ErrorBox"] then if stampData["ErrorBox"] then
stampData.ErrorBox.Visible = true stampData.ErrorBox.Visible = true
end end
@ -1474,9 +1473,9 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
myTable[part] = tempTable myTable[part] = tempTable
end end
local function makeSurfaceUnjoinable(part, surface) -- local function makeSurfaceUnjoinable(part, surface)
-- TODO: FILL OUT! -- -- TODO: FILL OUT!
end -- end
local function prepareModel(model) local function prepareModel(model)
if not model then if not model then
@ -1507,13 +1506,13 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
return nil, "no parts found in modelToStamp" return nil, "no parts found in modelToStamp"
end end
for index, script in pairs(scripts) do for _, script in pairs(scripts) do
if not script.Disabled then if not script.Disabled then
script.Disabled = true script.Disabled = true
stampData.DisabledScripts[#stampData.DisabledScripts + 1] = script stampData.DisabledScripts[#stampData.DisabledScripts + 1] = script
end end
end end
for index, part in pairs(parts) do for _, part in pairs(parts) do
stampData.TransparencyTable[part] = part.Transparency stampData.TransparencyTable[part] = part.Transparency
part.Transparency = gStaticTrans + (1 - gStaticTrans) * part.Transparency part.Transparency = gStaticTrans + (1 - gStaticTrans) * part.Transparency
stampData.MaterialTable[part] = part.Material stampData.MaterialTable[part] = part.Material
@ -1555,7 +1554,7 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
end) end)
end end
for index, decal in pairs(decals) do for _, decal in pairs(decals) do
stampData.DecalTransparencyTable[decal] = decal.Transparency stampData.DecalTransparencyTable[decal] = decal.Transparency
decal.Transparency = gDesiredTrans + (1 - gDesiredTrans) * decal.Transparency decal.Transparency = gDesiredTrans + (1 - gDesiredTrans) * decal.Transparency
end end
@ -1664,17 +1663,14 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
if checkHighScalabilityStamp then -- check to see if cell is in region, if not we'll skip set if checkHighScalabilityStamp then -- check to see if cell is in region, if not we'll skip set
if allowedStampRegion then if allowedStampRegion then
local cellPos = cellCenterToWorld(game.Workspace.Terrain, cellPos.X, cellPos.Y, cellPos.Z) local cellPos = cellCenterToWorld(game.Workspace.Terrain, cellPos.X, cellPos.Y, cellPos.Z)
if cellPos.X + 2 > allowedStampRegion.CFrame.p.X + allowedStampRegion.Size.X / 2 then if
canSetCell = false (cellPos.X + 2 > allowedStampRegion.CFrame.p.X + allowedStampRegion.Size.X / 2)
elseif cellPos.X - 2 < allowedStampRegion.CFrame.p.X - allowedStampRegion.Size.X / 2 then or (cellPos.X - 2 < allowedStampRegion.CFrame.p.X - allowedStampRegion.Size.X / 2)
canSetCell = false or (cellPos.Y + 2 > allowedStampRegion.CFrame.p.Y + allowedStampRegion.Size.Y / 2)
elseif cellPos.Y + 2 > allowedStampRegion.CFrame.p.Y + allowedStampRegion.Size.Y / 2 then or (cellPos.Y - 2 < allowedStampRegion.CFrame.p.Y - allowedStampRegion.Size.Y / 2)
canSetCell = false or (cellPos.Z + 2 > allowedStampRegion.CFrame.p.Z + allowedStampRegion.Size.Z / 2)
elseif cellPos.Y - 2 < allowedStampRegion.CFrame.p.Y - allowedStampRegion.Size.Y / 2 then or (cellPos.Z - 2 < allowedStampRegion.CFrame.p.Z - allowedStampRegion.Size.Z / 2)
canSetCell = false then
elseif cellPos.Z + 2 > allowedStampRegion.CFrame.p.Z + allowedStampRegion.Size.Z / 2 then
canSetCell = false
elseif cellPos.Z - 2 < allowedStampRegion.CFrame.p.Z - allowedStampRegion.Size.Z / 2 then
canSetCell = false canSetCell = false
end end
end end
@ -1688,7 +1684,7 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
local function ResolveMegaClusterStamp(checkHighScalabilityStamp) local function ResolveMegaClusterStamp(checkHighScalabilityStamp)
local cellSet = false local cellSet = false
local cluser = game.Workspace.Terrain local cluster = game.Workspace.Terrain
local line = HighScalabilityLine.InternalLine local line = HighScalabilityLine.InternalLine
local cMax = game.Workspace.Terrain.MaxExtents.Max local cMax = game.Workspace.Terrain.MaxExtents.Max
@ -1724,8 +1720,6 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
local yInc = { 0, 0, 0 } local yInc = { 0, 0, 0 }
local zInc = { 0, 0, 0 } local zInc = { 0, 0, 0 }
local cluster = game.Workspace.Terrain
local incrementVect = { nil, nil, nil } local incrementVect = { nil, nil, nil }
local stepVect = { Vector3.new(0, 0, 0), Vector3.new(0, 0, 0), Vector3.new(0, 0, 0) } local stepVect = { Vector3.new(0, 0, 0), Vector3.new(0, 0, 0), Vector3.new(0, 0, 0) }
@ -2179,12 +2173,12 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
-- ...and tag all inserted models for subsequent origin identification -- ...and tag all inserted models for subsequent origin identification
-- if no RobloxModel tag already exists, then add it. -- if no RobloxModel tag already exists, then add it.
if stampData.CurrentParts:FindFirstChild "RobloxModel" == nil then if stampData.CurrentParts:FindFirstChild "RobloxModel" == nil then
local stringTag = Instance.new("BoolValue") local stringTag = Instance.new "BoolValue"
stringTag.Name = "RobloxModel" stringTag.Name = "RobloxModel"
stringTag.Parent = stampData.CurrentParts stringTag.Parent = stampData.CurrentParts
if stampData.CurrentParts:FindFirstChild "RobloxStamper" == nil then if stampData.CurrentParts:FindFirstChild "RobloxStamper" == nil then
local stringTag2 = Instance.new("BoolValue") local stringTag2 = Instance.new "BoolValue"
stringTag2.Name = "RobloxStamper" stringTag2.Name = "RobloxStamper"
stringTag2.Parent = stampData.CurrentParts stringTag2.Parent = stampData.CurrentParts
end end
@ -2192,7 +2186,7 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
else else
stampData.CurrentParts:BreakJoints() stampData.CurrentParts:BreakJoints()
if stampData.CurrentParts:FindFirstChild "RobloxStamper" == nil then if stampData.CurrentParts:FindFirstChild "RobloxStamper" == nil then
local stringTag2 = Instance.new("BoolValue") local stringTag2 = Instance.new "BoolValue"
stringTag2.Name = "RobloxStamper" stringTag2.Name = "RobloxStamper"
stringTag2.Parent = stampData.CurrentParts stringTag2.Parent = stampData.CurrentParts
end end
@ -2244,7 +2238,7 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
-- ...and tag all inserted models for subsequent origin identification -- ...and tag all inserted models for subsequent origin identification
-- if no RobloxModel tag already exists, then add it. -- if no RobloxModel tag already exists, then add it.
if stampData.CurrentParts:FindFirstChild "RobloxModel" == nil then if stampData.CurrentParts:FindFirstChild "RobloxModel" == nil then
local stringTag = Instance.new("BoolValue") local stringTag = Instance.new "BoolValue"
stringTag.Name = "RobloxModel" stringTag.Name = "RobloxModel"
stringTag.Parent = stampData.CurrentParts stringTag.Parent = stampData.CurrentParts
end end
@ -2255,12 +2249,12 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
end end
--Re-enable the scripts --Re-enable the scripts
for index, script in pairs(stampData.DisabledScripts) do for _, script in pairs(stampData.DisabledScripts) do
script.Disabled = false script.Disabled = false
end end
--Now that they are all marked enabled, reinsert them into the world so they start running --Now that they are all marked enabled, reinsert them into the world so they start running
for index, script in pairs(stampData.DisabledScripts) do for _, script in pairs(stampData.DisabledScripts) do
local oldParent = script.Parent local oldParent = script.Parent
script.Parent = nil script.Parent = nil
script:Clone().Parent = oldParent script:Clone().Parent = oldParent
@ -2390,7 +2384,7 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
end end
game.JointsService:ShowPermissibleJoints() game.JointsService:ShowPermissibleJoints()
for index, object in pairs(stampData.DisabledScripts) do for _, object in pairs(stampData.DisabledScripts) do
if object.Name == "GhostRemovalScript" then if object.Name == "GhostRemovalScript" then
object.Parent = stampData.CurrentParts object.Parent = stampData.CurrentParts
end end
@ -2461,17 +2455,19 @@ t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStamp
control.Stamped = stamped -- BoolValue that fires when user stamps control.Stamped = stamped -- BoolValue that fires when user stamps
control.Paused = false control.Paused = false
control.LoadNewModel = function(newStampModel) -- allows us to specify a new stamper model to be used with this stamper control.LoadNewModel =
if newStampModel and not newStampModel:IsA "Model" and not newStampModel:IsA "BasePart" then function(newStampModel) -- allows us to specify a new stamper model to be used with this stamper
error "Control.LoadNewModel: newStampModel (first arg) is not a Model or Part!" if newStampModel and not newStampModel:IsA "Model" and not newStampModel:IsA "BasePart" then
return nil error "Control.LoadNewModel: newStampModel (first arg) is not a Model or Part!"
return nil
end
resetStamperState(newStampModel)
end end
resetStamperState(newStampModel)
end
control.ReloadModel = function() -- will automatically set stamper to get a new model of current model and start stamping with new model control.ReloadModel =
resetStamperState() function() -- will automatically set stamper to get a new model of current model and start stamping with new model
end resetStamperState()
end
control.Pause = function() -- temporarily stops stamping, use resume to start up again control.Pause = function() -- temporarily stops stamping, use resume to start up again
if not control.Paused then if not control.Paused then

View File

@ -186,7 +186,7 @@ function addToGrid(child)
return return
end end
for i, v in pairs(backpackItems) do -- check to see if we already have this gear registered for _, v in pairs(backpackItems) do -- check to see if we already have this gear registered
if v == child then if v == child then
return return
end end
@ -517,20 +517,20 @@ function clearPreview()
gearPreview.GearStats.GearName.Text = "" gearPreview.GearStats.GearName.Text = ""
end end
function removeAllEquippedGear(physGear) -- function removeAllEquippedGear(physGear)
local stuff = player.Character:GetChildren() -- local stuff = player.Character:GetChildren()
for i = 1, #stuff do -- for i = 1, #stuff do
if (stuff[i]:IsA "Tool" or stuff[i]:IsA "HopperBin") and stuff[i] ~= physGear then -- if (stuff[i]:IsA "Tool" or stuff[i]:IsA "HopperBin") and stuff[i] ~= physGear then
stuff[i].Parent = playerBackpack -- stuff[i].Parent = playerBackpack
end -- end
end -- end
end -- end
function equipGear(physGear) -- function equipGear(physGear)
removeAllEquippedGear(physGear) -- removeAllEquippedGear(physGear)
physGear.Parent = player.Character -- physGear.Parent = player.Character
updateGridActive() -- updateGridActive()
end -- end
function unequipGear(physGear) function unequipGear(physGear)
physGear.Parent = playerBackpack physGear.Parent = playerBackpack
@ -630,7 +630,7 @@ end
function filterGear(terms) function filterGear(terms)
local filteredGear = {} local filteredGear = {}
for k, v in pairs(backpackItems) do for _, v in pairs(backpackItems) do
if buttons[v] then if buttons[v] then
local gearString = string.lower(buttons[v].GearReference.Value.Name) local gearString = string.lower(buttons[v].GearReference.Value.Name)
gearString = trim(gearString) gearString = trim(gearString)
@ -664,6 +664,7 @@ function showSearchGear(searchTerms)
end -- currently not active tab end -- currently not active tab
local searchTermTable = splitByWhitespace(searchTerms) local searchTermTable = splitByWhitespace(searchTerms)
local currSearchTerms
if searchTermTable and (#searchTermTable > 0) then if searchTermTable and (#searchTermTable > 0) then
currSearchTerms = searchTermTable currSearchTerms = searchTermTable
else else

View File

@ -354,7 +354,7 @@ function doSearch()
end end
searchText = trim(searchText) searchText = trim(searchText)
resetButton.Visible = true resetButton.Visible = true
termTable = splitByWhitespace(searchText) -- termTable = splitByWhitespace(searchText)
searchRequestedEvent:Fire(searchText) -- todo: replace this with termtable when table passing is possible searchRequestedEvent:Fire(searchText) -- todo: replace this with termtable when table passing is possible
end end

View File

@ -1287,7 +1287,6 @@ end
function Chat:CreateSafeChatOptions(list, rootButton) function Chat:CreateSafeChatOptions(list, rootButton)
local text_List = {} local text_List = {}
level = level or 0
local count = 0 local count = 0
text_List[rootButton] = {} text_List[rootButton] = {}
text_List[rootButton][1] = list[1] text_List[rootButton][1] = list[1]
@ -1680,11 +1679,9 @@ function Chat:PlayerChatted(...)
end end
if PlayersService.ClassicChat then if PlayersService.ClassicChat then
if string.sub(message, 1, 3) == "/e " or string.sub(message, 1, 7) == "/emote " then if
-- don't do anything right now not (string.sub(message, 1, 3) == "/e " or string.sub(message, 1, 7) == "/emote ")
-- print(1) and (forceChatGUI or Player.ChatMode == Enum.ChatMode.TextAndMenu)
elseif
(forceChatGUI or Player.ChatMode == Enum.ChatMode.TextAndMenu)
or (Player.ChatMode == Enum.ChatMode.Menu and string.sub(message, 1, 3) == "/sc") or (Player.ChatMode == Enum.ChatMode.Menu and string.sub(message, 1, 3) == "/sc")
or (Chat:FindMessageInSafeChat(message, self.SafeChat_List)) or (Chat:FindMessageInSafeChat(message, self.SafeChat_List))
then then

View File

@ -8100,17 +8100,11 @@ structs:
- required: false - required: false
type: any type: any
method: true method: true
deprecated:
message: this property is deprecated.
replace: []
AutowedgeCells: AutowedgeCells:
args: args:
- required: false - required: false
type: any type: any
method: true method: true
deprecated:
message: this property is deprecated.
replace: []
BackParamA: BackParamA:
property: override-fields property: override-fields
deprecated: deprecated:
@ -8374,9 +8368,6 @@ structs:
- required: false - required: false
type: any type: any
method: true method: true
deprecated:
message: this property is deprecated.
replace: []
GetChildren: GetChildren:
args: [] args: []
method: true method: true
@ -9066,9 +9057,6 @@ structs:
- required: false - required: false
type: any type: any
method: true method: true
deprecated:
message: this property is deprecated.
replace: []
FindPartsInRegion3WithIgnoreList: FindPartsInRegion3WithIgnoreList:
args: args:
- required: false - required: false
@ -9078,9 +9066,6 @@ structs:
- required: false - required: false
type: any type: any
method: true method: true
deprecated:
message: this property is deprecated.
replace: []
FindPartsInRegion3WithWhiteList: FindPartsInRegion3WithWhiteList:
args: args:
- required: false - required: false
@ -9090,9 +9075,6 @@ structs:
- required: false - required: false
type: any type: any
method: true method: true
deprecated:
message: this property is deprecated.
replace: []
GetActor: GetActor:
args: [] args: []
method: true method: true

View File

@ -42,13 +42,11 @@ ItemPreview.ItemDescription.Text=W if l then p.BodyFrame.ItemPreview.Image=b..
'thumbs/asset.ashx?assetid='..tostring(c['IconImageAssetId']).. 'thumbs/asset.ashx?assetid='..tostring(c['IconImageAssetId'])..
'&x=100&y=100&format=png'else p.BodyFrame.ItemPreview.Image=b.. '&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 'thumbs/asset.ashx?assetid='..tostring(d)..'&x=100&y=100&format=png'end end
function doPlayerFundsCheck(V)if j then canPurchase,insufficientFunds= function doPlayerFundsCheck(V)if j then local W,X=canPurchaseItem()if W and X
canPurchaseItem()if canPurchase and insufficientFunds then local W=1000 while(W> then local Y=1000 while(Y>0 or V)and X and j and W do wait(0.1)W,X=
0 or V)and insufficientFunds and j and canPurchase do wait(0.1)canPurchase, canPurchaseItem()Y=Y-1 end end if W and not X then setButtonsVisible(p.BodyFrame
insufficientFunds=canPurchaseItem()W=W-1 end end if canPurchase and not .BuyButton,p.BodyFrame.CancelButton,p.BodyFrame.AfterBalanceButton)end end end
insufficientFunds then setButtonsVisible(p.BodyFrame.BuyButton,p.BodyFrame. function showPurchasePrompt()local V,W,X,Y,Z=canPurchaseItem()if V then
CancelButton,p.BodyFrame.AfterBalanceButton)end end end function
showPurchasePrompt()local V,W,X,Y,Z=canPurchaseItem()if V then
updatePurchasePromptData()if Y and Z then p.BodyFrame.ItemPreview. updatePurchasePromptData()if Y and Z then p.BodyFrame.ItemPreview.
ItemDescription.Text=Z p.BodyFrame.AfterBalanceButton.Visible=false end game. ItemDescription.Text=Z p.BodyFrame.AfterBalanceButton.Visible=false end game.
GuiService:AddCenterDialog(p,Enum.CenterDialogType.ModalDialog,function()p. GuiService:AddCenterDialog(p,Enum.CenterDialogType.ModalDialog,function()p.
@ -183,12 +181,8 @@ 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= 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 [[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 ,nil,nil,true,W end p.BodyFrame.AfterBalanceButton.Active=true return true,_ end
function computeSpaceString(aa)local V,W=' ',Instance.new'TextButton'W.Size= function startSpinner()u=true Spawn(function()local aa=0 while u do local V=0
UDim2.new(0,aa.AbsoluteSize.X,0,aa.AbsoluteSize.Y)W.FontSize=aa.FontSize W. while V<8 do if V==aa or V==((aa+1)%8)then v[V+1].Image=
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=45880668'else v[V+1].Image=
'http://www.roblox.com/Asset/?id=45880710'end V=V+1 end aa=(aa+1)%8 wait( '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 6.666666666666666E-2)end end)end function stopSpinner()u=false end function

View File

@ -31,18 +31,16 @@ x-v.x,t.y-v.y)local A=(y.x*w.y)-(y.y*w.x)local B=math.atan2(A,dotProduct(y,w))
local C=B*math.min(z.magnitude/x.magnitude,1)if math.abs(C)>0.00001 then local D local C=B*math.min(z.magnitude/x.magnitude,1)if math.abs(C)>0.00001 then local D
=rotatePointAboutLocation(u,v,C)s.Position=transformFromCenterToTopLeft(Vector2. =rotatePointAboutLocation(u,v,C)s.Position=transformFromCenterToTopLeft(Vector2.
new(D.x,D.y),s)end s.Position=UDim2.new(0,s.Position.X.Offset+z.x,0,s.Position.Y new(D.x,D.y),s)end s.Position=UDim2.new(0,s.Position.X.Offset+z.x,0,s.Position.Y
.Offset+z.y)end r.Position=transformFromCenterToTopLeft(t,r) .Offset+z.y)end r.Position=transformFromCenterToTopLeft(t,r)local v,w=Vector2.
thumbstickFramePosition=Vector2.new(r.Position.X.Offset,r.Position.Y.Offset) new(r.Position.X.Offset,r.Position.Y.Offset),Vector2.new(s.Position.X.Offset,s.
thumbstickOuterPosition=Vector2.new(s.Position.X.Offset,s.Position.Y.Offset)if Position.Y.Offset)if DistanceBetweenTwoPoints(v,w)>e/2 then local x=(w-v).unit*e
DistanceBetweenTwoPoints(thumbstickFramePosition,thumbstickOuterPosition)>e/2 /2 s.Position=UDim2.new(0,v.x+x.x,0,v.y+x.y)end return Vector2.new(r.Position.X.
then local v=(thumbstickOuterPosition-thumbstickFramePosition).unit*e/2 s. Offset-s.Position.X.Offset,r.Position.Y.Offset-s.Position.Y.Offset)end function
Position=UDim2.new(0,thumbstickFramePosition.x+v.x,0,thumbstickFramePosition.y+v movementOutsideDeadZone(r)return((math.abs(r.x)>g)or(math.abs(r.y)>g))end
.y)end return Vector2.new(r.Position.X.Offset-s.Position.X.Offset,r.Position.Y. function constructThumbstick(r,s,t)local u=Instance.new'Frame'u.Name=
Offset-s.Position.Y.Offset)end function movementOutsideDeadZone(r)return((math. 'ThumbstickFrame'u.Active=true u.Size=UDim2.new(0,e,0,e)u.Position=r u.
abs(r.x)>g)or(math.abs(r.y)>g))end function constructThumbstick(r,s,t)local u= BackgroundTransparency=1 local v=Instance.new'ImageLabel'v.Name=
Instance.new'Frame'u.Name='ThumbstickFrame'u.Active=true u.Size=UDim2.new(0,e,0, 'OuterThumbstick'v.Image=f v.ImageRectOffset=Vector2.new(0,0)v.ImageRectSize=
e)u.Position=r u.BackgroundTransparency=1 local v=Instance.new'ImageLabel'v.Name
='OuterThumbstick'v.Image=f v.ImageRectOffset=Vector2.new(0,0)v.ImageRectSize=
Vector2.new(220,220)v.BackgroundTransparency=1 v.Size=UDim2.new(0,e,0,e)v. Vector2.new(220,220)v.BackgroundTransparency=1 v.Size=UDim2.new(0,e,0,e)v.
Position=r v.Parent=Game.CoreGui.RobloxGui local w=Instance.new'ImageLabel'w. Position=r v.Parent=Game.CoreGui.RobloxGui local w=Instance.new'ImageLabel'w.
Name='InnerThumbstick'w.Image=f w.ImageRectOffset=Vector2.new(220,0)w. Name='InnerThumbstick'w.Image=f w.ImageRectOffset=Vector2.new(220,0)w.
@ -100,15 +98,15 @@ tick()-w)<=p)if x then table.insert(A,F)E(A[1],A[2])else A={}end end end r.
InputBegan:connect(function(G)if G.UserInputType~=Enum.UserInputType.Touch then InputBegan:connect(function(G)if G.UserInputType~=Enum.UserInputType.Touch then
return end if isTouchUsedByJumpButton(G)then return end local H= return end if isTouchUsedByJumpButton(G)then return end local H=
isTouchUsedByThumbstick(G)if not H then F(G)end if q==nil and not H then q=G t= isTouchUsedByThumbstick(G)if not H then F(G)end if q==nil and not H then q=G t=
Vector2.new(q.Position.x,q.Position.y)lastTick=tick()end end)a.InputChanged: Vector2.new(q.Position.x,q.Position.y)end end)a.InputChanged:connect(function(G)
connect(function(G)if G.UserInputType~=Enum.UserInputType.Touch then return end if G.UserInputType~=Enum.UserInputType.Touch then return end if q~=G then return
if q~=G then return end local H=Vector2.new(q.Position.x,q.Position.y)local I=(t end local H=Vector2.new(q.Position.x,q.Position.y)local I=(t-H)*m if not u and(I
-H)*m if not u and(I.magnitude>n)then u=true t=H end if u and(t~=H)then v(a,I)s( .magnitude>n)then u=true t=H end if u and(t~=H)then v(a,I)s()t=H end end)a.
)t=H end end)a.InputEnded:connect(function(G)if q==G or q==nil then C()end for H InputEnded:connect(function(G)if q==G or q==nil then C()end for H,I in pairs(A)
,I in pairs(A)do if I==G then table.remove(A,H)end end end)end function do if I==G then table.remove(A,H)end end end)end function setupTouchControls()
setupTouchControls()local r=Instance.new'Frame'r.Name='TouchControlFrame'r.Size= local r=Instance.new'Frame'r.Name='TouchControlFrame'r.Size=UDim2.new(1,0,1,0)r.
UDim2.new(1,0,1,0)r.BackgroundTransparency=1 r.Parent=Game.CoreGui.RobloxGui BackgroundTransparency=1 r.Parent=Game.CoreGui.RobloxGui local s=
local s=setupCharacterMovement(r)setupJumpButton(r)setupCameraControl(r,s)a. setupCharacterMovement(r)setupJumpButton(r)setupCameraControl(r,s)a.
ProcessedEvent:connect(function(t,u)if not u then return end if t==q and t. ProcessedEvent:connect(function(t,u)if not u then return end if t==q and t.
UserInputState==Enum.UserInputState.Begin then q=nil end end)end do UserInputState==Enum.UserInputState.Begin then q=nil end end)end do
setupTouchControls()end setupTouchControls()end

View File

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

View File

@ -19,34 +19,30 @@ FontSize=6 o.BackgroundTransparency=1 o.Parent=m for p=1,10 do wait(0.1)o.
TextTransparency=p/10 o.Position=UDim2.new(0,0,0,-p*5)o.FontSize=6-p*0.6 end o: TextTransparency=p/10 o.Position=UDim2.new(0,0,0,-p*5)o.FontSize=6-p*0.6 end o:
remove()end function setMaxHealth()if k.Value>=0 then d.MaxHealth=k.Value print( remove()end function setMaxHealth()if k.Value>=0 then d.MaxHealth=k.Value print(
d.MaxHealth)if d.Health>d.MaxHealth then d.Health=d.MaxHealth end end end k. d.MaxHealth)if d.Health>d.MaxHealth then d.Health=d.MaxHealth end end end k.
Changed:connect(setMaxHealth)fireEffect=Instance.new'Fire'fireEffect.Heat=0.1 Changed:connect(setMaxHealth)local n=Instance.new'Fire'n.Heat=0.1 n.Size=3 n.
fireEffect.Size=3 fireEffect.Name='FireEffect'fireEffect.Enabled=false while Name='FireEffect'n.Enabled=false while true do local o,p=wait(1),d.Health if p>0
true do local n,o=wait(1),d.Health if o>0 then local p=0 if f then regen=f: then local q=0 if f then local r,s,t,u,v=f:FindFirstChild'Regen',f:
FindFirstChild'Regen'poison=f:FindFirstChild'Poison'ice=f:FindFirstChild'Ice' FindFirstChild'Poison',f:FindFirstChild'Ice',f:FindFirstChild'Fire',f:
fire=f:FindFirstChild'Fire'stun=f:FindFirstChild'Stun'if regen then p=p+regen. FindFirstChild'Stun'if r then q=q+r.Value.X if r.Value.Y>=0 then r.Value=Vector3
Value.X if regen.Value.Y>=0 then regen.Value=Vector3.new(regen.Value.X+regen. .new(r.Value.X+r.Value.Z,r.Value.Y-o,r.Value.Z)elseif r.Value.Y==-1 then r.Value
Value.Z,regen.Value.Y-n,regen.Value.Z)elseif regen.Value.Y==-1 then regen.Value= =Vector3.new(r.Value.X+r.Value.Z,-1,r.Value.Z)else r:remove()end end if s then q
Vector3.new(regen.Value.X+regen.Value.Z,-1,regen.Value.Z)else regen:remove()end =q-s.Value.X if s.Value.Y>=0 then s.Value=Vector3.new(s.Value.X+s.Value.Z,s.
end if poison then p=p-poison.Value.X if poison.Value.Y>=0 then poison.Value= Value.Y-o,s.Value.Z)elseif s.Value.Y==-1 then s.Value=Vector3.new(s.Value.X+s.
Vector3.new(poison.Value.X+poison.Value.Z,poison.Value.Y-n,poison.Value.Z)elseif Value.Z,-1,s.Value.Z)else s:remove()end end if t then q=q-t.Value.X if t.Value.Y
poison.Value.Y==-1 then poison.Value=Vector3.new(poison.Value.X+poison.Value.Z,- >=0 then t.Value=Vector3.new(t.Value.X,t.Value.Y-o,t.Value.Z)else t:remove()end
1,poison.Value.Z)else poison:remove()end end if ice then p=p-ice.Value.X if ice. end if u then n.Enabled=true n.Parent=c.Torso q=q-u.Value.X if u.Value.Y>=0 then
Value.Y>=0 then ice.Value=Vector3.new(ice.Value.X,ice.Value.Y-n,ice.Value.Z)else u.Value=Vector3.new(u.Value.X,u.Value.Y-o,u.Value.Z)else u:remove()n.Enabled=
ice:remove()end end if fire then fireEffect.Enabled=true fireEffect.Parent=c. false n.Parent=nil end end if v then if v.Value>0 then e.Anchored=true i=script.
Torso p=p-fire.Value.X if fire.Value.Y>=0 then fire.Value=Vector3.new(fire.Value Parent:GetChildren()j=game.Players:GetPlayerFromCharacter(script.Parent).
.X,fire.Value.Y-n,fire.Value.Z)else fire:remove()fireEffect.Enabled=false Backpack:GetChildren()for w=1,#i do if i[w].className=='Tool'then g:Clone().
fireEffect.Parent=nil end end if stun then if stun.Value>0 then e.Anchored=true Parent=i[w]print(j)table.insert(j,i[w])end end for w=1,#j do if j[w]:
i=script.Parent:GetChildren()j=game.Players:GetPlayerFromCharacter(script.Parent FindFirstChild'RobloxBuildTool'==nil then h:Clone().Parent=j[w]j[w].Parent=game.
).Backpack:GetChildren()for q=1,#i do if i[q].className=='Tool'then g:Clone(). Lighting end end wait(0.2)for w=1,#j do j[w].Parent=game.Players:
Parent=i[q]print(j)table.insert(j,i[q])end end for q=1,#j do if j[q]: GetPlayerFromCharacter(script.Parent).Backpack end v.Value=v.Value-o else e.
FindFirstChild'RobloxBuildTool'==nil then h:Clone().Parent=j[q]j[q].Parent=game. Anchored=false for w=1,#j do local x=j[w]:FindFirstChild'RobloxBuildTool'if x
Lighting end end wait(0.2)for q=1,#j do j[q].Parent=game.Players: then x:Remove()end j[w].Parent=game.Lighting end wait(0.2)for w=1,#j do local x=
GetPlayerFromCharacter(script.Parent).Backpack end stun.Value=stun.Value-n else j[w]:FindFirstChild'InCharTag'if x then x:Remove()j[w].Parent=script.Parent else
e.Anchored=false for q=1,#j do rbTool=j[q]:FindFirstChild'RobloxBuildTool'if j[w].Parent=game.Players:GetPlayerFromCharacter(script.Parent).Backpack end end
rbTool then rbTool:Remove()end j[q].Parent=game.Lighting end wait(0.2)for q=1,#j v:Remove()end end if q~=0 then coroutine.resume(coroutine.create(
do wasInCharacter=j[q]:FindFirstChild'InCharTag'if wasInChar then wasInChar: billboardHealthChange),q)end end p=d.Health+q*o if p*1.01<d.MaxHealth then d.
Remove()j[q].Parent=script.Parent else j[q].Parent=game.Players: Health=p elseif q>0 then d.Health=d.MaxHealth end end end
GetPlayerFromCharacter(script.Parent).Backpack end end stun:Remove()end end if p
~=0 then newCo=coroutine.create(billboardHealthChange)coroutine.resume(newCo,p)
end end o=d.Health+p*n if o*1.01<d.MaxHealth then d.Health=o elseif p>0 then d.
Health=d.MaxHealth end end end

View File

@ -89,42 +89,40 @@ Enum.TextYAlignment.Top z.TextWrap=true z.RobloxLocked=true z.Parent=x return x
end function initialize(w)b[1]=newChoice'1)'b[2]=newChoice'2)'b[3]=newChoice'3)' end function initialize(w)b[1]=newChoice'1)'b[2]=newChoice'2)'b[3]=newChoice'3)'
b[4]=newChoice'4)'c=newChoice'5)'c.UserPrompt.Text='Goodbye!'c.Size=UDim2.new(1, b[4]=newChoice'4)'c=newChoice'5)'c.UserPrompt.Text='Goodbye!'c.Size=UDim2.new(1,
0,0,28)a=Instance.new'Frame'a.Name='UserDialogArea'a.Size=UDim2.new(0,350,0,200) 0,0,28)a=Instance.new'Frame'a.Name='UserDialogArea'a.Size=UDim2.new(0,350,0,200)
a.Style=Enum.FrameStyle.ChatBlue a.Visible=false imageLabel=Instance.new a.Style=Enum.FrameStyle.ChatBlue a.Visible=false local x=Instance.new
'ImageLabel'imageLabel.Name='Tail'imageLabel.Size=UDim2.new(0,62,0,53)imageLabel 'ImageLabel'x.Name='Tail'x.Size=UDim2.new(0,62,0,53)x.Position=UDim2.new(1,8,
.Position=UDim2.new(1,8,0.25)imageLabel.Image= 0.25)x.Image='rbxasset://textures/chatBubble_botBlue_tailRight.png'x.
'rbxasset://textures/chatBubble_botBlue_tailRight.png'imageLabel. BackgroundTransparency=1 x.RobloxLocked=true x.Parent=a for y,z in pairs(b)do z.
BackgroundTransparency=1 imageLabel.RobloxLocked=true imageLabel.Parent=a for x, RobloxLocked=true z.Parent=a end c.RobloxLocked=true c.Parent=a a.RobloxLocked=
y in pairs(b)do y.RobloxLocked=true y.Parent=a end c.RobloxLocked=true c.Parent= true a.Parent=w end function presentDialogChoices(w,x)if not e then return end f
a a.RobloxLocked=true a.Parent=w end function presentDialogChoices(w,x)if not e =w local y={}for z,A in pairs(x)do if A:IsA'DialogChoice'then table.insert(y,A)
then return end f=w sortedDialogChoices={}for y,z in pairs(x)do if z:IsA end end table.sort(y,function(B,C)return B.Name<C.Name end)if#y==0 then
'DialogChoice'then table.insert(sortedDialogChoices,z)end end table.sort( normalEndDialog()return end local B,C=1,0 d={}for D,E in pairs(b)do E.Visible=
sortedDialogChoices,function(A,B)return A.Name<B.Name end)if#sortedDialogChoices false end for F,G in pairs(y)do if B<=#b then b[B].Size=UDim2.new(1,0,0,72)b[B].
==0 then normalEndDialog()return end local A,B=1,0 d={}for C,D in pairs(b)do D. UserPrompt.Text=G.UserDialog local H=math.ceil(b[B].UserPrompt.TextBounds.Y/24)*
Visible=false end for E,F in pairs(sortedDialogChoices)do if A<=#b then b[A]. 24 b[B].Position=UDim2.new(0,0,0,C)b[B].Size=UDim2.new(1,0,0,H)b[B].Visible=true
Size=UDim2.new(1,0,0,72)b[A].UserPrompt.Text=F.UserDialog local G=math.ceil(b[A] d[b[B]]=G C=C+H B=B+1 end end c.Position=UDim2.new(0,0,0,C)c.Number.Text=B..')'a
.UserPrompt.TextBounds.Y/24)*24 b[A].Position=UDim2.new(0,0,0,B)b[A].Size=UDim2. .Size=UDim2.new(0,350,0,C+24+32)a.Position=UDim2.new(0,20,0,-a.Size.Y.Offset-20)
new(1,0,0,G)b[A].Visible=true d[b[A]]=F B=B+G A=A+1 end end c.Position=UDim2. styleMainFrame(currentTone())a.Visible=true end function doDialog(w)while not
new(0,0,0,B)c.Number.Text=A..')'a.Size=UDim2.new(0,350,0,B+24+32)a.Position= Instance.Lock(w,n)do wait()end if w.InUse then Instance.Unlock(w)return else w.
UDim2.new(0,20,0,-a.Size.Y.Offset-20)styleMainFrame(currentTone())a.Visible=true InUse=true Instance.Unlock(w)end e=w game.Chat:Chat(w.Parent,w.InitialPrompt,
end function doDialog(w)while not Instance.Lock(w,n)do wait()end if w.InUse then getChatColor(w.Tone))variableDelay(w.InitialPrompt)presentDialogChoices(w.Parent
Instance.Unlock(w)return else w.InUse=true Instance.Unlock(w)end e=w game.Chat: ,w:GetChildren())end function renewKillswitch(w)if g then g:Remove()g=nil end g=
Chat(w.Parent,w.InitialPrompt,getChatColor(w.Tone))variableDelay(w.InitialPrompt q:Clone()g.archivable=false g.Disabled=false g.Parent=w end function
)presentDialogChoices(w.Parent,w:GetChildren())end function renewKillswitch(w)if checkForLeaveArea()while e do if e.Parent and(n:DistanceFromCharacter(e.Parent.
g then g:Remove()g=nil end g=q:Clone()g.archivable=false g.Disabled=false g. Position)>=e.ConversationDistance)then wanderDialog()end wait(1)end end function
Parent=w end function checkForLeaveArea()while e do if e.Parent and(n: startDialog(w)if w.Parent and w.Parent:IsA'BasePart'then if n:
DistanceFromCharacter(e.Parent.Position)>=e.ConversationDistance)then DistanceFromCharacter(w.Parent.Position)>=w.ConversationDistance then
wanderDialog()end wait(1)end end function startDialog(w)if w.Parent and w.Parent showMessage(h,i)return end for x,y in pairs(s)do if x and y then y.Enabled=false
:IsA'BasePart'then if n:DistanceFromCharacter(w.Parent.Position)>=w. end end renewKillswitch(x)delay(1,checkForLeaveArea)doDialog(x)end end function
ConversationDistance then showMessage(h,i)return end for x,A in pairs(s)do if x removeDialog(w)if s[w]then s[w]:Remove()s[w]=nil end if t[w]then t[w]:
and A then A.Enabled=false end end renewKillswitch(x)delay(1,checkForLeaveArea) disconnect()t[w]=nil end end function addDialog(w)if w.Parent then if w.Parent:
doDialog(x)end end function removeDialog(w)if s[w]then s[w]:Remove()s[w]=nil end IsA'BasePart'then local x=o:clone()x.Enabled=not w.InUse x.Adornee=w.Parent x.
if t[w]then t[w]:disconnect()t[w]=nil end end function addDialog(w)if w.Parent RobloxLocked=true x.Parent=game.CoreGui x.Image.Button.MouseButton1Click:
then if w.Parent:IsA'BasePart'then local x=o:clone()x.Enabled=not w.InUse x. connect(function()startDialog(w)end)setChatNotificationTone(x,w.Purpose,w.Tone)s
Adornee=w.Parent x.RobloxLocked=true x.Parent=game.CoreGui x.Image.Button. [w]=x t[w]=w.Changed:connect(function(y)if y=='Parent'and w.Parent then
MouseButton1Click:connect(function()startDialog(w)end)setChatNotificationTone(x, removeDialog(w)addDialog(w)elseif y=='InUse'then x.Enabled=not e and not w.InUse
w.Purpose,w.Tone)s[w]=x t[w]=w.Changed:connect(function(A)if A=='Parent'and w. if w==e then timeoutDialog()end elseif y=='Tone'or y=='Purpose'then
Parent then removeDialog(w)addDialog(w)elseif A=='InUse'then x.Enabled=not e and
not w.InUse if w==e then timeoutDialog()end elseif A=='Tone'or A=='Purpose'then
setChatNotificationTone(x,w.Purpose,w.Tone)end end)else t[w]=w.Changed:connect( setChatNotificationTone(x,w.Purpose,w.Tone)end end)else t[w]=w.Changed:connect(
function(x)if x=='Parent'and w.Parent then removeDialog(w)addDialog(w)end end) function(x)if x=='Parent'and w.Parent then removeDialog(w)addDialog(w)end end)
end end end function fetchScripts()local w=game:GetService'InsertService': end end end function fetchScripts()local w=game:GetService'InsertService':
@ -140,5 +138,5 @@ UDim2.new(0,0,0,0)w.Size=UDim2.new(0,0,0,0)w.BackgroundTransparency=1 w.
RobloxLocked=true w.Parent=u.BottomLeftControl initialize(w)game. RobloxLocked=true w.Parent=u.BottomLeftControl initialize(w)game.
CollectionService.ItemAdded:connect(function(x)if x:IsA'Dialog'then addDialog(x) CollectionService.ItemAdded:connect(function(x)if x:IsA'Dialog'then addDialog(x)
end end)game.CollectionService.ItemRemoved:connect(function(x)if x:IsA'Dialog' end end)game.CollectionService.ItemRemoved:connect(function(x)if x:IsA'Dialog'
then removeDialog(x)end end)for x,A in pairs(game.CollectionService: then removeDialog(x)end end)for x,y in pairs(game.CollectionService:
GetCollection'Dialog')do if A:IsA'Dialog'then addDialog(A)end end end onLoad() GetCollection'Dialog')do if y:IsA'Dialog'then addDialog(y)end end end onLoad()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -18,225 +18,223 @@ LocalPlayer waitForChild(i,'PlayerGui')Spawn(function()moveHealthBar(i.PlayerGui
'Humanoid')j.Died:connect(function()f.Visible=false end)waitForChild(game, 'Humanoid')j.Died:connect(function()f.Visible=false end)waitForChild(game,
'LocalBackpack')game.LocalBackpack:SetOldSchoolBackpack(false)waitForChild(a. 'LocalBackpack')game.LocalBackpack:SetOldSchoolBackpack(false)waitForChild(a.
Parent,'Backpack')local k=a.Parent.Backpack local l=waitForChild(k, Parent,'Backpack')local k=a.Parent.Backpack local l=waitForChild(k,
'CoreScripts/BackpackScripts/BackpackManager')local m,n,o,p,q,r=waitForChild(l, 'CoreScripts/BackpackScripts/BackpackManager')local m,n,o,p,q=waitForChild(l,
'BackpackOpenEvent'),waitForChild(l,'BackpackCloseEvent'),waitForChild(l, 'BackpackOpenEvent'),waitForChild(l,'BackpackCloseEvent'),waitForChild(l,
'TabClickedEvent'),waitForChild(l,'ResizeEvent'),true,10 if d.AbsoluteSize.Y<= 'TabClickedEvent'),true,10 if d.AbsoluteSize.Y<=320 then q=4 end local r,s,t,u=
320 then r=4 end local s,t,u,v=nil,nil,false,1.18 local w,x,y,z,A,B,C=UDim2.new( nil,nil,false,1.18 local v,w,x,y,z,A,B=UDim2.new(1*u,0,1*u,0),UDim2.new(1,0,1,0)
1*v,0,1*v,0),UDim2.new(1,0,1,0),true,0.5,false,{},{}for D=1,r do C[D]='empty'end ,true,0.5,false,{},{}for C=1,q do B[C]='empty'end local C=false local function
local D=false local function backpackIsOpen()if k then return k.Visible end backpackIsOpen()if k then return k.Visible end return false end local function
return false end local function kill(E,F,G)if F then F:disconnect()end if E== kill(D,E,F)if E then E:disconnect()end if D==true and F then reorganizeLoadout(F
true and G then reorganizeLoadout(G,false)end end function registerNumberKeys() ,false)end end function registerNumberKeys()for D=0,9 do game:GetService
for E=0,9 do game:GetService'GuiService':AddKey(tostring(E))end end function 'GuiService':AddKey(tostring(D))end end function unregisterNumberKeys()pcall(
unregisterNumberKeys()pcall(function()for E=0,9 do game:GetService'GuiService': function()for D=0,9 do game:GetService'GuiService':RemoveKey(tostring(D))end end
RemoveKey(tostring(E))end end)end function characterInWorkspace()if game.Players )end function characterInWorkspace()if game.Players['LocalPlayer']then if game.
['LocalPlayer']then if game.Players.LocalPlayer['Character']then if game.Players Players.LocalPlayer['Character']then if game.Players.LocalPlayer.Character~=nil
.LocalPlayer.Character~=nil then if game.Players.LocalPlayer.Character.Parent~= then if game.Players.LocalPlayer.Character.Parent~=nil then return true end end
nil then return true end end end end return false end function removeGear(E) end end return false end function removeGear(D)local E=nil for F=1,#B do if B[F]
local F=nil for G=1,#C do if C[G]==E and E.Parent~=nil then F=G break end end if ==D and D.Parent~=nil then E=F break end end if E then if B[E].GearReference.
F then if C[F].GearReference.Value then if C[F].GearReference.Value.Parent==game Value then if B[E].GearReference.Value.Parent==game.Players.LocalPlayer.
.Players.LocalPlayer.Character then C[F].GearReference.Value.Parent=game.Players Character then B[E].GearReference.Value.Parent=game.Players.LocalPlayer.Backpack
.LocalPlayer.Backpack end if C[F].GearReference.Value:IsA'HopperBin'and C[F]. end if B[E].GearReference.Value:IsA'HopperBin'and B[E].GearReference.Value.
GearReference.Value.Active then C[F].GearReference.Value:Disable()C[F]. Active then B[E].GearReference.Value:Disable()B[E].GearReference.Value.Active=
GearReference.Value.Active=false end end C[F]='empty'delay(0,function()E:remove( false end end B[E]='empty'delay(0,function()D:remove()end)Spawn(function()while
)end)Spawn(function()while backpackIsOpen()do wait(0.03)end waitForChild(i, backpackIsOpen()do wait(0.03)end waitForChild(i,'Backpack')local F=true for G=1,
'Backpack')local G=true for H=1,#C do if C[H]~='empty'then G=false end end if G #B do if B[G]~='empty'then F=false end end if F then if#i.Backpack:GetChildren()
then if#i.Backpack:GetChildren()<1 then f.Visible=false else f.Position=UDim2. <1 then f.Visible=false else f.Position=UDim2.new(0.5,-60,1,-44)end h.Visible=
new(0.5,-60,1,-44)end h.Visible=false end end)end end function insertGear(E,F) false end end)end end function insertGear(D,E)local F=nil if not E then for G=1,
local G=nil if not F then for H=1,#C do if C[H]=='empty'then G=H break end end #B do if B[G]=='empty'then F=G break end end if F==1 and B[1]~='empty'then D:
if G==1 and C[1]~='empty'then E:remove()return end else G=F local H=1 for I=1,#C remove()return end else F=E local G=1 for H=1,#B do if B[H]=='empty'then G=H
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 break end end for H=G,F+1,-1 do B[H]=B[H-1]if H==10 then B[H].SlotNumber.Text=
then C[I].SlotNumber.Text='0'C[I].SlotNumberDownShadow.Text='0'C[I]. '0'B[H].SlotNumberDownShadow.Text='0'B[H].SlotNumberUpShadow.Text='0'else B[H].
SlotNumberUpShadow.Text='0'else C[I].SlotNumber.Text=I C[I].SlotNumberDownShadow SlotNumber.Text=H B[H].SlotNumberDownShadow.Text=H B[H].SlotNumberUpShadow.Text=
.Text=I C[I].SlotNumberUpShadow.Text=I end end end C[G]=E if G~=r then if type( H end end end B[F]=D if F~=q then if type(tostring(F))=='string'then local G=
tostring(G))=='string'then local H=tostring(G)E.SlotNumber.Text=H E. tostring(F)D.SlotNumber.Text=G D.SlotNumberDownShadow.Text=G D.
SlotNumberDownShadow.Text=H E.SlotNumberUpShadow.Text=H end else E.SlotNumber. SlotNumberUpShadow.Text=G end else D.SlotNumber.Text='0'D.SlotNumberDownShadow.
Text='0'E.SlotNumberDownShadow.Text='0'E.SlotNumberUpShadow.Text='0'end E. Text='0'D.SlotNumberUpShadow.Text='0'end D.Visible=true local G=nil G=D.Kill.
Visible=true local H=nil H=E.Kill.Changed:connect(function(I)kill(I,H,E)end)end Changed:connect(function(H)kill(H,G,D)end)end function reorganizeLoadout(D,E,F,G
function reorganizeLoadout(E,F,G,H)if F then insertGear(E,H)else removeGear(E) )if E then insertGear(D,G)else removeGear(D)end if D~='empty'then D.ZIndex=1 end
end if E~='empty'then E.ZIndex=1 end end function checkToolAncestry(E,F)if E: end function checkToolAncestry(D,E)if D:FindFirstChild'RobloxBuildTool'then
FindFirstChild'RobloxBuildTool'then return end if E:IsA'Tool'or E:IsA'HopperBin' return end if D:IsA'Tool'or D:IsA'HopperBin'then for F=1,#B do if B[F]~='empty'
then for G=1,#C do if C[G]~='empty'and C[G].GearReference.Value==E then if F== and B[F].GearReference.Value==D then if E==nil then B[F].Kill.Value=true return
nil then C[G].Kill.Value=true return false elseif E.Parent==i.Character then C[G false elseif D.Parent==i.Character then B[F].Selected=true return true elseif D.
].Selected=true return true elseif E.Parent==i.Backpack then if E:IsA'Tool'or E: Parent==i.Backpack then if D:IsA'Tool'or D:IsA'HopperBin'then B[F].Selected=
IsA'HopperBin'then C[G].Selected=false end return true else C[G].Kill.Value=true false end return true end B[F].Kill.Value=true return false end end end end
return false end return true end end end end function removeAllEquippedGear(E) function removeAllEquippedGear(D)local E=i.Character:GetChildren()for F=1,#E do
local F=i.Character:GetChildren()for G=1,#F do if(F[G]:IsA'Tool'or F[G]:IsA if(E[F]:IsA'Tool'or E[F]:IsA'HopperBin')and E[F]~=D then if E[F]:IsA'Tool'then E
'HopperBin')and F[G]~=E then if F[G]:IsA'Tool'then F[G].Parent=i.Backpack end if [F].Parent=i.Backpack end if E[F]:IsA'HopperBin'then E[F]:Disable()end end end
F[G]:IsA'HopperBin'then F[G]:Disable()end end end end function hopperBinSwitcher end function hopperBinSwitcher(D,E)if not E then return end E:ToggleSelect()if B
(E,F)if not F then return end F:ToggleSelect()if C[E]=='empty'then return end if [D]=='empty'then return end if not E.Active then B[D].Selected=false
not F.Active then C[E].Selected=false normalizeButton(C[E])else C[E].Selected= normalizeButton(B[D])else B[D].Selected=true enlargeButton(B[D])end end function
true enlargeButton(C[E])end end function toolSwitcher(E)if not C[E]then return toolSwitcher(D)if not B[D]then return end local E=B[D].GearReference.Value if E
end local F=C[E].GearReference.Value if F==nil then return end ==nil then return end removeAllEquippedGear(E)local F=D if D==0 then F=10 end
removeAllEquippedGear(F)local G=E if E==0 then G=10 end for H=1,#C do if C[H]and for G=1,#B do if B[G]and B[G]~='empty'and G~=F then normalizeButton(B[G])B[G].
C[H]~='empty'and H~=G then normalizeButton(C[H])C[H].Selected=false if C[H]. Selected=false if B[G].GearReference and B[G].GearReference.Value and B[G].
GearReference and C[H].GearReference.Value and C[H].GearReference.Value:IsA GearReference.Value:IsA'HopperBin'and B[G].GearReference.Value.Active then B[G].
'HopperBin'and C[H].GearReference.Value.Active then C[H].GearReference.Value: GearReference.Value:ToggleSelect()end end end if E:IsA'HopperBin'then
ToggleSelect()end end end if F:IsA'HopperBin'then hopperBinSwitcher(E,F)else if hopperBinSwitcher(D,E)else if E.Parent==i.Character then E.Parent=i.Backpack if
F.Parent==i.Character then F.Parent=i.Backpack if C[E]~='empty'then C[E]. B[D]~='empty'then B[D].Selected=false normalizeButton(B[D])end else E.Parent=i.
Selected=false normalizeButton(C[E])end else F.Parent=i.Character C[E].Selected= Character B[D].Selected=true enlargeButton(B[D])end end end function
true enlargeButton(C[E])end end end function activateGear(E)local F=nil if E== activateGear(D)local E=nil if D=='0'then E=10 else E=tonumber(D)end if E==nil
'0'then F=10 else F=tonumber(E)end if F==nil then return end if C[F]~='empty' then return end if B[E]~='empty'then toolSwitcher(E)end end enlargeButton=
then toolSwitcher(F)end end enlargeButton=function(E)if E.Size.Y.Scale>1 then function(D)if D.Size.Y.Scale>1 then return end if not D.Parent then return end
return end if not E.Parent then return end if not E.Selected then return end for if not D.Selected then return end for E=1,#B do if B[E]=='empty'then break end
F=1,#C do if C[F]=='empty'then break end if C[F]~=E then normalizeButton(C[F]) if B[E]~=D then normalizeButton(B[E])end end if not x then return end if D:
end end if not y then return end if E:FindFirstChild'Highlight'then E.Highlight. FindFirstChild'Highlight'then D.Highlight.Visible=true end if D:IsA'ImageButton'
Visible=true end if E:IsA'ImageButton'or E:IsA'TextButton'then E.ZIndex=5 local or D:IsA'TextButton'then D.ZIndex=5 local E,F=-(v.X.Scale-D.Size.X.Scale)/2,-(v.
F,G=-(w.X.Scale-E.Size.X.Scale)/2,-(w.Y.Scale-E.Size.Y.Scale)/2 E: Y.Scale-D.Size.Y.Scale)/2 D:TweenSizeAndPosition(v,UDim2.new(D.Position.X.Scale+
TweenSizeAndPosition(w,UDim2.new(E.Position.X.Scale+F,E.Position.X.Offset,E. E,D.Position.X.Offset,D.Position.Y.Scale+F,D.Position.Y.Offset),Enum.
Position.Y.Scale+G,E.Position.Y.Offset),Enum.EasingDirection.Out,Enum. EasingDirection.Out,Enum.EasingStyle.Quad,y/5,x)end end normalizeAllButtons=
EasingStyle.Quad,z/5,y)end end normalizeAllButtons=function()for E=1,#C do if C[ function()for D=1,#B do if B[D]=='empty'then break end if B[D]~=button then
E]=='empty'then break end if C[E]~=button then normalizeButton(C[E],0.1)end end normalizeButton(B[D],0.1)end end end normalizeButton=function(D,E)if not D then
end normalizeButton=function(E,F)if not E then return end if E.Size.Y.Scale<=1 return end if D.Size.Y.Scale<=1 then return end if D.Selected then return end if
then return end if E.Selected then return end if not E.Parent then return end not D.Parent then return end local F=E if F==nil or type(F)~='number'then F=y/5
local G=F if G==nil or type(G)~='number'then G=z/5 end if E:FindFirstChild end if D:FindFirstChild'Highlight'then D.Highlight.Visible=false end if D:IsA
'Highlight'then E.Highlight.Visible=false end if E:IsA'ImageButton'or E:IsA 'ImageButton'or D:IsA'TextButton'then D.ZIndex=1 local G,H=-(w.X.Scale-D.Size.X.
'TextButton'then E.ZIndex=1 local H,I,J=1/v,-(x.X.Scale-E.Size.X.Scale)/2,-(x.Y. Scale)/2,-(w.Y.Scale-D.Size.Y.Scale)/2 D:TweenSizeAndPosition(w,UDim2.new(D.
Scale-E.Size.Y.Scale)/2 E:TweenSizeAndPosition(x,UDim2.new(E.Position.X.Scale+I, Position.X.Scale+G,D.Position.X.Offset,D.Position.Y.Scale+H,D.Position.Y.Offset)
E.Position.X.Offset,E.Position.Y.Scale+J,E.Position.Y.Offset),Enum. ,Enum.EasingDirection.Out,Enum.EasingStyle.Quad,F,x)end end local D=function()
EasingDirection.Out,Enum.EasingStyle.Quad,G,y)end end local E=function()while u while t do wait()end end function pointInRectangle(E,F,G)if E.x>F.x and E.x<(F.x
do wait()end end function pointInRectangle(F,G,H)if F.x>G.x and F.x<(G.x+H.x) +G.x)then if E.y>F.y and E.y<(F.y+G.y)then return true end end return false end
then if F.y>G.y and F.y<(G.y+H.y)then return true end end return false end function swapGear(E,F)local G=F:GetChildren()if#G==1 then if G[1]:FindFirstChild
function swapGear(F,G)local H=G:GetChildren()if#H==1 then if H[1]:FindFirstChild 'SlotNumber'then local H,I=tonumber(G[1].SlotNumber.Text),tonumber(E.SlotNumber.
'SlotNumber'then local I,J=tonumber(H[1].SlotNumber.Text),tonumber(F.SlotNumber. Text)if H==0 then H=10 end if I==0 then I=10 end B[H]=E B[I]=G[1]G[1].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=E.SlotNumber.Text G[1].SlotNumberDownShadow.Text=E.SlotNumber.Text G[1].
.Text=F.SlotNumber.Text H[1].SlotNumberDownShadow.Text=F.SlotNumber.Text H[1]. SlotNumberUpShadow.Text=E.SlotNumber.Text local J=string.sub(F.Name,5)E.
SlotNumberUpShadow.Text=F.SlotNumber.Text local K=string.sub(G.Name,5)F. SlotNumber.Text=J E.SlotNumberDownShadow.Text=J E.SlotNumberUpShadow.Text=J E.
SlotNumber.Text=K F.SlotNumberDownShadow.Text=K F.SlotNumberUpShadow.Text=K F. Position=UDim2.new(E.Position.X.Scale,0,E.Position.Y.Scale,0)G[1].Position=UDim2
Position=UDim2.new(F.Position.X.Scale,0,F.Position.Y.Scale,0)H[1].Position=UDim2 .new(G[1].Position.X.Scale,0,G[1].Position.Y.Scale,0)G[1].Parent=E.Parent E.
.new(H[1].Position.X.Scale,0,H[1].Position.Y.Scale,0)H[1].Parent=F.Parent F. Parent=F end else local H=tonumber(E.SlotNumber.Text)if H==0 then H=10 end B[H]=
Parent=G end else local I=tonumber(F.SlotNumber.Text)if I==0 then I=10 end C[I]= 'empty'local I=string.sub(F.Name,5)E.SlotNumber.Text=I E.SlotNumberDownShadow.
'empty'local J=string.sub(G.Name,5)F.SlotNumber.Text=J F.SlotNumberDownShadow. Text=I E.SlotNumberUpShadow.Text=I local J=tonumber(E.SlotNumber.Text)if J==0
Text=J F.SlotNumberUpShadow.Text=J local K=tonumber(F.SlotNumber.Text)if K==0 then J=10 end B[J]=E E.Position=UDim2.new(E.Position.X.Scale,0,E.Position.Y.
then K=10 end C[K]=F F.Position=UDim2.new(F.Position.X.Scale,0,F.Position.Y. Scale,0)E.Parent=F end end function resolveDrag(E,F,G)local H,I=Vector2.new(F,G)
Scale,0)F.Parent=G end end function resolveDrag(F,G,H)local I,J=Vector2.new(G,H) ,E.Parent local J=I.Parent:GetChildren()for K=1,#J do if J[K]:IsA'Frame'then if
,F.Parent local K=J.Parent:GetChildren()for L=1,#K do if K[L]:IsA'Frame'then if pointInRectangle(H,J[K].AbsolutePosition,J[K].AbsoluteSize)then swapGear(E,J[K])
pointInRectangle(I,K[L].AbsolutePosition,K[L].AbsoluteSize)then swapGear(F,K[L]) return true end end end if(F<I.AbsolutePosition.x or F>(I.AbsolutePosition.x+I.
return true end end end if G<J.AbsolutePosition.x or G>(J.AbsolutePosition.x+J. AbsoluteSize.x))or(G<I.AbsolutePosition.y or G>(I.AbsolutePosition.y+I.
AbsoluteSize.x)then reorganizeLoadout(F,false)return false elseif H<J. AbsoluteSize.y))then reorganizeLoadout(E,false)return false else if dragBeginPos
AbsolutePosition.y or H>(J.AbsolutePosition.y+J.AbsoluteSize.y)then then E.Position=dragBeginPos end return-1 end end function unequipAllItems(E)for
reorganizeLoadout(F,false)return false else if dragBeginPos then F.Position= F=1,#B do if B[F]=='empty'then break end if B[F].GearReference.Value and B[F].
dragBeginPos end return-1 end end function unequipAllItems(F)for G=1,#C do if C[ GearReference.Value~=E then if B[F].GearReference.Value:IsA'HopperBin'then B[F].
G]=='empty'then break end if C[G].GearReference.Value and C[G].GearReference. GearReference.Value:Disable()elseif B[F].GearReference.Value:IsA'Tool'then B[F].
Value~=F then if C[G].GearReference.Value:IsA'HopperBin'then C[G].GearReference. GearReference.Value.Parent=game.Players.LocalPlayer.Backpack end B[F].Selected=
Value:Disable()elseif C[G].GearReference.Value:IsA'Tool'then C[G].GearReference. false end end end function showToolTip(E,F)if E and E:FindFirstChild
Value.Parent=game.Players.LocalPlayer.Backpack end C[G].Selected=false end end 'ToolTipLabel'and E.ToolTipLabel:IsA'TextLabel'and not IsTouchDevice()then E.
end function showToolTip(F,G)if F and F:FindFirstChild'ToolTipLabel'and F. ToolTipLabel.Text=tostring(F)local G=E.ToolTipLabel.TextBounds.X+6 E.
ToolTipLabel:IsA'TextLabel'and not IsTouchDevice()then F.ToolTipLabel.Text= ToolTipLabel.Size=UDim2.new(0,G,0,20)E.ToolTipLabel.Position=UDim2.new(0.5,-G/2,
tostring(G)local H=F.ToolTipLabel.TextBounds.X+6 F.ToolTipLabel.Size=UDim2.new(0 0,-30)E.ToolTipLabel.Visible=true end end function hideToolTip(E,F)if E and E:
,H,0,20)F.ToolTipLabel.Position=UDim2.new(0.5,-H/2,0,-30)F.ToolTipLabel.Visible= FindFirstChild'ToolTipLabel'and E.ToolTipLabel:IsA'TextLabel'then E.ToolTipLabel
true end end function hideToolTip(F,G)if F and F:FindFirstChild'ToolTipLabel'and .Visible=false end end local E=function(E,F,G,H)D()t=true if E:FindFirstChild
F.ToolTipLabel:IsA'TextLabel'then F.ToolTipLabel.Visible=false end end local F= 'RobloxBuildTool'then t=false return end if not E:IsA'Tool'then if not E:IsA
function(F,G,H,I)E()u=true if F:FindFirstChild'RobloxBuildTool'then u=false 'HopperBin'then t=false return end end if not G then for I=1,#B do if B[I]~=
return end if not F:IsA'Tool'then if not F:IsA'HopperBin'then u=false return end 'empty'and B[I].GearReference.Value==E then t=false return end end end local I=a
end if not H then for J=1,#C do if C[J]~='empty'and C[J].GearReference.Value==F .TempSlot:clone()I.Name=E.Name I.GearImage.Image=E.TextureId if I.GearImage.
then u=false return end end end local J=a.TempSlot:clone()J.Name=F.Name J. Image==''then I.GearText.Text=E.Name end I.GearReference.Value=E I.MouseEnter:
GearImage.Image=F.TextureId if J.GearImage.Image==''then J.GearText.Text=F.Name connect(function()if I.GearReference and I.GearReference.Value['ToolTip']and I.
end J.GearReference.Value=F J.MouseEnter:connect(function()if J.GearReference GearReference.Value.ToolTip~=''then showToolTip(I,I.GearReference.Value.ToolTip)
and J.GearReference.Value['ToolTip']and J.GearReference.Value.ToolTip~=''then end end)I.MouseLeave:connect(function()if I.GearReference and I.GearReference.
showToolTip(J,J.GearReference.Value.ToolTip)end end)J.MouseLeave:connect( Value['ToolTip']and I.GearReference.Value.ToolTip~=''then hideToolTip(I,I.
function()if J.GearReference and J.GearReference.Value['ToolTip']and J. GearReference.Value.ToolTip)end end)I.RobloxLocked=true local J=-1 if not G then
GearReference.Value.ToolTip~=''then hideToolTip(J,J.GearReference.Value.ToolTip) for K=1,#B do if B[K]=='empty'then J=K break end end else J=G end if J==-1 then
end end)J.RobloxLocked=true local K=-1 if not H then for L=1,#C do if C[L]== t=false return end local K=J%10 local L=a:FindFirstChild('Slot'..tostring(K))I.
'empty'then K=L break end end else K=H end if K==-1 then u=false return end Parent=L if H then local M,N=H.AbsolutePosition,I.AbsolutePosition local O=M-N I
local L=K%10 local M=a:FindFirstChild('Slot'..tostring(L))J.Parent=M if I then .Position=UDim2.new(I.Position.X.Scale,O.x,I.Position.Y.Scale,O.y)I.ZIndex=4 end
local N,O=I.AbsolutePosition,J.AbsolutePosition local P=N-O J.Position=UDim2. if G then reorganizeLoadout(I,true,F,G)else reorganizeLoadout(I,true)end if I.
new(J.Position.X.Scale,P.x,J.Position.Y.Scale,P.y)J.ZIndex=4 end if H then Parent==nil then t=false return end if F then I.Selected=true unequipAllItems(E)
reorganizeLoadout(J,true,G,H)else reorganizeLoadout(J,true)end if J.Parent==nil delay(y+0.01,function()if I:FindFirstChild'GearReference'and((I.GearReference.
then u=false return end if G then J.Selected=true unequipAllItems(F)delay(z+0.01 Value:IsA'Tool'and I.GearReference.Value.Parent==i.Character)or(I.GearReference.
,function()if J:FindFirstChild'GearReference'and((J.GearReference.Value:IsA Value:IsA'HopperBin'and I.GearReference.Value.Active==true))then enlargeButton(I
'Tool'and J.GearReference.Value.Parent==i.Character)or(J.GearReference.Value:IsA )end end)end local M,N,O,P,Q,R,S=nil,nil N=I.MouseButton1Click:connect(function(
'HopperBin'and J.GearReference.Value.Active==true))then enlargeButton(J)end end) )if characterInWorkspace()then if not I.Draggable then activateGear(I.SlotNumber
end local N,O,P,Q,R,S,T=nil,nil O=J.MouseButton1Click:connect(function()if .Text)end end end)P=I.MouseEnter:connect(function()if k.Visible then I.Draggable
characterInWorkspace()then if not J.Draggable then activateGear(J.SlotNumber. =true end end)S=I.DragBegin:connect(function(T)M=T I.ZIndex=7 local U=I:
Text)end end end)Q=J.MouseEnter:connect(function()if k.Visible then J.Draggable= GetChildren()for V=1,#U do if U[V]:IsA'TextLabel'then if string.find(U[V].Name,
true end end)T=J.DragBegin:connect(function(U)N=U J.ZIndex=7 local V=J: 'Shadow')then U[V].ZIndex=8 else U[V].ZIndex=9 end elseif U[V]:IsA'Frame'or U[V]
GetChildren()for W=1,#V do if V[W]:IsA'TextLabel'then if string.find(V[W].Name, :IsA'ImageLabel'then U[V].ZIndex=7 end end end)R=I.DragStopped:connect(function(
'Shadow')then V[W].ZIndex=8 else V[W].ZIndex=9 end elseif V[W]:IsA'Frame'or V[W] T,U)if I.Selected then I.ZIndex=4 else I.ZIndex=3 end local V=I:GetChildren()for
:IsA'ImageLabel'then V[W].ZIndex=7 end end end)S=J.DragStopped:connect(function( W=1,#V do if V[W]:IsA'TextLabel'then if string.find(V[W].Name,'Shadow')then V[W]
U,V)if J.Selected then J.ZIndex=4 else J.ZIndex=3 end local W=J:GetChildren()for .ZIndex=3 else V[W].ZIndex=4 end elseif V[W]:IsA'Frame'or V[W]:IsA'ImageLabel'
X=1,#W do if W[X]:IsA'TextLabel'then if string.find(W[X].Name,'Shadow')then W[X] then V[W].ZIndex=2 end end resolveDrag(I,T,U)end)Q=I.MouseLeave:connect(function
.ZIndex=3 else W[X].ZIndex=4 end elseif W[X]:IsA'Frame'or W[X]:IsA'ImageLabel' ()I.Draggable=false end)O=I.AncestryChanged:connect(function()if I.Parent and I.
then W[X].ZIndex=2 end end resolveDrag(J,U,V)end)R=J.MouseLeave:connect(function Parent.Parent==a then return end if N then N:disconnect()end if O then O:
()J.Draggable=false end)P=J.AncestryChanged:connect(function()if J.Parent and J. disconnect()end if P then P:disconnect()end if Q then Q:disconnect()end if R
Parent.Parent==a then return end if O then O:disconnect()end if P then P: then R:disconnect()end if S then S:disconnect()end end)local T,U=nil,nil T=E.
disconnect()end if Q then Q:disconnect()end if R then R:disconnect()end if S AncestryChanged:connect(function(V,W)if not checkToolAncestry(V,W)then if T then
then S:disconnect()end if T then T:disconnect()end end)local U,V=nil,nil U=F. T:disconnect()end if U then U:disconnect()end removeFromInventory(E)elseif W==
AncestryChanged:connect(function(W,X)if not checkToolAncestry(W,X)then if U then game.Players.LocalPlayer.Backpack then normalizeButton(I)end end)U=E.Changed:
U:disconnect()end if V then V:disconnect()end removeFromInventory(F)elseif X== connect(function(V)if V=='Name'then if I and I.GearImage.Image==''then I.
game.Players.LocalPlayer.Backpack then normalizeButton(J)end end)V=F.Changed: GearText.Text=E.Name end elseif V=='Active'then if E and E:IsA'HopperBin'then if
connect(function(W)if W=='Name'then if J and J.GearImage.Image==''then J. not E.Active then I.Selected=false normalizeButton(I)end end elseif V==
GearText.Text=F.Name end elseif W=='Active'then if F and F:IsA'HopperBin'then if 'TextureId'then I.GearImage.Image=E.TextureId end end)t=false Spawn(function()
not F.Active then J.Selected=false normalizeButton(J)end end elseif W== while backpackIsOpen()do wait(0.03)end for V=1,#B do if B[V]~='empty'then f.
'TextureId'then J.GearImage.Image=F.TextureId end end)u=false Spawn(function()
while backpackIsOpen()do wait(0.03)end for W=1,#C do if C[W]~='empty'then f.
Position=UDim2.new(0.5,-60,1,-108)if c then f.Visible=true h.Visible=true end Position=UDim2.new(0.5,-60,1,-108)if c then f.Visible=true h.Visible=true end
end end end)end function addToInventory(G)if not G:IsA'Tool'or not G:IsA end end end)end function addToInventory(F)if not F:IsA'Tool'or not F:IsA
'HopperBin'then return end local H=nil for I=1,#B do if B[I]and B[I]==G then 'HopperBin'then return end local G=nil for H=1,#A do if A[H]and A[H]==F then
return end if not B[I]then H=I end end if H then B[H]=G elseif#B<1 then B[1]=G return end if not A[H]then G=H end end if G then A[G]=F elseif#A<1 then A[1]=F
else B[#B+1]=G end end function removeFromInventory(G)for H=1,#B do if B[H]==G else A[#A+1]=F end end function removeFromInventory(F)for G=1,#A do if A[G]==F
then table.remove(B,H)B[H]=nil end end end local G,H=function()loadoutChildren=a then table.remove(A,G)A[G]=nil end end end local F,G=function()loadoutChildren=a
:GetChildren()for G=1,#loadoutChildren do if loadoutChildren[G]:IsA'Frame'then :GetChildren()for F=1,#loadoutChildren do if loadoutChildren[F]:IsA'Frame'then
loadoutChildren[G].BackgroundTransparency=0.5 local H=tonumber(string.sub( loadoutChildren[F].BackgroundTransparency=0.5 local G=tonumber(string.sub(
loadoutChildren[G].Name,5))if H==0 then H=10 end if d.AbsoluteSize.Y<=320 then loadoutChildren[F].Name,5))if G==0 then G=10 end if d.AbsoluteSize.Y<=320 then
loadoutChildren[G]:TweenPosition(UDim2.new(0,(H-1)*60,0,0),Enum.EasingDirection. loadoutChildren[F]:TweenPosition(UDim2.new(0,(G-1)*60,0,0),Enum.EasingDirection.
Out,Enum.EasingStyle.Quad,0.25,true)else loadoutChildren[G]:TweenPosition(UDim2. Out,Enum.EasingStyle.Quad,0.25,true)else loadoutChildren[F]:TweenPosition(UDim2.
new((H-1)/10,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quad,0.25,true)end new((G-1)/10,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quad,0.25,true)end
end end end,function()loadoutChildren=a:GetChildren()local G,H={},nil for I=1,# end end end,function()loadoutChildren=a:GetChildren()local F,G={},nil for H=1,#
loadoutChildren do if loadoutChildren[I]:IsA'Frame'then if#loadoutChildren[I]: loadoutChildren do if loadoutChildren[H]:IsA'Frame'then if#loadoutChildren[H]:
GetChildren()>0 then if loadoutChildren[I].Name=='Slot0'then H=loadoutChildren[I GetChildren()>0 then if loadoutChildren[H].Name=='Slot0'then G=loadoutChildren[H
]else table.insert(G,loadoutChildren[I])end end loadoutChildren[I]. ]else table.insert(F,loadoutChildren[H])end end loadoutChildren[H].
BackgroundTransparency=1 end end if H then table.insert(G,H)end local I=(1-(#G* BackgroundTransparency=1 end end if G then table.insert(F,G)end local H=(1-(#F*
0.1))/2 for J=1,#G do if d.AbsoluteSize.Y<=320 then I=(0.5-(#G*0.333)/2)G[J]: 0.1))/2 for I=1,#F do if d.AbsoluteSize.Y<=320 then H=(0.5-(#F*0.333)/2)F[I]:
TweenPosition(UDim2.new(I+(J-1)*0.33,0,0,0),Enum.EasingDirection.Out,Enum. TweenPosition(UDim2.new(H+(I-1)*0.33,0,0,0),Enum.EasingDirection.Out,Enum.
EasingStyle.Quad,0.25,true)else G[J]:TweenPosition(UDim2.new(I+((J-1)*0.1),0,0,0 EasingStyle.Quad,0.25,true)else F[I]:TweenPosition(UDim2.new(H+((I-1)*0.1),0,0,0
),Enum.EasingDirection.Out,Enum.EasingStyle.Quad,0.25,true)end end end function ),Enum.EasingDirection.Out,Enum.EasingStyle.Quad,0.25,true)end end end function
editLoadout()D=true if q then G()end end function readonlyLoadout()if not q then editLoadout()C=true if p then F()end end function readonlyLoadout()if not p then
H()end end function setupBackpackListener()if t then t:disconnect()t=nil end t=i G()end end function setupBackpackListener()if s then s:disconnect()s=nil end s=i
.Backpack.ChildAdded:connect(function(I)if not A then A=true if c then f.Visible .Backpack.ChildAdded:connect(function(H)if not z then z=true if c then f.Visible
=true h.Visible=true end end F(I)addToInventory(I)end)end function =true h.Visible=true end end E(H)addToInventory(H)end)end function
playerCharacterChildAdded(I)F(I,true)addToInventory(I)end function playerCharacterChildAdded(H)E(H,true)addToInventory(H)end function
activateLoadout()a.Visible=true end function deactivateLoadout()a.Visible=false activateLoadout()a.Visible=true end function deactivateLoadout()a.Visible=false
end function tabHandler(I)q=I if I then editLoadout()else readonlyLoadout()end end function tabHandler(H)p=H if H then editLoadout()else readonlyLoadout()end
end function coreGuiChanged(I,J)if I==Enum.CoreGuiType.Backpack or I==Enum. end function coreGuiChanged(H,I)if H==Enum.CoreGuiType.Backpack or H==Enum.
CoreGuiType.All then f.Visible=J h.Visible=J c=J if J then registerNumberKeys() CoreGuiType.All then f.Visible=I h.Visible=I c=I if I then registerNumberKeys()
else unregisterNumberKeys()end end if I==Enum.CoreGuiType.Health or I==Enum. else unregisterNumberKeys()end end if H==Enum.CoreGuiType.Health or H==Enum.
CoreGuiType.All then setHealthBarVisible(game.Players.LocalPlayer.PlayerGui,J) CoreGuiType.All then setHealthBarVisible(game.Players.LocalPlayer.PlayerGui,I)
end end registerNumberKeys()pcall(function()coreGuiChanged(Enum.CoreGuiType. end end registerNumberKeys()pcall(function()coreGuiChanged(Enum.CoreGuiType.
Backpack,Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Backpack)) Backpack,Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Backpack))
coreGuiChanged(Enum.CoreGuiType.Health,Game.StarterGui:GetCoreGuiEnabled(Enum. coreGuiChanged(Enum.CoreGuiType.Health,Game.StarterGui:GetCoreGuiEnabled(Enum.
CoreGuiType.Health))Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged) CoreGuiType.Health))Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged)
end)wait()waitForChild(i,'Backpack')waitForProperty(i,'Character')delay(1, end)wait()waitForChild(i,'Backpack')waitForProperty(i,'Character')delay(1,
function()local I=i.Backpack:GetChildren()local J=math.min(10,#I)for K=1,J do if function()local H=i.Backpack:GetChildren()local I=math.min(10,#H)for J=1,I do if
c then f.Visible=true h.Visible=true end F(I[K],false)end setupBackpackListener( c then f.Visible=true h.Visible=true end E(H[J],false)end setupBackpackListener(
)end)delay(2,function()if not D then if d.AbsoluteSize.Y<=320 then local I=a: )end)delay(2,function()if not C then if d.AbsoluteSize.Y<=320 then local H=a:
GetChildren()for J=1,#I do local K=tonumber(string.sub(I[J].Name,5,string.len(I[ GetChildren()for I=1,#H do local J=tonumber(string.sub(H[I].Name,5,string.len(H[
J].Name)))if type(K)=='number'then I[J].Position=UDim2.new(0,(K-1)*60,0,0)end I].Name)))if type(J)=='number'then H[I].Position=UDim2.new(0,(J-1)*60,0,0)end
end end end wait(0.25)end)i.ChildAdded:connect(function(I)if I:IsA'PlayerGui' end end end wait(0.25)end)i.ChildAdded:connect(function(H)if H:IsA'PlayerGui'
then moveHealthBar(I)end end)waitForProperty(i,'Character')for I,J in ipairs(i. then moveHealthBar(H)end end)waitForProperty(i,'Character')for H,I in ipairs(i.
Character:GetChildren())do playerCharacterChildAdded(J)end s=i.Character. Character:GetChildren())do playerCharacterChildAdded(I)end r=i.Character.
ChildAdded:connect(function(K)playerCharacterChildAdded(K)end)waitForChild(i. ChildAdded:connect(function(J)playerCharacterChildAdded(J)end)waitForChild(i.
Character,'Humanoid')humanoidDiedCon=i.Character.Humanoid.Died:connect(function( Character,'Humanoid')humanoidDiedCon=i.Character.Humanoid.Died:connect(function(
)if humanoidDiedCon then humanoidDiedCon:disconnect()humanoidDiedCon=nil end )if humanoidDiedCon then humanoidDiedCon:disconnect()humanoidDiedCon=nil end
deactivateLoadout()if t then t:disconnect()t=nil end D=false end)i. deactivateLoadout()if s then s:disconnect()s=nil end C=false end)i.
CharacterRemoving:connect(function()for K=1,#C do if C[K]~='empty'then C[K]. CharacterRemoving:connect(function()for J=1,#B do if B[J]~='empty'then B[J].
Parent=nil C[K]='empty'end end end)i.CharacterAdded:connect(function() Parent=nil B[J]='empty'end end end)i.CharacterAdded:connect(function()
waitForProperty(game.Players,'LocalPlayer')i=game.Players.LocalPlayer waitForProperty(game.Players,'LocalPlayer')i=game.Players.LocalPlayer
waitForChild(i,'Backpack')delay(1,function()local K=i.Backpack:GetChildren() waitForChild(i,'Backpack')delay(1,function()local J=i.Backpack:GetChildren()
local L=math.min(10,#K)for M=1,L do if c then f.Visible=true h.Visible=true end local K=math.min(10,#J)for L=1,K do if c then f.Visible=true h.Visible=true end
F(K[M],false)end setupBackpackListener()end)activateLoadout()if s then s: E(J[L],false)end setupBackpackListener()end)activateLoadout()if r then r:
disconnect()s=nil end s=i.Character.ChildAdded:connect(function(K)F(K,true)end) disconnect()r=nil end r=i.Character.ChildAdded:connect(function(J)E(J,true)end)
waitForChild(i.Character,'Humanoid')if g.Visible then m:Fire()end waitForChild(i.Character,'Humanoid')if g.Visible then m:Fire()end
humanoidDiedCon=i.Character.Humanoid.Died:connect(function()if c then f.Visible= humanoidDiedCon=i.Character.Humanoid.Died:connect(function()if c then f.Visible=
false h.Visible=false end A=false deactivateLoadout()if humanoidDiedCon then false h.Visible=false end z=false deactivateLoadout()if humanoidDiedCon then
humanoidDiedCon:disconnect()humanoidDiedCon=nil end if t then t:disconnect()t= humanoidDiedCon:disconnect()humanoidDiedCon=nil end if s then s:disconnect()s=
nil end end)waitForChild(i,'PlayerGui')moveHealthBar(i.PlayerGui)delay(2, nil end end)waitForChild(i,'PlayerGui')moveHealthBar(i.PlayerGui)delay(2,
function()if not D then if d.AbsoluteSize.Y<=320 then local K=a:GetChildren()for function()if not C then if d.AbsoluteSize.Y<=320 then local J=a:GetChildren()for
L=1,#K do local M=tonumber(string.sub(K[L].Name,5,string.len(K[L].Name)))if K=1,#J do local L=tonumber(string.sub(J[K].Name,5,string.len(J[K].Name)))if
type(M)=='number'then K[L].Position=UDim2.new(0,(M-1)*60,0,0)end end end end type(L)=='number'then J[K].Position=UDim2.new(0,(L-1)*60,0,0)end end end end
wait(0.25)end)end)waitForChild(k,'SwapSlot')k.SwapSlot.Changed:connect(function( wait(0.25)end)end)waitForChild(k,'SwapSlot')k.SwapSlot.Changed:connect(function(
)if k.SwapSlot.Value then local K=k.SwapSlot local L=K.Slot.Value if L==0 then L )if k.SwapSlot.Value then local J=k.SwapSlot local K=J.Slot.Value if K==0 then K
=10 end if C[L]then reorganizeLoadout(C[L],false)end if K.GearButton.Value then =10 end if B[K]then reorganizeLoadout(B[K],false)end if J.GearButton.Value then
F(K.GearButton.Value.GearReference.Value,false,L)end k.SwapSlot.Value=false end E(J.GearButton.Value.GearReference.Value,false,K)end k.SwapSlot.Value=false end
end)game:GetService'GuiService'.KeyPressed:connect(function(K)if end)game:GetService'GuiService'.KeyPressed:connect(function(J)if
characterInWorkspace()then activateGear(K)end end)m.Event:connect(editLoadout)n. characterInWorkspace()then activateGear(J)end end)m.Event:connect(editLoadout)n.
Event:connect(H)o.Event:connect(function(K)tabHandler(K==b)end) Event:connect(G)o.Event:connect(function(J)tabHandler(J==b)end)

View File

@ -1,154 +1,159 @@
local a,b,c,d,e,f,g,h,i,j,k,l,m,n={},string,math,table,error,tonumber,tostring, local a,b,c,d,e,f,g,h,i,j,k,l,m={},string,math,table,error,tonumber,tostring,
type,setmetatable,pairs,ipairs,assert,Chipmunk,{buffer={}}function n:New()local type,setmetatable,pairs,ipairs,assert,{buffer={}}function m:New()local n={}i(n,
o={}i(o,self)self.__index=self o.buffer={}return o end function n:Append(o)self. self)self.__index=self n.buffer={}return n end function m:Append(n)self.buffer[#
buffer[#self.buffer+1]=o end function n:ToString()return d.concat(self.buffer) self.buffer+1]=n end function m:ToString()return d.concat(self.buffer)end local
end local o={backslashes={['\b']='\\b',['\t']='\\t',['\n']='\\n',['\f']='\\f',[ n={backslashes={['\b']='\\b',['\t']='\\t',['\n']='\\n',['\f']='\\f',['\r']='\\r'
'\r']='\\r',['"']='\\"',['\\']='\\\\',['/']='\\/'}}function o:New()local p={}p. ,['"']='\\"',['\\']='\\\\',['/']='\\/'}}function n:New()local o={}o.writer=m:
writer=n:New()i(p,self)self.__index=self return p end function o:Append(p)self. New()i(o,self)self.__index=self return o end function n:Append(o)self.writer:
writer:Append(p)end function o:ToString()return self.writer:ToString()end Append(o)end function n:ToString()return self.writer:ToString()end function n:
function o:Write(p)local q=h(p)if q=='nil'then self:WriteNil()elseif q== Write(o)local p=h(o)if p=='nil'then self:WriteNil()elseif p=='boolean'or p==
'boolean'or q=='number'then self:WriteString(p)elseif q=='string'then self: 'number'then self:WriteString(o)elseif p=='string'then self:ParseString(o)elseif
ParseString(p)elseif q=='table'then self:WriteTable(p)elseif q=='function'then p=='table'then self:WriteTable(o)elseif p=='function'then self:WriteFunction(o)
self:WriteFunction(p)elseif q=='thread'or q=='userdata'then self:WriteError(p) elseif p=='thread'or p=='userdata'then self:WriteError(o)end end function n:
end end function o:WriteNil()self:Append'null'end function o:WriteString(p)self: WriteNil()self:Append'null'end function n:WriteString(o)self:Append(g(o))end
Append(g(p))end function o:ParseString(p)self:Append'"'self:Append(b.gsub(p, function n:ParseString(o)self:Append'"'self:Append(b.gsub(o,'[%z%c\\"/]',
'[%z%c\\"/]',function(q)local r=self.backslashes[q]if r then return r end return function(p)local q=self.backslashes[p]if q then return q end return b.format(
b.format('\\u%.4X',b.byte(q))end))self:Append'"'end function o:IsArray(p)local q '\\u%.4X',b.byte(p))end))self:Append'"'end function n:IsArray(o)local p,q=0,
,r=0,function(q)if h(q)=='number'and q>0 then if c.floor(q)==q then return true function(p)if h(p)=='number'and p>0 then if c.floor(p)==p then return true end
end end return false end for s,t in j(p)do if not r(s)then return false,'{','}' end return false end for r,s in j(o)do if not q(r)then return false,'{','}'else
else q=c.max(q,s)end end return true,'[',']',q end function o:WriteTable(p)local p=c.max(p,r)end end return true,'[',']',p end function n:WriteTable(o)local p,q,
q,r,s,t=self:IsArray(p)self:Append(r)if q then for u=1,t do self:Write(p[u])if u r,s=self:IsArray(o)self:Append(q)if p then for t=1,s do self:Write(o[t])if t<s
<t then self:Append','end end else local u=true for v,w in j(p)do if not u then then self:Append','end end else local t=true for u,v in j(o)do if not t then
self:Append','end u=false self:ParseString(v)self:Append':'self:Write(w)end end self:Append','end t=false self:ParseString(u)self:Append':'self:Write(v)end end
self:Append(s)end function o:WriteError(p)e(b.format( self:Append(r)end function n:WriteError(o)e(b.format(
'Encoding of %s unsupported',g(p)))end function o:WriteFunction(p)if p==Null 'Encoding of %s unsupported',g(o)))end function n:WriteFunction(o)if o==Null
then self:WriteNil()else self:WriteError(p)end end local p={s='',i=0}function p: then self:WriteNil()else self:WriteError(o)end end local o={s='',i=0}function o:
New(q)local r={}i(r,self)self.__index=self r.s=q or r.s return r end function p: New(p)local q={}i(q,self)self.__index=self q.s=p or q.s return q end function o:
Peek()local q=self.i+1 if q<=#self.s then return b.sub(self.s,q,q)end return nil Peek()local p=self.i+1 if p<=#self.s then return b.sub(self.s,p,p)end return nil
end function p:Next()self.i=self.i+1 if self.i<=#self.s then return b.sub(self.s end function o:Next()self.i=self.i+1 if self.i<=#self.s then return b.sub(self.s
,self.i,self.i)end return nil end function p:All()return self.s end local q={ ,self.i,self.i)end return nil end function o:All()return self.s end local p={
escapes={['t']='\t',['n']='\n',['f']='\f',['r']='\r',['b']='\b'}}function q:New( escapes={['t']='\t',['n']='\n',['f']='\f',['r']='\r',['b']='\b'}}function p:New(
r)local s={}s.reader=p:New(r)i(s,self)self.__index=self return s end function q: q)local r={}r.reader=o:New(q)i(r,self)self.__index=self return r end function p:
Read()self:SkipWhiteSpace()local r=self:Peek()if r==nil then e(b.format( Read()self:SkipWhiteSpace()local q=self:Peek()if q==nil then e(b.format(
"Nil string: '%s'",self:All()))elseif r=='{'then return self:ReadObject()elseif "Nil string: '%s'",self:All()))elseif q=='{'then return self:ReadObject()elseif
r=='['then return self:ReadArray()elseif r=='"'then return self:ReadString() q=='['then return self:ReadArray()elseif q=='"'then return self:ReadString()
elseif b.find(r,'[%+%-%d]')then return self:ReadNumber()elseif r=='t'then return elseif b.find(q,'[%+%-%d]')then return self:ReadNumber()elseif q=='t'then return
self:ReadTrue()elseif r=='f'then return self:ReadFalse()elseif r=='n'then return self:ReadTrue()elseif q=='f'then return self:ReadFalse()elseif q=='n'then return
self:ReadNull()elseif r=='/'then self:ReadComment()return self:Read()else return self:ReadNull()elseif q=='/'then self:ReadComment()return self:Read()else return
nil end end function q:ReadTrue()self:TestReservedWord{'t','r','u','e'}return nil end end function p:ReadTrue()self:TestReservedWord{'t','r','u','e'}return
true end function q:ReadFalse()self:TestReservedWord{'f','a','l','s','e'}return true end function p:ReadFalse()self:TestReservedWord{'f','a','l','s','e'}return
false end function q:ReadNull()self:TestReservedWord{'n','u','l','l'}return nil false end function p:ReadNull()self:TestReservedWord{'n','u','l','l'}return nil
end function q:TestReservedWord(r)for s,t in k(r)do if self:Next()~=t then e(b. end function p:TestReservedWord(q)for r,s in k(q)do if self:Next()~=s then e(b.
format("Error reading '%s': %s",d.concat(r),self:All()))end end end function q: format("Error reading '%s': %s",d.concat(q),self:All()))end end end function p:
ReadNumber()local r,s=self:Next(),self:Peek()while s~=nil and b.find(s, ReadNumber()local q,r=self:Next(),self:Peek()while r~=nil and b.find(r,
'[%+%-%d%.eE]')do r=r..self:Next()s=self:Peek()end r=f(r)if r==nil then e(b. '[%+%-%d%.eE]')do q=q..self:Next()r=self:Peek()end q=f(q)if q==nil then e(b.
format("Invalid number: '%s'",r))else return r end end function q:ReadString() format("Invalid number: '%s'",q))else return q end end function p:ReadString()
local r=''l(self:Next()=='"')while self:Peek()~='"'do local s=self:Next()if s== local q=''l(self:Next()=='"')while self:Peek()~='"'do local r=self:Next()if r==
'\\'then s=self:Next()if self.escapes[s]then s=self.escapes[s]end end r=r..s end '\\'then r=self:Next()if self.escapes[r]then r=self.escapes[r]end end q=q..r end
l(self:Next()=='"')local s=function(s)return b.char(f(s,16))end return b.gsub(r, l(self:Next()=='"')local r=function(r)return b.char(f(r,16))end return b.gsub(q,
'u%x%x(%x%x)',s)end function q:ReadComment()l(self:Next()=='/')local r=self: 'u%x%x(%x%x)',r)end function p:ReadComment()l(self:Next()=='/')local q=self:
Next()if r=='/'then self:ReadSingleLineComment()elseif r=='*'then self: Next()if q=='/'then self:ReadSingleLineComment()elseif q=='*'then self:
ReadBlockComment()else e(b.format('Invalid comment: %s',self:All()))end end ReadBlockComment()else e(b.format('Invalid comment: %s',self:All()))end end
function q:ReadBlockComment()local r=false while not r do local s=self:Next()if function p:ReadBlockComment()local q=false while not q do local r=self:Next()if
s=='*'and self:Peek()=='/'then r=true end if not r and s=='/'and self:Peek()== r=='*'and self:Peek()=='/'then q=true end if not q and r=='/'and self:Peek()==
'*'then e(b.format("Invalid comment: %s, '/*' illegal.",self:All()))end end self '*'then e(b.format("Invalid comment: %s, '/*' illegal.",self:All()))end end self
:Next()end function q:ReadSingleLineComment()local r=self:Next()while r~='\r'and :Next()end function p:ReadSingleLineComment()local q=self:Next()while q~='\r'and
r~='\n'do r=self:Next()end end function q:ReadArray()local r={}l(self:Next()== q~='\n'do q=self:Next()end end function p:ReadArray()local q={}l(self:Next()==
'[')local s=false if self:Peek()==']'then s=true end while not s do local t=self '[')local r=false if self:Peek()==']'then r=true end while not r do local s=self
:Read()r[#r+1]=t self:SkipWhiteSpace()if self:Peek()==']'then s=true end if not :Read()q[#q+1]=s self:SkipWhiteSpace()if self:Peek()==']'then r=true end if not
s then local u=self:Next()if u~=','then e(b.format( r then local t=self:Next()if t~=','then e(b.format(
"Invalid array: '%s' due to: '%s'",self:All(),u))end end end l(']'==self:Next()) "Invalid array: '%s' due to: '%s'",self:All(),t))end end end l(']'==self:Next())
return r end function q:ReadObject()local r={}l(self:Next()=='{')local s=false return q end function p:ReadObject()local q={}l(self:Next()=='{')local r=false
if self:Peek()=='}'then s=true end while not s do local t=self:Read()if h(t)~= if self:Peek()=='}'then r=true end while not r do local s=self:Read()if h(s)~=
'string'then e(b.format('Invalid non-string object key: %s',t))end self: 'string'then e(b.format('Invalid non-string object key: %s',s))end self:
SkipWhiteSpace()local u=self:Next()if u~=':'then e(b.format( SkipWhiteSpace()local t=self:Next()if t~=':'then e(b.format(
"Invalid object: '%s' due to: '%s'",self:All(),u))end self:SkipWhiteSpace()local "Invalid object: '%s' due to: '%s'",self:All(),t))end self:SkipWhiteSpace()local
v=self:Read()r[t]=v self:SkipWhiteSpace()if self:Peek()=='}'then s=true end if u=self:Read()q[s]=u self:SkipWhiteSpace()if self:Peek()=='}'then r=true end if
not s then u=self:Next()if u~=','then e(b.format( not r then t=self:Next()if t~=','then e(b.format(
"Invalid array: '%s' near: '%s'",self:All(),u))end end end l(self:Next()=='}') "Invalid array: '%s' near: '%s'",self:All(),t))end end end l(self:Next()=='}')
return r end function q:SkipWhiteSpace()local r=self:Peek()while r~=nil and b. return q end function p:SkipWhiteSpace()local q=self:Peek()while q~=nil and b.
find(r,'[%s/]')do if r=='/'then self:ReadComment()else self:Next()end r=self: find(q,'[%s/]')do if q=='/'then self:ReadComment()else self:Next()end q=self:
Peek()end end function q:Peek()return self.reader:Peek()end function q:Next() Peek()end end function p:Peek()return self.reader:Peek()end function p:Next()
return self.reader:Next()end function q:All()return self.reader:All()end return self.reader:Next()end function p:All()return self.reader:All()end
function Encode(r)local s=o:New()s:Write(r)return s:ToString()end function function Encode(q)local r=n:New()r:Write(q)return r:ToString()end function
Decode(r)local s=q:New(r)return s:Read()end function Null()return Null end a. Decode(q)local r=p:New(q)return r:Read()end function Null()return Null end a.
DecodeJSON=function(r)if h(r)=='string'then return Decode(r)end print DecodeJSON=function(q)pcall(function()warn
[[RbxUtility.DecodeJSON is deprecated, please use Game:GetService('HttpService'):JSONDecode() instead.]]
end)if h(q)=='string'then return Decode(q)end print
'RbxUtil.DecodeJSON expects string argument!'return nil end a.EncodeJSON= 'RbxUtil.DecodeJSON expects string argument!'return nil end a.EncodeJSON=
function(r)return Encode(r)end a.MakeWedge=function(r,s,t,u)return game: function(q)pcall(function()warn
GetService'Terrain':AutoWedgeCell(r,s,t)end a.SelectTerrainRegion=function(r,s,t [[RbxUtility.EncodeJSON is deprecated, please use Game:GetService('HttpService'):JSONEncode() instead.]]
,u)local v=game.Workspace:FindFirstChild'Terrain'if not v then return end l(r)l( end)return Encode(q)end a.MakeWedge=function(q,r,s,t)return game:GetService
s)if not h(r)=='Region3'then e( 'Terrain':AutoWedgeCell(q,r,s)end a.SelectTerrainRegion=function(q,r,s,t)local u
[[regionToSelect (first arg), should be of type Region3, but is type]],h(r))end =game.Workspace:FindFirstChild'Terrain'if not u then return end l(q)l(r)if not
if not h(s)=='BrickColor'then e( h(q)=='Region3'then e(
[[color (second arg), should be of type BrickColor, but is type]],h(s))end local [[regionToSelect (first arg), should be of type Region3, but is type]],h(q))end
w,x,y,z,A=v.GetCell,v.WorldToCellPreferSolid,v.CellCenterToWorld,Enum. if not h(r)=='BrickColor'then e(
CellMaterial.Empty,Instance.new'Model'A.Name='SelectionContainer'A.Archivable= [[color (second arg), should be of type BrickColor, but is type]],h(r))end local
false if u then A.Parent=u else A.Parent=game.Workspace end local B,C,D,E,F,G,H= v,w,x,y,z=u.GetCell,u.WorldToCellPreferSolid,u.CellCenterToWorld,Enum.
nil,nil,0,nil,{},{},Instance.new'Part'H.Name='SelectionPart'H.Transparency=1 H. CellMaterial.Empty,Instance.new'Model'z.Name='SelectionContainer'z.Archivable=
Anchored=true H.Locked=true H.CanCollide=false H.FormFactor=Enum.FormFactor. false if t then z.Parent=t else z.Parent=game.Workspace end local A,B,C,D,E,F,G=
Custom H.Size=Vector3.new(4.2,4.2,4.2)local I=Instance.new'SelectionBox'function nil,nil,0,nil,{},{},Instance.new'Part'G.Name='SelectionPart'G.Transparency=1 G.
createAdornment(J)local K,L=nil,nil if#G>0 then K=G[1]['part']L=G[1]['box']d. Anchored=true G.Locked=true G.CanCollide=false G.Size=Vector3.new(4.2,4.2,4.2)
remove(G,1)L.Visible=true else K=H:Clone()K.Archivable=false L=I:Clone()L. local H=Instance.new'SelectionBox'function createAdornment(I)local J,K=nil,nil
Archivable=false L.Adornee=K L.Parent=A L.Adornee=K L.Parent=A end if J then L. if#F>0 then J=F[1]['part']K=F[1]['box']d.remove(F,1)K.Visible=true else J=G:
Color=J end return K,L end function cleanUpAdornments()for J,K in j(F)do if K. Clone()J.Archivable=false K=H:Clone()K.Archivable=false K.Adornee=J K.Parent=z K
KeepAlive~=C then K.SelectionBox.Visible=false d.insert(G,{part=K.SelectionPart, .Adornee=J K.Parent=z end if I then K.Color=I end return J,K end function
box=K.SelectionBox})F[J]=nil end end end function incrementAliveCounter()D=D+1 cleanUpAdornments()for I,J in j(E)do if J.KeepAlive~=B then J.SelectionBox.
if D>1000000 then D=0 end return D end function adornFullCellsInRegion(J,K)local Visible=false d.insert(F,{part=J.SelectionPart,box=J.SelectionBox})E[I]=nil end
L,M=J.CFrame.p-(J.Size/2)+Vector3.new(2,2,2),J.CFrame.p+(J.Size/2)-Vector3.new(2 end end function incrementAliveCounter()C=C+1 if C>1000000 then C=0 end return C
,2,2)local N,O=x(v,L),x(v,M)C=incrementAliveCounter()for P=N.y,O.y do for Q=N.z, end function adornFullCellsInRegion(I,J)local K,L=I.CFrame.p-(I.Size/2)+Vector3.
O.z do for R=N.x,O.x do local S=w(v,R,P,Q)if S~=z then local T,U,V=y(v,R,P,Q), new(2,2,2),I.CFrame.p+(I.Size/2)-Vector3.new(2,2,2)local M,N=w(u,K),w(u,L)B=
Vector3int16.new(R,P,Q),false for W,X in j(F)do if W==U then X.KeepAlive=C if K incrementAliveCounter()for O=M.y,N.y do for P=M.z,N.z do for Q=M.x,N.x do local
then X.SelectionBox.Color=K end V=true break end end if not V then local Y,Z= R=v(u,Q,O,P)if R~=y then local S,T,U=x(u,Q,O,P),Vector3int16.new(Q,O,P),false
createAdornment(K)Y.Size=Vector3.new(4,4,4)Y.CFrame=CFrame.new(T)local _={ for V,W in j(E)do if V==T then W.KeepAlive=B if J then W.SelectionBox.Color=J
SelectionPart=Y,SelectionBox=Z,KeepAlive=C}F[U]=_ end end end end end end U=true break end end if not U then local X,Y=createAdornment(J)X.Size=
cleanUpAdornments()end E=r if t then local J,K=createAdornment(s)J.Size=r.Size J Vector3.new(4,4,4)X.CFrame=CFrame.new(S)local Z={SelectionPart=X,SelectionBox=Y,
.CFrame=r.CFrame F.SelectionPart=J F.SelectionBox=K B=function(L,M)if L and L~=E KeepAlive=B}E[T]=Z end end end end end cleanUpAdornments()end D=q if s then
then E=L J.Size=L.Size J.CFrame=L.CFrame end if M then K.Color=M end end else local I,J=createAdornment(r)I.Size=q.Size I.CFrame=q.CFrame E.SelectionPart=I E.
adornFullCellsInRegion(r,s)B=function(J,K)if J and J~=E then E=J SelectionBox=J A=function(K,L)if K and K~=D then D=K I.Size=K.Size I.CFrame=K.
adornFullCellsInRegion(J,K)end end end local J=function()B=nil if A then A: CFrame end if L then J.Color=L end end else adornFullCellsInRegion(q,r)A=
Destroy()end F=nil end return B,J end function a.CreateSignal()local r,s,t={}, function(I,J)if I and I~=D then D=I adornFullCellsInRegion(I,J)end end end local
Instance.new'BindableEvent',{}function r:connect(u)if self~=r then e( I=function()A=nil if z then z:Destroy()end E=nil end return A,I end function a.
'connect must be called with `:`, not `.`',2)end if h(u)~='function'then e( CreateSignal()local q,r,s={},Instance.new'BindableEvent',{}function q:connect(t)
'Argument #1 of connect must be a function, got a '..h(u),2)end local v=s.Event: if self~=q then e('connect must be called with `:`, not `.`',2)end if h(t)~=
connect(u)t[v]=true local w={}function w:disconnect()v:disconnect()t[v]=nil end 'function'then e('Argument #1 of connect must be a function, got a '..h(t),2)end
return w end function r:disconnect()if self~=r then e( local u=r.Event:connect(t)s[u]=true local v={}function v:disconnect()u:
'disconnect must be called with `:`, not `.`',2)end for u,v in j(t)do u: disconnect()s[u]=nil end v.Disconnect=v.disconnect return v end function q:
disconnect()t[u]=nil end end function r:wait()if self~=r then e( disconnect()if self~=q then e('disconnect must be called with `:`, not `.`',2)
'wait must be called with `:`, not `.`',2)end return s.Event:wait()end function end for t,u in j(s)do t:disconnect()s[t]=nil end end function q:wait()if self~=q
r:fire(...)if self~=r then e('fire must be called with `:`, not `.`',2)end s: then e('wait must be called with `:`, not `.`',2)end return r.Event:wait()end
Fire(...)end return r end local function Create_PrivImpl(r)if h(r)~='string'then function q:fire(...)if self~=q then e('fire must be called with `:`, not `.`',2)
e('Argument of Create must be a string',2)end return function(s)s=s or{}local t, end r:Fire(...)end q.Connect=q.connect q.Disconnect=q.disconnect q.Wait=q.wait q
u=Instance.new(r),nil for v,w in j(s)do if h(v)=='string'then t[v]=w elseif h(v) .Fire=q.fire return q end local function Create_PrivImpl(q)if h(q)~='string'then
=='number'then if h(w)~='userdata'then e( e('Argument of Create must be a string',2)end return function(r)r=r or{}local s,
t,u=Instance.new(q),nil,nil for v,w in j(r)do if h(v)=='string'then if v==
'Parent'then t=w else s[v]=w end elseif h(v)=='number'then if h(w)~='userdata'
then e(
[[Bad entry in Create body: Numeric keys must be paired with children, got a: ]] [[Bad entry in Create body: Numeric keys must be paired with children, got a: ]]
..h(w),2)end w.Parent=t elseif h(v)=='table'and v.__eventname then if h(w)~= ..h(w),2)end w.Parent=s elseif h(v)=='table'and v.__eventname then if h(w)~=
'function'then e("Bad entry in Create body: Key `[Create.E'"..v.__eventname.. 'function'then e("Bad entry in Create body: Key `[Create.E'"..v.__eventname..
"']` must have a function value, got: "..g(w),2)end t[v.__eventname]:connect(w) "']` must have a function value, got: "..g(w),2)end s[v.__eventname]:connect(w)
elseif v==a.Create then if h(w)~='function'then e( elseif v==a.Create then if h(w)~='function'then e(
[[Bad entry in Create body: Key `[Create]` should be paired with a constructor function, got: ]] [[Bad entry in Create body: Key `[Create]` should be paired with a constructor function, got: ]]
..g(w),2)elseif u then e( ..g(w),2)elseif u then e(
[[Bad entry in Create body: Only one constructor function is allowed]],2)end u=w [[Bad entry in Create body: Only one constructor function is allowed]],2)end u=w
else e('Bad entry ('..g(v)..' => '..g(w)..') in Create body',2)end end if u then else e('Bad entry ('..g(v)..' => '..g(w)..') in Create body',2)end end if u then
u(t)end return t end end a.Create=i({},{__call=function(r,...)return u(s)end if t then s.Parent=t end return s end end a.Create=i({},{__call=function
Create_PrivImpl(...)end})a.Create.E=function(r)return{__eventname=r}end a.Help= (q,...)return Create_PrivImpl(...)end})a.Create.E=function(q)return{__eventname=
function(r)if r=='DecodeJSON'or r==a.DecodeJSON then return q}end a.Help=function(q)if q=='DecodeJSON'or q==a.DecodeJSON then return
[[Function DecodeJSON. Arguments: (string). Side effect: returns a table with all parsed JSON values]] [[Function DecodeJSON. Arguments: (string). Side effect: returns a table with all parsed JSON values]]
end if r=='EncodeJSON'or r==a.EncodeJSON then return end if q=='EncodeJSON'or q==a.EncodeJSON then return
[[Function EncodeJSON. Arguments: (table). Side effect: returns a string composed of argument table in JSON data format]] [[Function EncodeJSON. Arguments: (table). Side effect: returns a string composed of argument table in JSON data format]]
end if r=='MakeWedge'or r==a.MakeWedge then return end if q=='MakeWedge'or q==a.MakeWedge then return
[[Function MakeWedge. Arguments: (x, y, z, [default material]). Description: 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 was. Returns true if made a wedge, false if the cell remains a block ]] [[Function MakeWedge. Arguments: (x, y, z, [default material]). Description: 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 was. Returns true if made a wedge, false if the cell remains a block ]]
end if r=='SelectTerrainRegion'or r==a.SelectTerrainRegion then return end if q=='SelectTerrainRegion'or q==a.SelectTerrainRegion then return
[[Function SelectTerrainRegion. Arguments: (regionToSelect, color, selectEmptyCells, selectionParent). Description: Selects all terrain via a series of selection boxes within the regionToSelect (this should be a region3 value). The selection box color is detemined by the color argument (should be a brickcolor value). SelectionParent is the parent that the selection model gets placed to (optional).SelectEmptyCells is bool, when true will select all cells in the region, otherwise we only select non-empty cells. Returns a function that can update the selection,arguments to said function are a new region3 to select, and the adornment color (color arg is optional). Also returns a second function that takes no arguments and destroys the selection]] [[Function SelectTerrainRegion. Arguments: (regionToSelect, color, selectEmptyCells, selectionParent). Description: Selects all terrain via a series of selection boxes within the regionToSelect (this should be a region3 value). The selection box color is detemined by the color argument (should be a brickcolor value). SelectionParent is the parent that the selection model gets placed to (optional).SelectEmptyCells is bool, when true will select all cells in the region, otherwise we only select non-empty cells. Returns a function that can update the selection,arguments to said function are a new region3 to select, and the adornment color (color arg is optional). Also returns a second function that takes no arguments and destroys the selection]]
end if r=='CreateSignal'or r==a.CreateSignal then return end if q=='CreateSignal'or q==a.CreateSignal then return
[[Function CreateSignal. Arguments: None. Returns: The newly created Signal object. This object is identical to the RBXScriptSignal class used for events in Objects, but is a Lua-side object so it can be used to create custom events inLua code. Methods of the Signal object: :connect, :wait, :fire, :disconnect. For more info you can pass the method name to the Help function, or view the wiki page for this library. EG: Help('Signal:connect').]] [[Function CreateSignal. Arguments: None. Returns: The newly created Signal object. This object is identical to the RBXScriptSignal class used for events in Objects, but is a Lua-side object so it can be used to create custom events inLua code. Methods of the Signal object: :connect, :wait, :fire, :disconnect. For more info you can pass the method name to the Help function, or view the wiki page for this library. EG: Help('Signal:connect').]]
end if r=='Signal:connect'then return end if q=='Signal:connect'then return
[[Method Signal:connect. Arguments: (function handler). Return: A connection object which can be used to disconnect the connection to this handler. Description: Connectes a handler function to this Signal, so that when |fire| is called the handler function will be called with the arguments passed to |fire|.]] [[Method Signal:connect. Arguments: (function handler). Return: A connection object which can be used to disconnect the connection to this handler. Description: Connectes a handler function to this Signal, so that when |fire| is called the handler function will be called with the arguments passed to |fire|.]]
end if r=='Signal:wait'then return end if q=='Signal:wait'then return
[[Method Signal:wait. Arguments: None. Returns: The arguments passed to the next call to |fire|. Description: This call does not return until the next call to |fire| is made, at which point it will return the values which were passed as arguments to that |fire| call.]] [[Method Signal:wait. Arguments: None. Returns: The arguments passed to the next call to |fire|. Description: This call does not return until the next call to |fire| is made, at which point it will return the values which were passed as arguments to that |fire| call.]]
end if r=='Signal:fire'then return end if q=='Signal:fire'then return
[[Method Signal:fire. Arguments: Any number of arguments of any type. Returns: None. Description: This call will invoke any connected handler functions, and notify any waiting code attached to this Signal to continue, with the arguments passed to this function. Note: The calls to handlers are made asynchronously, so this call will return immediately regardless of how long it takes the connected handler functions to complete.]] [[Method Signal:fire. Arguments: Any number of arguments of any type. Returns: None. Description: This call will invoke any connected handler functions, and notify any waiting code attached to this Signal to continue, with the arguments passed to this function. Note: The calls to handlers are made asynchronously, so this call will return immediately regardless of how long it takes the connected handler functions to complete.]]
end if r=='Signal:disconnect'then return end if q=='Signal:disconnect'then return
[[Method Signal:disconnect. Arguments: None. Returns: None. Description: This call disconnects all handlers attacched to this function, note however, it does NOT make waiting code continue, as is the behavior of normal Roblox events. This method can also be called on the connection object which is returned from Signal:connect to only disconnect a single handler, as opposed to this method, which will disconnect all handlers.]] [[Method Signal:disconnect. Arguments: None. Returns: None. Description: This call disconnects all handlers attacched to this function, note however, it does NOT make waiting code continue, as is the behavior of normal Roblox events. This method can also be called on the connection object which is returned from Signal:connect to only disconnect a single handler, as opposed to this method, which will disconnect all handlers.]]
end if r=='Create'then return end if q=='Create'then return
[[Function Create. Arguments: A table containing information about how to construct a collection of objects. Returns: The constructed objects. Descrition: Create is a very powerfull function, whose description is too long to fit here, and is best described via example, please see the wiki page for a description of how to use it.]] [[Function Create. Arguments: A table containing information about how to construct a collection of objects. Returns: The constructed objects. Descrition: Create is a very powerfull function, whose description is too long to fit here, and is best described via example, please see the wiki page for a description of how to use it.]]
end end return a end end return a

View File

@ -50,40 +50,38 @@ q=2*l else q=3*m end end return q end local function getBoundingBox2(c)local d,e
=Vector3.new(math.huge,math.huge,math.huge),Vector3.new(-math.huge,-math.huge,- =Vector3.new(math.huge,math.huge,math.huge),Vector3.new(-math.huge,-math.huge,-
math.huge)if c:IsA'Terrain'then d=Vector3.new(-2,-2,-2)e=Vector3.new(2,2,2) math.huge)if c:IsA'Terrain'then d=Vector3.new(-2,-2,-2)e=Vector3.new(2,2,2)
elseif c:IsA'BasePart'then d=-0.5*c.Size e=-d else e=c:GetModelSize()*0.5 d=-e elseif c:IsA'BasePart'then d=-0.5*c.Size e=-d else e=c:GetModelSize()*0.5 d=-e
end local f=c:FindFirstChild'Justification'if f~=nil then justify=f.Value two= end local f=c:FindFirstChild'Justification'if f~=nil then local g,h,i=f.Value,
Vector3.new(2,2,2)actualBox=e-d-Vector3.new(0.01,0.01,0.01)containingGridBox= Vector3.new(2,2,2),e-d-Vector3.new(0.01,0.01,0.01)local j=Vector3.new(4*math.
Vector3.new(4*math.ceil(actualBox.x/4),4*math.ceil(actualBox.y/4),4*math.ceil( ceil(i.x/4),4*math.ceil(i.y/4),4*math.ceil(i.z/4))local k=j-i d=d-0.5*k*g e=e+
actualBox.z/4))adjustment=containingGridBox-actualBox d=d-0.5*adjustment*justify 0.5*k*(h-g)end return d,e end local function getBoundingBoxInWorldCoordinates(c)
e=e+0.5*adjustment*(two-justify)end return d,e end local function local d,e=Vector3.new(math.huge,math.huge,math.huge),Vector3.new(-math.huge,-
getBoundingBoxInWorldCoordinates(c)local d,e=Vector3.new(math.huge,math.huge, math.huge,-math.huge)if c:IsA'BasePart'and not c:IsA'Terrain'then local f,g=c.
math.huge),Vector3.new(-math.huge,-math.huge,-math.huge)if c:IsA'BasePart'and CFrame:pointToWorldSpace(-0.5*c.Size),c.CFrame:pointToWorldSpace(0.5*c.Size)d=
not c:IsA'Terrain'then vec1=c.CFrame:pointToWorldSpace(-0.5*c.Size)vec2=c.CFrame Vector3.new(math.min(f.X,g.X),math.min(f.Y,g.Y),math.min(f.Z,g.Z))e=Vector3.new(
:pointToWorldSpace(0.5*c.Size)d=Vector3.new(math.min(vec1.X,vec2.X),math.min( math.max(f.X,g.X),math.max(f.Y,g.Y),math.max(f.Z,g.Z))elseif not c:IsA'Terrain'
vec1.Y,vec2.Y),math.min(vec1.Z,vec2.Z))e=Vector3.new(math.max(vec1.X,vec2.X), then local f,g=c:GetModelCFrame():pointToWorldSpace(-0.5*c:GetModelSize()),c:
math.max(vec1.Y,vec2.Y),math.max(vec1.Z,vec2.Z))elseif c:IsA'Terrain'then else GetModelCFrame():pointToWorldSpace(0.5*c:GetModelSize())d=Vector3.new(math.min(f
vec1=c:GetModelCFrame():pointToWorldSpace(-0.5*c:GetModelSize())vec2=c: .X,g.X),math.min(f.Y,g.Y),math.min(f.Z,g.Z))e=Vector3.new(math.max(f.X,g.X),math
GetModelCFrame():pointToWorldSpace(0.5*c:GetModelSize())d=Vector3.new(math.min( .max(f.Y,g.Y),math.max(f.Z,g.Z))end return d,e end local function
vec1.X,vec2.X),math.min(vec1.Y,vec2.Y),math.min(vec1.Z,vec2.Z))e=Vector3.new( getTargetPartBoundingBox(c)if c.Parent:FindFirstChild'RobloxModel'~=nil then
math.max(vec1.X,vec2.X),math.max(vec1.Y,vec2.Y),math.max(vec1.Z,vec2.Z))end return getBoundingBox2(c.Parent)else return getBoundingBox2(c)end end
return d,e end local function getTargetPartBoundingBox(c)if c.Parent: local function getMouseTargetCFrame(c)if c.Parent:FindFirstChild'RobloxModel'~=
FindFirstChild'RobloxModel'~=nil then return getBoundingBox2(c.Parent)else nil then if c.Parent:IsA'Tool'then return c.Parent.Handle.CFrame else return c.
return getBoundingBox2(c)end end local function getMouseTargetCFrame(c)if c. Parent:GetModelCFrame()end else return c.CFrame end end local function isBlocker
Parent:FindFirstChild'RobloxModel'~=nil then if c.Parent:IsA'Tool'then return c. (c)if not c then return false end if not c.Parent then return false end if c:
Parent.Handle.CFrame else return c.Parent:GetModelCFrame()end else return c. FindFirstChild'Humanoid'then return false end if c:FindFirstChild'RobloxStamper'
CFrame end end local function isBlocker(c)if not c then return false end if not or c:FindFirstChild'RobloxModel'then return true end if c:IsA'Part'and not c.
c.Parent then return false end if c:FindFirstChild'Humanoid'then return false CanCollide then return false end if c==game.Lighting then return false end
end if c:FindFirstChild'RobloxStamper'or c:FindFirstChild'RobloxModel'then return isBlocker(c.Parent)end local function spaceAboveCharacter(c,d,e)local f=
return true end if c:IsA'Part'and not c.CanCollide then return false end if c== game.Workspace:FindPartsInRegion3(Region3.new(Vector3.new(c.Position.X,d,c.
game.Lighting then return false end return isBlocker(c.Parent)end local function
spaceAboveCharacter(c,d,e)local f=game.Workspace:FindPartsInRegion3(Region3.new(
Vector3.new(c.Position.X,d,c.Position.Z)-Vector3.new(0.75,2.75,0.75),Vector3.
new(c.Position.X,d,c.Position.Z)+Vector3.new(0.75,1.75,0.75)),c.Parent,100)for g
=1,#f do if f[g].CanCollide and not f[g]:IsDescendantOf(e.CurrentParts)then
return false end end if clusterPartsInRegion(Vector3.new(c.Position.X,d,c.
Position.Z)-Vector3.new(0.75,2.75,0.75),Vector3.new(c.Position.X,d,c.Position.Z) Position.Z)-Vector3.new(0.75,2.75,0.75),Vector3.new(c.Position.X,d,c.Position.Z)
+Vector3.new(0.75,1.75,0.75))then return false end return true end +Vector3.new(0.75,1.75,0.75)),c.Parent,100)for g=1,#f do if f[g].CanCollide and
local function findConfigAtMouseTarget(c,d)if not c then return nil end if not d not f[g]:IsDescendantOf(e.CurrentParts)then return false end end if
then error'findConfigAtMouseTarget: stampData is nil'return nil end if not d[ clusterPartsInRegion(Vector3.new(c.Position.X,d,c.Position.Z)-Vector3.new(0.75,
2.75,0.75),Vector3.new(c.Position.X,d,c.Position.Z)+Vector3.new(0.75,1.75,0.75))
then return false end return true end local function findConfigAtMouseTarget(c,d
)if not c then return nil end if not d then error
'findConfigAtMouseTarget: stampData is nil'return nil end if not d[
'CurrentParts']then return nil end local e,f,g,h,i=4,false,CFrame.new(0,0,0), 'CurrentParts']then return nil end local e,f,g,h,i=4,false,CFrame.new(0,0,0),
getBoundingBox2(d.CurrentParts)local j,k=i-h,nil if d.CurrentParts:IsA'Model'or getBoundingBox2(d.CurrentParts)local j,k=i-h,nil if d.CurrentParts:IsA'Model'or
d.CurrentParts:IsA'Tool'then k=d.CurrentParts:GetModelCFrame()else k=d. d.CurrentParts:IsA'Tool'then k=d.CurrentParts:GetModelCFrame()else k=d.
@ -156,26 +154,26 @@ end if g==2 or g==3 then k=0 end i.CFrame=CFrame.Angles(0,math.pi/2*h+k,j)if g==
3 then local l=Instance.new'SpecialMesh'l.MeshType='FileMesh'l.MeshId= 3 then local l=Instance.new'SpecialMesh'l.MeshType='FileMesh'l.MeshId=
'http://www.roblox.com/asset?id=66832495'l.Scale=Vector3.new(2,2,2)l.Parent=i 'http://www.roblox.com/asset?id=66832495'l.Scale=Vector3.new(2,2,2)l.Parent=i
end local l=Instance.new'Vector3Value'l.Value=Vector3.new(f,g,h)l.Name= end local l=Instance.new'Vector3Value'l.Value=Vector3.new(f,g,h)l.Name=
'ClusterMaterial'l.Parent=i return i end local f,g loading=true if e then g= 'ClusterMaterial'l.Parent=i return i end local f,g,h=nil,nil,true if e then g=
coroutine.create(function()f=game:GetService'InsertService':LoadAssetVersion(c) coroutine.create(function()f=game:GetService'InsertService':LoadAssetVersion(c)h
loading=false end)coroutine.resume(g)else g=coroutine.create(function()f=game: =false end)coroutine.resume(g)else g=coroutine.create(function()f=game:
GetService'InsertService':LoadAsset(c)loading=false end)coroutine.resume(g)end GetService'InsertService':LoadAsset(c)h=false end)coroutine.resume(g)end local i
local h,i,j=0,0,8 while loading and i<j do h=tick()wait(1)i=i+tick()-h end ,j,k=0,0,8 while h and j<k do i=tick()wait(1)j=j+tick()-i end h=false if j>=k
loading=false if i>=j then return nil,'Load Time Fail'end if f==nil then return then return nil,'Load Time Fail'end if f==nil then return nil,'Load Asset Fail'
nil,'Load Asset Fail'end if not f:IsA'Model'then return nil,'Load Type Fail'end end if not f:IsA'Model'then return nil,'Load Type Fail'end local l=f:
local k=f:GetChildren()if#k==0 then return nil,'Empty Model Fail'end GetChildren()if#l==0 then return nil,'Empty Model Fail'end UnlockInstances(f)f=f
UnlockInstances(f)f=f:GetChildren()[1]for l,m in pairs(k)do if m:IsA'Team'then m :GetChildren()[1]for m,n in pairs(l)do if n:IsA'Team'then n.Parent=game:
.Parent=game:GetService'Teams'elseif m:IsA'Sky'then local n=game:GetService GetService'Teams'elseif n:IsA'Sky'then local o=game:GetService'Lighting'for p,q
'Lighting'for o,p in pairs(n:GetChildren())do if p:IsA'Sky'then p:Remove()end in pairs(o:GetChildren())do if q:IsA'Sky'then q:Remove()end end n.Parent=o
end m.Parent=n return end end if f:FindFirstChild'RobloxModel'==nil then local n return end end if f:FindFirstChild'RobloxModel'==nil then local o=Instance.new
=Instance.new'BoolValue'n.Name='RobloxModel'n.Parent=f if f:FindFirstChild 'BoolValue'o.Name='RobloxModel'o.Parent=f if f:FindFirstChild'RobloxStamper'==
'RobloxStamper'==nil then local o=Instance.new'BoolValue'o.Name='RobloxStamper'o nil then local p=Instance.new'BoolValue'p.Name='RobloxStamper'p.Parent=f end end
.Parent=f end end if d then if f.Name=='MegaClusterCube'then if d==6 then local if d then if f.Name=='MegaClusterCube'then if d==6 then local o=Instance.new
n=Instance.new'BoolValue'n.Name='AutoWedge'n.Parent=f else local n=f: 'BoolValue'o.Name='AutoWedge'o.Parent=f else local o=f:FindFirstChild
FindFirstChild'ClusterMaterial'if n then if n:IsA'Vector3Value'then f= 'ClusterMaterial'if o then if o:IsA'Vector3Value'then f=setupFakeTerrainPart(o.
setupFakeTerrainPart(n.Value.X,d,n.Value.Z)else f=setupFakeTerrainPart(n.Value,d Value.X,d,o.Value.Z)else f=setupFakeTerrainPart(o.Value,d,0)end else f=
,0)end else f=setupFakeTerrainPart(1,d,0)end end end end return f end a. setupFakeTerrainPart(1,d,0)end end end end return f end a.SetupStamperDragger=
SetupStamperDragger=function(c,d,e,f,g)if not c then error function(c,d,e,f,g)if not c then error
[[SetupStamperDragger: modelToStamp (first arg) is nil! Should be a stamper model]] [[SetupStamperDragger: modelToStamp (first arg) is nil! Should be a stamper model]]
return nil end if not c:IsA'Model'and not c:IsA'BasePart'then error return nil end if not c:IsA'Model'and not c:IsA'BasePart'then error
[[SetupStamperDragger: modelToStamp (first arg) is neither a Model or Part!]] [[SetupStamperDragger: modelToStamp (first arg) is neither a Model or Part!]]
@ -205,33 +203,32 @@ FindFirstChild'MegaClusterCube'if not A then if not l.CurrentParts.Name==
'MegaClusterCube'then return else A=l.CurrentParts end end q.End=A.CFrame.p 'MegaClusterCube'then return else A=l.CurrentParts end end q.End=A.CFrame.p
local B,C,D=nil,Vector3.new(0,0,0),Vector3.new(0,0,0)if q.Dimensions==1 then B=( local B,C,D=nil,Vector3.new(0,0,0),Vector3.new(0,0,0)if q.Dimensions==1 then B=(
q.End-q.Start)if math.abs(B.X)<math.abs(B.Y)then if math.abs(B.X)<math.abs(B.Z) q.End-q.Start)if math.abs(B.X)<math.abs(B.Y)then if math.abs(B.X)<math.abs(B.Z)
then local E,F if math.abs(B.Y)>math.abs(B.Z)then E,F=truncateToCircleEighth(B.Y then local G,H if math.abs(B.Y)>math.abs(B.Z)then G,H=truncateToCircleEighth(B.Y
,B.Z)else F,E=truncateToCircleEighth(B.Z,B.Y)end B=Vector3.new(0,E,F)else local ,B.Z)else H,G=truncateToCircleEighth(B.Z,B.Y)end B=Vector3.new(0,G,H)else local
E,F=truncateToCircleEighth(B.Y,B.X)B=Vector3.new(F,E,0)end else if math.abs(B.Y) G,H=truncateToCircleEighth(B.Y,B.X)B=Vector3.new(H,G,0)end else if math.abs(B.Y)
<math.abs(B.Z)then local E,F if math.abs(B.X)>math.abs(B.Z)then E,F= <math.abs(B.Z)then local G,H if math.abs(B.X)>math.abs(B.Z)then G,H=
truncateToCircleEighth(B.X,B.Z)else F,E=truncateToCircleEighth(B.Z,B.X)end B= truncateToCircleEighth(B.X,B.Z)else H,G=truncateToCircleEighth(B.Z,B.X)end B=
Vector3.new(E,0,F)else local E,F=truncateToCircleEighth(B.X,B.Y)B=Vector3.new(E, Vector3.new(G,0,H)else local G,H=truncateToCircleEighth(B.X,B.Y)B=Vector3.new(G,
F,0)end end q.InternalLine=B elseif q.Dimensions==2 then B=q.MoreLines[1]C=q.End H,0)end end q.InternalLine=B elseif q.Dimensions==2 then B=q.MoreLines[1]C=q.End
-q.MorePoints[1]C=C-B.unit*B.unit:Dot(C)tempCFrame=CFrame.new(q.Start,q.Start+B) -q.MorePoints[1]C=C-B.unit*B.unit:Dot(C)tempCFrame=CFrame.new(q.Start,q.Start+B)
local E,F=tempCFrame:vectorToWorldSpace(Vector3.new(0,1,0)),tempCFrame: local G,H=tempCFrame:vectorToWorldSpace(Vector3.new(0,1,0)),tempCFrame:
vectorToWorldSpace(Vector3.new(1,0,0))local G,H=F:Dot(C),E:Dot(C)if math.abs(H)> vectorToWorldSpace(Vector3.new(1,0,0))local I,J=H:Dot(C),G:Dot(C)if math.abs(J)>
math.abs(G)then C=C-F*G else C=C-E*H end q.InternalLine=C elseif q.Dimensions==3 math.abs(I)then C=C-H*I else C=C-G*J end q.InternalLine=C elseif q.Dimensions==3
then B=q.MoreLines[1]C=q.MoreLines[2]D=q.End-q.MorePoints[2]D=D-B.unit*B.unit: then B=q.MoreLines[1]C=q.MoreLines[2]D=q.End-q.MorePoints[2]D=D-B.unit*B.unit:
Dot(D)D=D-C.unit*C.unit:Dot(D)q.InternalLine=D end tempCFrame=CFrame.new(q.Start Dot(D)D=D-C.unit*C.unit:Dot(D)q.InternalLine=D end tempCFrame=CFrame.new(q.Start
,q.Start+B)if q.Dimensions==1 then q.AdornPart.Size=Vector3.new(4,4,B.magnitude+ ,q.Start+B)if q.Dimensions==1 then q.AdornPart.Size=Vector3.new(4,4,B.magnitude+
4)q.AdornPart.CFrame=tempCFrame+tempCFrame:vectorToWorldSpace(Vector3.new(2,2,2) 4)q.AdornPart.CFrame=tempCFrame+tempCFrame:vectorToWorldSpace(Vector3.new(2,2,2)
-q.AdornPart.Size/2)else local E=tempCFrame:vectorToObjectSpace(B+C+D)q. -q.AdornPart.Size/2)else local G=tempCFrame:vectorToObjectSpace(B+C+D)q.
AdornPart.Size=Vector3.new(4,4,4)+Vector3.new(math.abs(E.X),math.abs(E.Y),math. AdornPart.Size=Vector3.new(4,4,4)+Vector3.new(math.abs(G.X),math.abs(G.Y),math.
abs(E.Z))q.AdornPart.CFrame=tempCFrame+tempCFrame:vectorToWorldSpace(E/2)end abs(G.Z))q.AdornPart.CFrame=tempCFrame+tempCFrame:vectorToWorldSpace(G/2)end
local E=nil if game.Players['LocalPlayer']then E=game.Players.LocalPlayer: local G=nil if game.Players['LocalPlayer']then G=game.Players.LocalPlayer:
FindFirstChild'PlayerGui'if E and E:IsA'PlayerGui'then if q.Dimensions==1 and B. FindFirstChild'PlayerGui'if G and G:IsA'PlayerGui'then if(q.Dimensions==1 and B.
magnitude>3 then q.Adorn.Parent=E elseif q.Dimensions>1 then q.Adorn.Parent=E magnitude>3)or q.Dimensions>1 then q.Adorn.Parent=G end end end if G==nil then G
end end end if E==nil then E=game:GetService'CoreGui'if q.Dimensions==1 and B. =game:GetService'CoreGui'if(q.Dimensions==1 and B.magnitude>3)or q.Dimensions>1
magnitude>3 then q.Adorn.Parent=E elseif q.Dimensions>1 then q.Adorn.Parent=E then q.Adorn.Parent=G end end end local function DoStamperMouseMove(A)if not A
end end end local function DoStamperMouseMove(A)if not A then error then error'Error: RbxStamper.DoStamperMouseMove: Mouse is nil'return end if not
'Error: RbxStamper.DoStamperMouseMove: Mouse is nil'return end if not A:IsA A:IsA'Mouse'then error('Error: RbxStamper.DoStamperMouseMove: Mouse is of type',
'Mouse'then error('Error: RbxStamper.DoStamperMouseMove: Mouse is of type',A. A.className,'should be of type Mouse')return end if not A.Target then local B=
className,'should be of type Mouse')return end if not A.Target then local B=
GetTerrainForMouse(A)if nil==B then return end end if not l then return end GetTerrainForMouse(A)if nil==B then return end end if not l then return end
configFound,targetCFrame,targetSurface=findConfigAtMouseTarget(A,l)if not configFound,targetCFrame,targetSurface=findConfigAtMouseTarget(A,l)if not
configFound then error'RbxStamper.DoStamperMouseMove No configFound, returning' configFound then error'RbxStamper.DoStamperMouseMove No configFound, returning'
@ -242,30 +239,30 @@ elseif targetSurface==5 then B=3-k+autoAlignToFace(l.CurrentParts)elseif
targetSurface==2 then B=1-k+autoAlignToFace(l.CurrentParts)end end local C=math. targetSurface==2 then B=1-k+autoAlignToFace(l.CurrentParts)end end local C=math.
pi/2 k=k+B if l.CurrentParts:IsA'Model'or l.CurrentParts:IsA'Tool'then pi/2 k=k+B if l.CurrentParts:IsA'Model'or l.CurrentParts:IsA'Tool'then
modelRotate(l.CurrentParts,C*B)else l.CurrentParts.CFrame=CFrame. modelRotate(l.CurrentParts,C*B)else l.CurrentParts.CFrame=CFrame.
fromEulerAnglesXYZ(0,C*B,0)*l.CurrentParts.CFrame end local D,E= fromEulerAnglesXYZ(0,C*B,0)*l.CurrentParts.CFrame end local D,G=
getBoundingBoxInWorldCoordinates(l.CurrentParts)local F=nil if l.CurrentParts: getBoundingBoxInWorldCoordinates(l.CurrentParts)local H=nil if l.CurrentParts:
IsA'Model'then F=l.CurrentParts:GetModelCFrame()else F=l.CurrentParts.CFrame end IsA'Model'then H=l.CurrentParts:GetModelCFrame()else H=l.CurrentParts.CFrame end
D=D+targetCFrame.p-F.p E=E+targetCFrame.p-F.p if clusterPartsInRegion(D+b,E-b) D=D+targetCFrame.p-H.p G=G+targetCFrame.p-H.p if clusterPartsInRegion(D+b,G-b)
then if y.CFrame then if l.CurrentParts:FindFirstChild('ClusterMaterial',true) then if y.CFrame then if l.CurrentParts:FindFirstChild('ClusterMaterial',true)
then local G=l.CurrentParts:FindFirstChild('ClusterMaterial',true)if G:IsA then local I=l.CurrentParts:FindFirstChild('ClusterMaterial',true)if I:IsA
'Vector3Value'then local H=l.CurrentParts:FindFirstChild('ClusterMaterial',true) 'Vector3Value'then local J=l.CurrentParts:FindFirstChild('ClusterMaterial',true)
if H then H=clusterMat end end end end return end if isMegaClusterPart()then if J then J=clusterMat end end end end return end if isMegaClusterPart()then
local G=game.Workspace.Terrain:WorldToCell(targetCFrame.p)local H,I,J,K,L,M,N,O, local I=game.Workspace.Terrain:WorldToCell(targetCFrame.p)local J,K,L,M,N,O,P,Q,
P,Q,R,S,T=game.Workspace.Terrain:CellCenterToWorld(G.X,G.Y,G.Z),targetCFrame: R,S,T,U,V=game.Workspace.Terrain:CellCenterToWorld(I.X,I.Y,I.Z),targetCFrame:
components()targetCFrame=CFrame.new(H.X,H.Y,H.Z,L,M,N,O,P,Q,R,S,T)end components()targetCFrame=CFrame.new(J.X,J.Y,J.Z,N,O,P,Q,R,S,T,U,V)end
positionPartsAtCFrame3(targetCFrame,l.CurrentParts)y.CFrame=targetCFrame if l. positionPartsAtCFrame3(targetCFrame,l.CurrentParts)y.CFrame=targetCFrame if l.
CurrentParts:FindFirstChild('ClusterMaterial',true)then local G=l.CurrentParts: CurrentParts:FindFirstChild('ClusterMaterial',true)then local I=l.CurrentParts:
FindFirstChild('ClusterMaterial',true)if G:IsA'Vector3Value'then y. FindFirstChild('ClusterMaterial',true)if I:IsA'Vector3Value'then y.
TerrainOrientation=G.Value.Z end end if A and A.Target and A.Target.Parent then TerrainOrientation=I.Value.Z end end if A and A.Target and A.Target.Parent then
local G=A.Target:FindFirstChild'RobloxModel'if not G then G=A.Target.Parent: local I=A.Target:FindFirstChild'RobloxModel'if not I then I=A.Target.Parent:
FindFirstChild'RobloxModel'end local H=l.CurrentParts:FindFirstChild FindFirstChild'RobloxModel'end local J=l.CurrentParts:FindFirstChild
'UnstampableFaces'do local I,J='',''if G and G.Parent:FindFirstChild 'UnstampableFaces'do local M,N='',''if I and I.Parent:FindFirstChild
'UnstampableFaces'then I=G.Parent.UnstampableFaces.Value end if H then J=H.Value 'UnstampableFaces'then M=I.Parent.UnstampableFaces.Value end if J then N=J.Value
end local K=0 if G then K=modelTargetSurface(G.Parent,game.Workspace. end local O=0 if I then O=modelTargetSurface(I.Parent,game.Workspace.
CurrentCamera.CoordinateFrame.p,A.Hit.p)end for L in string.gmatch(I,'[^,]+')do CurrentCamera.CoordinateFrame.p,A.Hit.p)end for P in string.gmatch(M,'[^,]+')do
if K==tonumber(L)then u=true game.JointsService:ClearJoinAfterMoveJoints()return if O==tonumber(P)then u=true game.JointsService:ClearJoinAfterMoveJoints()return
end end K=modelTargetSurface(l.CurrentParts,A.Hit.p,game.Workspace.CurrentCamera end end O=modelTargetSurface(l.CurrentParts,A.Hit.p,game.Workspace.CurrentCamera
.CoordinateFrame.p)for M in string.gmatch(J,'[^,]+')do if K==tonumber(M)then u= .CoordinateFrame.p)for Q in string.gmatch(N,'[^,]+')do if O==tonumber(Q)then u=
true game.JointsService:ClearJoinAfterMoveJoints()return end end end end u=false true game.JointsService:ClearJoinAfterMoveJoints()return end end end end u=false
game.JointsService:SetJoinAfterMoveInstance(l.CurrentParts)if not pcall(function game.JointsService:SetJoinAfterMoveInstance(l.CurrentParts)if not pcall(function
()if A and A.Target and A.Target.Parent:FindFirstChild'RobloxModel'==nil then ()if A and A.Target and A.Target.Parent:FindFirstChild'RobloxModel'==nil then
@ -311,175 +308,173 @@ loadSurfaceTypes(A,B)A.TopSurface=B[1]A.BottomSurface=B[2]A.LeftSurface=B[3]A.
RightSurface=B[4]A.FrontSurface=B[5]A.BackSurface=B[6]end local function RightSurface=B[4]A.FrontSurface=B[5]A.BackSurface=B[6]end local function
saveSurfaceTypes(A,B)local C={}C[1]=A.TopSurface C[2]=A.BottomSurface C[3]=A. saveSurfaceTypes(A,B)local C={}C[1]=A.TopSurface C[2]=A.BottomSurface C[3]=A.
LeftSurface C[4]=A.RightSurface C[5]=A.FrontSurface C[6]=A.BackSurface B[A]=C LeftSurface C[4]=A.RightSurface C[5]=A.FrontSurface C[6]=A.BackSurface B[A]=C
end local function makeSurfaceUnjoinable(A,B)end local function prepareModel(A) end local function prepareModel(A)if not A then return nil end local B,C,D,G,H,I
if not A then return nil end local B,C,D,E,F,G=0.7,1,A:Clone(),{},{},{}l={}l. =0.7,1,A:Clone(),{},{},{}l={}l.DisabledScripts={}l.TransparencyTable={}l.
DisabledScripts={}l.TransparencyTable={}l.MaterialTable={}l.CanCollideTable={}l. MaterialTable={}l.CanCollideTable={}l.AnchoredTable={}l.ArchivableTable={}l.
AnchoredTable={}l.ArchivableTable={}l.DecalTransparencyTable={}l. DecalTransparencyTable={}l.SurfaceTypeTable={}collectParts(D,H,G,I)if#H<=0 then
SurfaceTypeTable={}collectParts(D,F,E,G)if#F<=0 then return nil, return nil,'no parts found in modelToStamp'end for J,M in pairs(G)do if not M.
'no parts found in modelToStamp'end for H,I in pairs(E)do if not I.Disabled then Disabled then M.Disabled=true l.DisabledScripts[#l.DisabledScripts+1]=M end end
I.Disabled=true l.DisabledScripts[#l.DisabledScripts+1]=I end end for J,K in for N,O in pairs(H)do l.TransparencyTable[O]=O.Transparency O.Transparency=C+(1-
pairs(F)do l.TransparencyTable[K]=K.Transparency K.Transparency=C+(1-C)*K. C)*O.Transparency l.MaterialTable[O]=O.Material O.Material=Enum.Material.Plastic
Transparency l.MaterialTable[K]=K.Material K.Material=Enum.Material.Plastic l. l.CanCollideTable[O]=O.CanCollide O.CanCollide=false l.AnchoredTable[O]=O.
CanCollideTable[K]=K.CanCollide K.CanCollide=false l.AnchoredTable[K]=K.Anchored Anchored O.Anchored=true l.ArchivableTable[O]=O.Archivable O.Archivable=false
K.Anchored=true l.ArchivableTable[K]=K.Archivable K.Archivable=false saveSurfaceTypes(O,l.SurfaceTypeTable)local Q,R=0.5,0.5 delay(0,function()wait(Q
saveSurfaceTypes(K,l.SurfaceTypeTable)local M,N=0.5,0.5 delay(0,function()wait(M )local S=tick()local T=S while(T-S)<R and O and O:IsA'BasePart'and O.
)local O=tick()local P=O while(P-O)<N and K and K:IsA'BasePart'and K. Transparency>B do local U=1-(((T-S)/R)*(C-B))if l['TransparencyTable']and l.
Transparency>B do local Q=1-(((P-O)/N)*(C-B))if l['TransparencyTable']and l. TransparencyTable[O]then O.Transparency=U+(1-U)*l.TransparencyTable[O]end wait(
TransparencyTable[K]then K.Transparency=Q+(1-Q)*l.TransparencyTable[K]end wait( 0.03)T=tick()end if O and O:IsA'BasePart'then if l['TransparencyTable']and l.
0.03)P=tick()end if K and K:IsA'BasePart'then if l['TransparencyTable']and l. TransparencyTable[O]then O.Transparency=B+(1-B)*l.TransparencyTable[O]end end
TransparencyTable[K]then K.Transparency=B+(1-B)*l.TransparencyTable[K]end end end)end for Q,R in pairs(I)do l.DecalTransparencyTable[R]=R.Transparency R.
end)end for M,N in pairs(G)do l.DecalTransparencyTable[N]=N.Transparency N. Transparency=B+(1-B)*R.Transparency end setSeatEnabledStatus(D,true)
Transparency=B+(1-B)*N.Transparency end setSeatEnabledStatus(D,true)
setSeatEnabledStatus(D,false)l.CurrentParts=D if autoAlignToFace(D)then l. setSeatEnabledStatus(D,false)l.CurrentParts=D if autoAlignToFace(D)then l.
CurrentParts:ResetOrientationToIdentity()k=0 else local O=k*math.pi/2 if l. CurrentParts:ResetOrientationToIdentity()k=0 else local S=k*math.pi/2 if l.
CurrentParts:IsA'Model'or l.CurrentParts:IsA'Tool'then modelRotate(l. CurrentParts:IsA'Model'or l.CurrentParts:IsA'Tool'then modelRotate(l.
CurrentParts,O)else l.CurrentParts.CFrame=CFrame.fromEulerAnglesXYZ(0,O,0)*l. CurrentParts,S)else l.CurrentParts.CFrame=CFrame.fromEulerAnglesXYZ(0,S,0)*l.
CurrentParts.CFrame end end local O=l.CurrentParts:FindFirstChild( CurrentParts.CFrame end end local S=l.CurrentParts:FindFirstChild(
'ClusterMaterial',true)if O and O:IsA'Vector3Value'then O.Value=Vector3.new(O. 'ClusterMaterial',true)if S and S:IsA'Vector3Value'then S.Value=Vector3.new(S.
Value.X,O.Value.Y,(O.Value.Z+k)%4)end local P,Q=findConfigAtMouseTarget(d,l)if P Value.X,S.Value.Y,(S.Value.Z+k)%4)end local T,U=findConfigAtMouseTarget(d,l)if T
then l.CurrentParts=positionPartsAtCFrame3(Q,l.CurrentParts)end game. then l.CurrentParts=positionPartsAtCFrame3(U,l.CurrentParts)end game.
JointsService:SetJoinAfterMoveInstance(l.CurrentParts)return D,F end JointsService:SetJoinAfterMoveInstance(l.CurrentParts)return D,H end
local function checkTerrainBlockCollisions(A,B)local C=game.Workspace.Terrain. local function checkTerrainBlockCollisions(A,B)local C=game.Workspace.Terrain.
CellCenterToWorld local D=C(game.Workspace.Terrain,A.X,A.Y,A.Z)local E,F=game. CellCenterToWorld local D=C(game.Workspace.Terrain,A.X,A.Y,A.Z)local G,H=game.
Workspace:FindPartsInRegion3(Region3.new(D-Vector3.new(2,2,2)+b,D+Vector3.new(2, Workspace:FindPartsInRegion3(Region3.new(D-Vector3.new(2,2,2)+b,D+Vector3.new(2,
2,2)-b),l.CurrentParts,100),false for G=1,#E do if isBlocker(E[G])then F=true 2,2)-b),l.CurrentParts,100),false for I=1,#G do if isBlocker(G[I])then H=true
break end end if not F then local G={}for I=1,#E do if E[I].Parent and not G[E[I break end end if not H then local I={}for M=1,#G do if G[M].Parent and not I[G[M
].Parent]and E[I].Parent:FindFirstChild'Humanoid'and E[I].Parent:FindFirstChild ].Parent]and G[M].Parent:FindFirstChild'Humanoid'and G[M].Parent:FindFirstChild
'Humanoid':IsA'Humanoid'then local K=E[I].Parent:FindFirstChild'Torso'G[E[I]. 'Humanoid':IsA'Humanoid'then local O=G[M].Parent:FindFirstChild'Torso'I[G[M].
Parent]=true if K then local M=D.Y+5 if spaceAboveCharacter(K,M,l)then K.CFrame= Parent]=true if O then local Q=D.Y+5 if spaceAboveCharacter(O,Q,l)then O.CFrame=
K.CFrame+Vector3.new(0,M-K.CFrame.p.Y,0)else F=true break end end end end end if O.CFrame+Vector3.new(0,Q-O.CFrame.p.Y,0)else H=true break end end end end end if
not F then local G=true if B then if i then local I=C(game.Workspace.Terrain,A.X not H then local I=true if B then if i then local M=C(game.Workspace.Terrain,A.X
,A.Y,A.Z)if I.X+2>i.CFrame.p.X+i.Size.X/2 then G=false elseif I.X-2<i.CFrame.p.X ,A.Y,A.Z)if(M.X+2>i.CFrame.p.X+i.Size.X/2)or(M.X-2<i.CFrame.p.X-i.Size.X/2)or(M.
-i.Size.X/2 then G=false elseif I.Y+2>i.CFrame.p.Y+i.Size.Y/2 then G=false Y+2>i.CFrame.p.Y+i.Size.Y/2)or(M.Y-2<i.CFrame.p.Y-i.Size.Y/2)or(M.Z+2>i.CFrame.p
elseif I.Y-2<i.CFrame.p.Y-i.Size.Y/2 then G=false elseif I.Z+2>i.CFrame.p.Z+i. .Z+i.Size.Z/2)or(M.Z-2<i.CFrame.p.Z-i.Size.Z/2)then I=false end end end return I
Size.Z/2 then G=false elseif I.Z-2<i.CFrame.p.Z-i.Size.Z/2 then G=false end end end return false end local function ResolveMegaClusterStamp(A)local B,C,D,G,H,I,
end return G end return false end local function ResolveMegaClusterStamp(A)local M,O,Q=false,game.Workspace.Terrain,q.InternalLine,game.Workspace.Terrain.
B,C,D,E,F,G,I,K,M=false,game.Workspace.Terrain,q.InternalLine,game.Workspace. MaxExtents.Max,game.Workspace.Terrain.MaxExtents.Min,1,0,0,false if l.
Terrain.MaxExtents.Max,game.Workspace.Terrain.MaxExtents.Min,1,0,0,false if l. CurrentParts:FindFirstChild'AutoWedge'then Q=true end if l.CurrentParts:
CurrentParts:FindFirstChild'AutoWedge'then M=true end if l.CurrentParts: FindFirstChild('ClusterMaterial',true)then I=l.CurrentParts:FindFirstChild(
FindFirstChild('ClusterMaterial',true)then G=l.CurrentParts:FindFirstChild( 'ClusterMaterial',true)if I:IsA'Vector3Value'then M=I.Value.Y O=I.Value.Z I=I.
'ClusterMaterial',true)if G:IsA'Vector3Value'then I=G.Value.Y K=G.Value.Z G=G. Value.X elseif I:IsA'IntValue'then I=I.Value end end if q.Adorn.Parent and q.
Value.X elseif G:IsA'IntValue'then G=G.Value end end if q.Adorn.Parent and q. Start and((q.Dimensions>1)or(D and D.magnitude>0))then local R,S,T,U,V,W,X,Y=
Start and((q.Dimensions>1)or(D and D.magnitude>0))then local N,O,P,Q,R,S,T,U,V= game.Workspace.Terrain:WorldToCell(q.Start),{0,0,0},{0,0,0},{0,0,0},{nil,nil,nil
game.Workspace.Terrain:WorldToCell(q.Start),{0,0,0},{0,0,0},{0,0,0},game. },{Vector3.new(0,0,0),Vector3.new(0,0,0),Vector3.new(0,0,0)},{Vector3.new(1,0,0)
Workspace.Terrain,{nil,nil,nil},{Vector3.new(0,0,0),Vector3.new(0,0,0),Vector3. ,Vector3.new(0,1,0),Vector3.new(0,0,1)},{}if q.Dimensions>1 then table.insert(Y,
new(0,0,0)},{Vector3.new(1,0,0),Vector3.new(0,1,0),Vector3.new(0,0,1)},{}if q. q.MoreLines[1])end if D and D.magnitude>0 then table.insert(Y,D)end if q.
Dimensions>1 then table.insert(V,q.MoreLines[1])end if D and D.magnitude>0 then Dimensions>2 then table.insert(Y,q.MoreLines[2])end for Z=1,#Y do Y[Z]=Vector3.
table.insert(V,D)end if q.Dimensions>2 then table.insert(V,q.MoreLines[2])end new(math.floor(Y[Z].X+0.5),math.floor(Y[Z].Y+0.5),math.floor(Y[Z].Z+0.5))if Y[Z]
for W=1,#V do V[W]=Vector3.new(math.floor(V[W].X+0.5),math.floor(V[W].Y+0.5), .X>0 then S[Z]=1 elseif Y[Z].X<0 then S[Z]=-1 end if Y[Z].Y>0 then T[Z]=1 elseif
math.floor(V[W].Z+0.5))if V[W].X>0 then O[W]=1 elseif V[W].X<0 then O[W]=-1 end Y[Z].Y<0 then T[Z]=-1 end if Y[Z].Z>0 then U[Z]=1 elseif Y[Z].Z<0 then U[Z]=-1
if V[W].Y>0 then P[W]=1 elseif V[W].Y<0 then P[W]=-1 end if V[W].Z>0 then Q[W]=1 end V[Z]=Vector3.new(S[Z],T[Z],U[Z])if V[Z].magnitude<0.9 then V[Z]=nil end end
elseif V[W].Z<0 then Q[W]=-1 end S[W]=Vector3.new(O[W],P[W],Q[W])if S[W]. if not Y[2]then Y[2]=Vector3.new(0,0,0)end if not Y[3]then Y[3]=Vector3.new(0,0,
magnitude<0.9 then S[W]=nil end end if not V[2]then V[2]=Vector3.new(0,0,0)end 0)end local Z,_=l.CurrentParts:FindFirstChild('WaterForceTag',true),l.
if not V[3]then V[3]=Vector3.new(0,0,0)end local W,X=l.CurrentParts: CurrentParts:FindFirstChild('WaterForceDirectionTag',true)while W[3].magnitude*4
FindFirstChild('WaterForceTag',true),l.CurrentParts:FindFirstChild( <=Y[3].magnitude do local aa=1 while aa<4 do W[2]=Vector3.new(0,0,0)while W[2].
'WaterForceDirectionTag',true)while T[3].magnitude*4<=V[3].magnitude do local Y= magnitude*4<=Y[2].magnitude do local ab=1 while ab<4 do W[1]=Vector3.new(0,0,0)
1 while Y<4 do T[2]=Vector3.new(0,0,0)while T[2].magnitude*4<=V[2].magnitude do while W[1].magnitude*4<=Y[1].magnitude do local ac=W[1]+W[2]+W[3]local ad=
local Z=1 while Z<4 do T[1]=Vector3.new(0,0,0)while T[1].magnitude*4<=V[1]. Vector3int16.new(R.X+ac.X,R.Y+ac.Y,R.Z+ac.Z)if ad.X>=H.X and ad.Y>=H.Y and ad.Z
magnitude do local _=T[1]+T[2]+T[3]local aa=Vector3int16.new(N.X+_.X,N.Y+_.Y,N.Z >=H.Z and ad.X<G.X and ad.Y<G.Y and ad.Z<G.Z then local ae=
+_.Z)if aa.X>=F.X and aa.Y>=F.Y and aa.Z>=F.Z and aa.X<E.X and aa.Y<E.Y and aa.Z checkTerrainBlockCollisions(ad,A)if ae then if Z then C:SetWaterCell(ad.X,ad.Y,
<E.Z then local ab=checkTerrainBlockCollisions(aa,A)if ab then if W then R: ad.Z,Enum.WaterForce[Z.Value],Enum.WaterDirection[_.Value])else C:SetCell(ad.X,
SetWaterCell(aa.X,aa.Y,aa.Z,Enum.WaterForce[W.Value],Enum.WaterDirection[X.Value ad.Y,ad.Z,I,M,O)end B=true if Q then game.Workspace.Terrain:AutowedgeCells(
])else R:SetCell(aa.X,aa.Y,aa.Z,G,I,K)end B=true if M then game.Workspace. Region3int16.new(Vector3int16.new(ad.x-1,ad.y-1,ad.z-1),Vector3int16.new(ad.x+1,
Terrain:AutowedgeCells(Region3int16.new(Vector3int16.new(aa.x-1,aa.y-1,aa.z-1), ad.y+1,ad.z+1)))end end end W[1]=W[1]+V[1]end if V[2]then while ab<4 and X[ab]:
Vector3int16.new(aa.x+1,aa.y+1,aa.z+1)))end end end T[1]=T[1]+S[1]end if S[2] Dot(V[2])==0 do ab=ab+1 end if ab<4 then W[2]=W[2]+X[ab]*X[ab]:Dot(V[2])end ab=
then while Z<4 and U[Z]:Dot(S[2])==0 do Z=Z+1 end if Z<4 then T[2]=T[2]+U[Z]*U[Z ab+1 else W[2]=Vector3.new(1,0,0)ab=4 end if W[2].magnitude*4>Y[2].magnitude
]:Dot(S[2])end Z=Z+1 else T[2]=Vector3.new(1,0,0)Z=4 end if T[2].magnitude*4>V[2 then ab=4 end end end if V[3]then while aa<4 and X[aa]:Dot(V[3])==0 do aa=aa+1
].magnitude then Z=4 end end end if S[3]then while Y<4 and U[Y]:Dot(S[3])==0 do end if aa<4 then W[3]=W[3]+X[aa]*X[aa]:Dot(V[3])end aa=aa+1 else W[3]=Vector3.
Y=Y+1 end if Y<4 then T[3]=T[3]+U[Y]*U[Y]:Dot(S[3])end Y=Y+1 else T[3]=Vector3. new(1,0,0)aa=4 end if W[3].magnitude*4>Y[3].magnitude then aa=4 end end end end
new(1,0,0)Y=4 end if T[3].magnitude*4>V[3].magnitude then Y=4 end end end end q. q.Start=nil q.Adorn.Parent=nil if B then l.CurrentParts.Parent=nil pcall(
Start=nil q.Adorn.Parent=nil if B then l.CurrentParts.Parent=nil pcall(function( function()game:GetService'ChangeHistoryService':SetWaypoint'StamperMulti'end)end
)game:GetService'ChangeHistoryService':SetWaypoint'StamperMulti'end)end return B return B end local function DoStamperMouseUp(aa)if not aa then error
end local function DoStamperMouseUp(aa)if not aa then error
'Error: RbxStamper.DoStamperMouseUp: Mouse is nil'return false end if not aa:IsA 'Error: RbxStamper.DoStamperMouseUp: Mouse is nil'return false end if not aa:IsA
'Mouse'then error('Error: RbxStamper.DoStamperMouseUp: Mouse is of type',aa. 'Mouse'then error('Error: RbxStamper.DoStamperMouseUp: Mouse is of type',aa.
className,'should be of type Mouse')return false end if not l.Dragger then error className,'should be of type Mouse')return false end if not l.Dragger then error
[[Error: RbxStamper.DoStamperMouseUp: stampData.Dragger is nil]]return false end [[Error: RbxStamper.DoStamperMouseUp: stampData.Dragger is nil]]return false end
if not q then return false end local ab=nil if h then local A,B=nil, if not q then return false end local ab=nil if h then local ac,ad=nil,
isMegaClusterPart()if B and q and q.Start and q.InternalLine and q.InternalLine. isMegaClusterPart()if ad and q and q.Start and q.InternalLine and q.InternalLine
magnitude>0 then A=true ab=true else A,ab=a.CanEditRegion(l.CurrentParts,i)end .magnitude>0 then ac=true ab=true else ac,ab=a.CanEditRegion(l.CurrentParts,i)
if not A then if j then j()end return false end end if u then flashRedBox() end if not ac then if j then j()end return false end end if u then flashRedBox()
return false end canStamp,ab=a.CanEditRegion(l.CurrentParts,i)if not canStamp return false end canStamp,ab=a.CanEditRegion(l.CurrentParts,i)if not canStamp
then if j then j()end return false end local A,B= then if j then j()end return false end local ac,ad=
getBoundingBoxInWorldCoordinates(l.CurrentParts)configFound,targetCFrame= getBoundingBoxInWorldCoordinates(l.CurrentParts)configFound,targetCFrame=
findConfigAtMouseTarget(aa,l)if configFound and not q.Adorn.Parent then if findConfigAtMouseTarget(aa,l)if configFound and not q.Adorn.Parent then if
clusterPartsInRegion(A+b,B-b)then flashRedBox()return false end local C=game. clusterPartsInRegion(ac+b,ad-b)then flashRedBox()return false end local ae=game.
Workspace:FindPartsInRegion3(Region3.new(A+b,B-b),l.CurrentParts,100)for D=1,#C Workspace:FindPartsInRegion3(Region3.new(ac+b,ad-b),l.CurrentParts,100)for A=1,#
do if isBlocker(C[D])then flashRedBox()return false end end local D={}for E=1,#C ae do if isBlocker(ae[A])then flashRedBox()return false end end local A={}for B=
do if C[E].Parent and not D[C[E].Parent]and C[E].Parent:FindFirstChild'Humanoid' 1,#ae do if ae[B].Parent and not A[ae[B].Parent]and ae[B].Parent:FindFirstChild
and C[E].Parent:FindFirstChild'Humanoid':IsA'Humanoid'then local F=C[E].Parent: 'Humanoid'and ae[B].Parent:FindFirstChild'Humanoid':IsA'Humanoid'then local C=ae
FindFirstChild'Torso'D[C[E].Parent]=true if F then local G=B.Y+3 if [B].Parent:FindFirstChild'Torso'A[ae[B].Parent]=true if C then local D=ad.Y+3 if
spaceAboveCharacter(F,G,l)then F.CFrame=F.CFrame+Vector3.new(0,G-F.CFrame.p.Y,0) spaceAboveCharacter(C,D,l)then C.CFrame=C.CFrame+Vector3.new(0,D-C.CFrame.p.Y,0)
else flashRedBox()return false end end end end elseif(not configFound)and not(q. else flashRedBox()return false end end end end elseif(not configFound)and not(q.
Start and q.Adorn.Parent)then resetHighScalabilityLine()return false end if game Start and q.Adorn.Parent)then resetHighScalabilityLine()return false end if game
:FindFirstChild'Players'then if game.Players['LocalPlayer']then if game.Players. :FindFirstChild'Players'then if game.Players['LocalPlayer']then if game.Players.
LocalPlayer['Character']then local C=game.Players.LocalPlayer.Character local D= LocalPlayer['Character']then local ae=game.Players.LocalPlayer.Character local A
C:FindFirstChild'StampTracker'if D and not D.Value then D.Value=true end end end =ae:FindFirstChild'StampTracker'if A and not A.Value then A.Value=true end end
end if q.Start and q.Adorn.Parent and isMegaClusterPart()then if end end if q.Start and q.Adorn.Parent and isMegaClusterPart()then if
ResolveMegaClusterStamp(ab)or ab then l.CurrentParts.Parent=nil return true end ResolveMegaClusterStamp(ab)or ab then l.CurrentParts.Parent=nil return true end
end q.Start=nil q.Adorn.Parent=nil local C=game.Workspace.Terrain if end q.Start=nil q.Adorn.Parent=nil local ae=game.Workspace.Terrain if
isMegaClusterPart()then local D if l.CurrentParts:IsA'Model'then D=C: isMegaClusterPart()then local A if l.CurrentParts:IsA'Model'then A=ae:
WorldToCell(l.CurrentParts:GetModelCFrame().p)else D=C:WorldToCell(l. WorldToCell(l.CurrentParts:GetModelCFrame().p)else A=ae:WorldToCell(l.
CurrentParts.CFrame.p)end local E,F=game.Workspace.Terrain.MaxExtents.Max,game. CurrentParts.CFrame.p)end local B,C=game.Workspace.Terrain.MaxExtents.Max,game.
Workspace.Terrain.MaxExtents.Min if checkTerrainBlockCollisions(D,false)then Workspace.Terrain.MaxExtents.Min if checkTerrainBlockCollisions(A,false)then
local G,I,K=l.CurrentParts:FindFirstChild('ClusterMaterial',true),l.CurrentParts local D,G,H=l.CurrentParts:FindFirstChild('ClusterMaterial',true),l.CurrentParts
:FindFirstChild('WaterForceTag',true),l.CurrentParts:FindFirstChild( :FindFirstChild('WaterForceTag',true),l.CurrentParts:FindFirstChild(
'WaterForceDirectionTag',true)if D.X>=F.X and D.Y>=F.Y and D.Z>=F.Z and D.X<E.X 'WaterForceDirectionTag',true)if A.X>=C.X and A.Y>=C.Y and A.Z>=C.Z and A.X<B.X
and D.Y<E.Y and D.Z<E.Z then if I then C:SetWaterCell(D.X,D.Y,D.Z,Enum. and A.Y<B.Y and A.Z<B.Z then if G then ae:SetWaterCell(A.X,A.Y,A.Z,Enum.
WaterForce[I.Value],Enum.WaterDirection[K.Value])elseif not G then C:SetCell(D.X WaterForce[G.Value],Enum.WaterDirection[H.Value])elseif not D then ae:SetCell(A.
,D.Y,D.Z,z.Material,z.clusterType,k%4)elseif G:IsA'Vector3Value'then C:SetCell(D X,A.Y,A.Z,z.Material,z.clusterType,k%4)elseif D:IsA'Vector3Value'then ae:
.X,D.Y,D.Z,G.Value.X,G.Value.Y,G.Value.Z)else C:SetCell(D.X,D.Y,D.Z,G.Value,0,0) SetCell(A.X,A.Y,A.Z,D.Value.X,D.Value.Y,D.Value.Z)else ae:SetCell(A.X,A.Y,A.Z,D.
end local M=false if l.CurrentParts:FindFirstChild'AutoWedge'then M=true end if Value,0,0)end local I=false if l.CurrentParts:FindFirstChild'AutoWedge'then I=
M then game.Workspace.Terrain:AutowedgeCells(Region3int16.new(Vector3int16.new(D true end if I then game.Workspace.Terrain:AutowedgeCells(Region3int16.new(
.x-1,D.y-1,D.z-1),Vector3int16.new(D.x+1,D.y+1,D.z+1)))end l.CurrentParts.Parent Vector3int16.new(A.x-1,A.y-1,A.z-1),Vector3int16.new(A.x+1,A.y+1,A.z+1)))end l.
=nil pcall(function()game:GetService'ChangeHistoryService':SetWaypoint CurrentParts.Parent=nil pcall(function()game:GetService'ChangeHistoryService':
'StamperSingle'end)return true end else flashRedBox()return false end end SetWaypoint'StamperSingle'end)return true end else flashRedBox()return false end
local function getPlayer()if game:FindFirstChild'Players'then if game.Players[ end local function getPlayer()if game:FindFirstChild'Players'then if game.
'LocalPlayer']then return game.Players.LocalPlayer end end return nil end if l. Players['LocalPlayer']then return game.Players.LocalPlayer end end return nil
CurrentParts:IsA'Model'or l.CurrentParts:IsA'Tool'then if l.CurrentParts:IsA end if l.CurrentParts:IsA'Model'or l.CurrentParts:IsA'Tool'then if l.
'Model'then local D,E={},{}saveTheWelds(l.CurrentParts,D,E)l.CurrentParts: CurrentParts:IsA'Model'then local A,B={},{}saveTheWelds(l.CurrentParts,A,B)l.
BreakJoints()l.CurrentParts:MakeJoints()restoreTheWelds(D,E)end playerIdTag=l. CurrentParts:BreakJoints()l.CurrentParts:MakeJoints()restoreTheWelds(A,B)end
CurrentParts:FindFirstChild'PlayerIdTag'playerNameTag=l.CurrentParts: playerIdTag=l.CurrentParts:FindFirstChild'PlayerIdTag'playerNameTag=l.
FindFirstChild'PlayerNameTag'if playerIdTag~=nil then tempPlayerValue=getPlayer( CurrentParts:FindFirstChild'PlayerNameTag'if playerIdTag~=nil then
)if tempPlayerValue~=nil then playerIdTag.Value=tempPlayerValue.userId end end tempPlayerValue=getPlayer()if tempPlayerValue~=nil then playerIdTag.Value=
if playerNameTag~=nil then if game:FindFirstChild'Players'and game.Players[ tempPlayerValue.userId end end if playerNameTag~=nil then if game:FindFirstChild
'LocalPlayer']then tempPlayerValue=game.Players.LocalPlayer if tempPlayerValue~= 'Players'and game.Players['LocalPlayer']then tempPlayerValue=game.Players.
nil then playerNameTag.Value=tempPlayerValue.Name end end end if l.CurrentParts: LocalPlayer if tempPlayerValue~=nil then playerNameTag.Value=tempPlayerValue.
FindFirstChild'RobloxModel'==nil then local D=Instance.new'BoolValue'D.Name= Name end end end if l.CurrentParts:FindFirstChild'RobloxModel'==nil then local A
'RobloxModel'D.Parent=l.CurrentParts if l.CurrentParts:FindFirstChild =Instance.new'BoolValue'A.Name='RobloxModel'A.Parent=l.CurrentParts if l.
'RobloxStamper'==nil then local E=Instance.new'BoolValue'E.Name='RobloxStamper'E CurrentParts:FindFirstChild'RobloxStamper'==nil then local B=Instance.new
.Parent=l.CurrentParts end end else l.CurrentParts:BreakJoints()if l. 'BoolValue'B.Name='RobloxStamper'B.Parent=l.CurrentParts end end else l.
CurrentParts:FindFirstChild'RobloxStamper'==nil then local D=Instance.new CurrentParts:BreakJoints()if l.CurrentParts:FindFirstChild'RobloxStamper'==nil
'BoolValue'D.Name='RobloxStamper'D.Parent=l.CurrentParts end end if not then local A=Instance.new'BoolValue'A.Name='RobloxStamper'A.Parent=l.
createJoints then game.JointsService:CreateJoinAfterMoveJoints()end for D,E in CurrentParts end end if not createJoints then game.JointsService:
pairs(l.TransparencyTable)do D.Transparency=E end for F,G in pairs(l. CreateJoinAfterMoveJoints()end for A,B in pairs(l.TransparencyTable)do A.
ArchivableTable)do F.Archivable=G end for I,K in pairs(l.MaterialTable)do I. Transparency=B end for C,D in pairs(l.ArchivableTable)do C.Archivable=D end for
Material=K end for M,N in pairs(l.CanCollideTable)do M.CanCollide=N end for O,P G,H in pairs(l.MaterialTable)do G.Material=H end for I,M in pairs(l.
in pairs(l.AnchoredTable)do O.Anchored=P end for Q,R in pairs(l. CanCollideTable)do I.CanCollide=M end for O,Q in pairs(l.AnchoredTable)do O.
DecalTransparencyTable)do Q.Transparency=R end for S,T in pairs(l. Anchored=Q end for R,S in pairs(l.DecalTransparencyTable)do R.Transparency=S end
SurfaceTypeTable)do loadSurfaceTypes(S,T)end if isMegaClusterPart()then l. for T,U in pairs(l.SurfaceTypeTable)do loadSurfaceTypes(T,U)end if
CurrentParts.Transparency=0 end setSeatEnabledStatus(l.CurrentParts,true)l. isMegaClusterPart()then l.CurrentParts.Transparency=0 end setSeatEnabledStatus(l
TransparencyTable=nil l.ArchivableTable=nil l.MaterialTable=nil l. .CurrentParts,true)l.TransparencyTable=nil l.ArchivableTable=nil l.MaterialTable
CanCollideTable=nil l.AnchoredTable=nil l.SurfaceTypeTable=nil if l.CurrentParts =nil l.CanCollideTable=nil l.AnchoredTable=nil l.SurfaceTypeTable=nil if l.
:FindFirstChild'RobloxModel'==nil then local U=Instance.new'BoolValue'U.Name= CurrentParts:FindFirstChild'RobloxModel'==nil then local V=Instance.new
'RobloxModel'U.Parent=l.CurrentParts end if ghostRemovalScript then 'BoolValue'V.Name='RobloxModel'V.Parent=l.CurrentParts end if ghostRemovalScript
ghostRemovalScript.Parent=nil end for U,V in pairs(l.DisabledScripts)do V. then ghostRemovalScript.Parent=nil end for V,W in pairs(l.DisabledScripts)do W.
Disabled=false end for W,X in pairs(l.DisabledScripts)do local Y=X.Parent X. Disabled=false end for X,Y in pairs(l.DisabledScripts)do local Z=Y.Parent Y.
Parent=nil X:Clone().Parent=Y end l.DisabledScripts=nil l.Dragger=nil l. Parent=nil Y:Clone().Parent=Z end l.DisabledScripts=nil l.Dragger=nil l.
CurrentParts=nil pcall(function()game:GetService'ChangeHistoryService': CurrentParts=nil pcall(function()game:GetService'ChangeHistoryService':
SetWaypoint'StampedObject'end)return true end local function pauseStamper()for SetWaypoint'StampedObject'end)return true end local function pauseStamper()for
aa=1,#v do v[aa]:disconnect()v[aa]=nil end v={}if l and l.CurrentParts then l. aa=1,#v do v[aa]:disconnect()v[aa]=nil end v={}if l and l.CurrentParts then l.
CurrentParts.Parent=nil l.CurrentParts:Remove()end resetHighScalabilityLine() CurrentParts.Parent=nil l.CurrentParts:Remove()end resetHighScalabilityLine()
game.JointsService:ClearJoinAfterMoveJoints()end local function game.JointsService:ClearJoinAfterMoveJoints()end local function
prepareUnjoinableSurfaces(aa,ab,A)local B,C={Vector3.new(1,0,0),Vector3.new(0,1, prepareUnjoinableSurfaces(aa,ab,ac)local ad,ae={Vector3.new(1,0,0),Vector3.new(0
0),Vector3.new(0,0,1)},1 if A<0 then C=C*-1 A=A*-1 end local G=C*aa: ,1,0),Vector3.new(0,0,1)},1 if ac<0 then ae=ae*-1 ac=ac*-1 end local D=ae*aa:
vectorToWorldSpace(B[A])for K=1,#ab do local N=ab[K]local P=N.CFrame: vectorToWorldSpace(ad[ac])for H=1,#ab do local M=ab[H]local Q=M.CFrame:
vectorToObjectSpace(G)if math.abs(P.X)>math.abs(P.Y)then if math.abs(P.X)>math. vectorToObjectSpace(D)if math.abs(Q.X)>math.abs(Q.Y)then if math.abs(Q.X)>math.
abs(P.Z)then if P.X>0 then N.RightSurface='Unjoinable'else N.LeftSurface= abs(Q.Z)then if Q.X>0 then M.RightSurface='Unjoinable'else M.LeftSurface=
'Unjoinable'end else if P.Z>0 then N.BackSurface='Unjoinable'else N.FrontSurface 'Unjoinable'end else if Q.Z>0 then M.BackSurface='Unjoinable'else M.FrontSurface
='Unjoinable'end end else if math.abs(P.Y)>math.abs(P.Z)then if P.Y>0 then N. ='Unjoinable'end end else if math.abs(Q.Y)>math.abs(Q.Z)then if Q.Y>0 then M.
TopSurface='Unjoinable'else N.BottomSurface='Unjoinable'end else if P.Z>0 then N TopSurface='Unjoinable'else M.BottomSurface='Unjoinable'end else if Q.Z>0 then M
.BackSurface='Unjoinable'else N.FrontSurface='Unjoinable'end end end end end .BackSurface='Unjoinable'else M.FrontSurface='Unjoinable'end end end end end
local function resumeStamper()clone,parts=prepareModel(c)if not clone or not local function resumeStamper()clone,parts=prepareModel(c)if not clone or not
parts then return end local aa=clone:FindFirstChild('UnjoinableFaces',true)if aa parts then return end local aa=clone:FindFirstChild('UnjoinableFaces',true)if aa
then for ab in string.gmatch(aa.Value,'[^,]*')do if tonumber(ab)then if clone: then for ab in string.gmatch(aa.Value,'[^,]*')do if tonumber(ab)then if clone:
@ -493,13 +488,13 @@ clusterOrientation=clusterMaterial.Value.Z elseif clusterMaterial:IsA'IntValue'
then z.Material=clusterMaterial.Value end end pcall(function()m=d.Target end)if then z.Material=clusterMaterial.Value end end pcall(function()m=d.Target end)if
m and m.Parent:FindFirstChild'RobloxModel'==nil then game.JointsService: m and m.Parent:FindFirstChild'RobloxModel'==nil then game.JointsService:
SetJoinAfterMoveTarget(m)else game.JointsService:SetJoinAfterMoveTarget(nil)end SetJoinAfterMoveTarget(m)else game.JointsService:SetJoinAfterMoveTarget(nil)end
game.JointsService:ShowPermissibleJoints()for ab,A in pairs(l.DisabledScripts)do game.JointsService:ShowPermissibleJoints()for ab,ac in pairs(l.DisabledScripts)
if A.Name=='GhostRemovalScript'then A.Parent=l.CurrentParts end end l.Dragger= do if ac.Name=='GhostRemovalScript'then ac.Parent=l.CurrentParts end end l.
Instance.new'Dragger'l.Dragger:MouseDown(parts[1],Vector3.new(0,0,0),parts)l. Dragger=Instance.new'Dragger'l.Dragger:MouseDown(parts[1],Vector3.new(0,0,0),
Dragger:MouseUp()DoStamperMouseMove(d)table.insert(v,d.Move:connect(function()if parts)l.Dragger:MouseUp()DoStamperMouseMove(d)table.insert(v,d.Move:connect(
s or t then return end s=true DoStamperMouseMove(d)s=false end))table.insert(v,d function()if s or t then return end s=true DoStamperMouseMove(d)s=false end))
.Button1Down:connect(function()DoStamperMouseDown(d)end))table.insert(v,d. table.insert(v,d.Button1Down:connect(function()DoStamperMouseDown(d)end))table.
Button1Up:connect(function()t=true while s do wait()end x.Value= insert(v,d.Button1Up:connect(function()t=true while s do wait()end x.Value=
DoStamperMouseUp(d)resetHighScalabilityLine()t=false end))x.Value=false end DoStamperMouseUp(d)resetHighScalabilityLine()t=false end))x.Value=false end
local function resetStamperState(aa)if aa then if not aa:IsA'Model'and not aa: local function resetStamperState(aa)if aa then if not aa:IsA'Model'and not aa:
IsA'BasePart'then error IsA'BasePart'then error

View File

@ -100,20 +100,17 @@ return end for R,S in pairs(f)do if g[S]then if aa:FindFirstChild'GearReference'
and g[S]:FindFirstChild'GearReference'then if g[S].GearReference.Value==aa. and g[S]:FindFirstChild'GearReference'then if g[S].GearReference.Value==aa.
GearReference.Value then g[S].Active=Q break end end end end end function GearReference.Value then g[S].Active=Q break end end end end end function
clearPreview()p.GearImage.Image=''p.GearStats.GearName.Text=''end function clearPreview()p.GearImage.Image=''p.GearStats.GearName.Text=''end function
removeAllEquippedGear(aa)local Q=a.Character:GetChildren()for R=1,#Q do if(Q[R]: unequipGear(aa)aa.Parent=o updateGridActive()end function highlight(aa)aa.
IsA'Tool'or Q[R]:IsA'HopperBin')and Q[R]~=aa then Q[R].Parent=o end end end TextColor3=Color3.new(0,0,0)aa.BackgroundColor3=Color3.new(0.8,0.8,0.8)end
function equipGear(aa)removeAllEquippedGear(aa)aa.Parent=a.Character function clearHighlight(aa)aa.TextColor3=Color3.new(1,1,1)aa.BackgroundColor3=
updateGridActive()end function unequipGear(aa)aa.Parent=o updateGridActive()end Color3.new(0,0,0)end function swapGearSlot(aa,Q)if not u.Value then u.Slot.Value
function highlight(aa)aa.TextColor3=Color3.new(0,0,0)aa.BackgroundColor3=Color3. =aa u.GearButton.Value=Q u.Value=true updateGridActive()end end local aa=
new(0.8,0.8,0.8)end function clearHighlight(aa)aa.TextColor3=Color3.new(1,1,1)aa function(aa,Q)if type(aa.Action)~='number'then return end local R=aa.Action if R
.BackgroundColor3=Color3.new(0,0,0)end function swapGearSlot(aa,Q)if not u.Value ==1 then unequipGear(Q.Parent.GearReference.Value)local S=Q.Parent local T,U,W=S
then u.Slot.Value=aa u.GearButton.Value=Q u.Value=true updateGridActive()end end .GearReference.Value,r:GetChildren(),-1 for X=1,#U do if U[X]:IsA'Frame'then
local aa=function(aa,Q)if type(aa.Action)~='number'then return end local R=aa. local Y=U[X]:GetChildren()if Y[1]and Y[1].GearReference.Value==T then W=Y[1].
Action if R==1 then unequipGear(Q.Parent.GearReference.Value)local S=Q.Parent SlotNumber.Text break end end end swapGearSlot(W,nil)end end function
local T,U,W=S.GearReference.Value,r:GetChildren(),-1 for X=1,#U do if U[X]:IsA setupCharacterConnections()if n then n:disconnect()end n=game.Players.
'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. 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 Players.LocalPlayer.Backpack:GetChildren()for R=1,#Q do addToGrid(Q[R])end if l
then l:disconnect()end l=game.Players.LocalPlayer.Character.ChildAdded:connect( then l:disconnect()end l=game.Players.LocalPlayer.Character.ChildAdded:connect(
@ -128,15 +125,14 @@ 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 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 string.gmatch(Q,'[^%s]+')do if string.len(S)>0 then table.insert(R,S)end end
return R end function showSearchGear(Q)if not e.Gear.Visible then return end return R end function showSearchGear(Q)if not e.Gear.Visible then return end
local R=splitByWhitespace(Q)if R and(#R>0)then currSearchTerms=R else local R,S=splitByWhitespace(Q),nil if R and(#R>0)then S=R else S=nil end if R==
currSearchTerms=nil end if R==nil then showEntireGrid()return end local S= nil then showEntireGrid()return end local T=filterGear(S)showPartialGrid(T)end
filterGear(currSearchTerms)showPartialGrid(S)end function nukeBackpack()while#g> function nukeBackpack()while#g>0 do table.remove(g)end g={}while#f>0 do table.
0 do table.remove(g)end g={}while#f>0 do table.remove(f)end f={}local Q=s. remove(f)end f={}local Q=s.ScrollingFrame:GetChildren()for R=1,#Q do Q[R]:
ScrollingFrame:GetChildren()for R=1,#Q do Q[R]:remove()end end function remove()end end function getGearContextMenu()local Q=Instance.new'Frame'Q.Active
getGearContextMenu()local Q=Instance.new'Frame'Q.Active=true Q.Name= =true Q.Name='UnequipContextMenu'Q.Size=UDim2.new(0,115,0,70)Q.Position=UDim2.
'UnequipContextMenu'Q.Size=UDim2.new(0,115,0,70)Q.Position=UDim2.new(0,-16,0,-16 new(0,-16,0,-16)Q.BackgroundTransparency=1 Q.Visible=false local R=Instance.new
)Q.BackgroundTransparency=1 Q.Visible=false local R=Instance.new'TextButton'R. 'TextButton'R.Name='UnequipContextMenuButton'R.Text=''R.Style=Enum.ButtonStyle.
Name='UnequipContextMenuButton'R.Text=''R.Style=Enum.ButtonStyle.
RobloxButtonDefault R.ZIndex=8 R.Size=UDim2.new(1,0,1,-20)R.Visible=true R. 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 W=1,#U do local X={}X.Type= 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 'Button'X.Text=U[W]X.Action=W X.DoIt=aa table.insert(T,X)end for W,X in ipairs(T

View File

@ -72,13 +72,12 @@ 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 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 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 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() =true D:Fire(F)end function resetSearch()resetSearchBoxGui()D:Fire()end local F=
resetSearchBoxGui()D:Fire()end local F=function()p=true end function function()p=true end function coreGuiChanged(G,H)if G==Enum.CoreGuiType.Backpack
coreGuiChanged(G,H)if G==Enum.CoreGuiType.Backpack or G==Enum.CoreGuiType.All or G==Enum.CoreGuiType.All then r=H s=not H if s then pcall(function()game:
then r=H s=not H if s then pcall(function()game:GetService'GuiService': GetService'GuiService':RemoveKey(w)game:GetService'GuiService':RemoveKey(x)end)
RemoveKey(w)game:GetService'GuiService':RemoveKey(x)end)else game:GetService else game:GetService'GuiService':AddKey(w)game:GetService'GuiService':AddKey(x)
'GuiService':AddKey(w)game:GetService'GuiService':AddKey(x)end resetSearch()h. end resetSearch()h.Visible=H and q m.Visible=H a.Visible=H f.Visible=H end end
Visible=H and q m.Visible=H a.Visible=H f.Visible=H end end
createPublicFunction('CloseBackpack',E)createPublicFunction('BackpackReady',F) createPublicFunction('CloseBackpack',E)createPublicFunction('BackpackReady',F)
pcall(function()coreGuiChanged(Enum.CoreGuiType.Backpack,Game.StarterGui: pcall(function()coreGuiChanged(Enum.CoreGuiType.Backpack,Game.StarterGui:
GetCoreGuiEnabled(Enum.CoreGuiType.Backpack))Game.StarterGui. GetCoreGuiEnabled(Enum.CoreGuiType.Backpack))Game.StarterGui.

View File

@ -265,26 +265,26 @@ 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 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. 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: 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[ CreateSafeChatOptions(l,m)local n,o={},0 n[m]={}n[m][1]=l[1]m=m or self.
1]m=m or self.SafeChatButton for p,q in pairs(l)do if type(p)=='string'then SafeChatButton for p,q in pairs(l)do if type(p)=='string'then local r=d.Create
local r=d.Create'TextButton'{Name=p,Text=p,Size=UDim2.new(0,100,0,20), 'TextButton'{Name=p,Text=p,Size=UDim2.new(0,100,0,20),TextXAlignment=Enum.
TextXAlignment=Enum.TextXAlignment.Center,TextColor3=Color3.new(0.2,0.1,0.1), TextXAlignment.Center,TextColor3=Color3.new(0.2,0.1,0.1),BackgroundTransparency=
BackgroundTransparency=0.5,BackgroundColor3=Color3.new(1,1,1),Parent=self. 0.5,BackgroundColor3=Color3.new(1,1,1),Parent=self.SafeChatFrame,Visible=false,
SafeChatFrame,Visible=false,Position=UDim2.new(0,m.Position.X.Scale+105,0,m. Position=UDim2.new(0,m.Position.X.Scale+105,0,m.Position.Y.Scale-((o-3)*100))}o=
Position.Y.Scale-((o-3)*100))}o=o+1 if type(l[p])=='table'then n[m][r]=k: o+1 if type(l[p])=='table'then n[m][r]=k:CreateSafeChatOptions(l[p],r)end r.
CreateSafeChatOptions(l[p],r)end r.MouseEnter:connect(function()k: MouseEnter:connect(function()k:ToggleSafeChatMenu(r)end)r.MouseLeave:connect(
ToggleSafeChatMenu(r)end)r.MouseLeave:connect(function()k:ToggleSafeChatMenu(r) function()k:ToggleSafeChatMenu(r)end)r.MouseButton1Click:connect(function()local
end)r.MouseButton1Click:connect(function()local s=k:FindButtonTree(r)pcall( s=k:FindButtonTree(r)pcall(function()g:Chat(s[1])end)end)end end return n end
function()g:Chat(s[1])end)end)end end return n end function k:CreateSafeChatGui( function k:CreateSafeChatGui()self.SafeChatFrame=d.Create'Frame'{Name=
)self.SafeChatFrame=d.Create'Frame'{Name='SafeChatFrame',Size=UDim2.new(1,0,1,0) 'SafeChatFrame',Size=UDim2.new(1,0,1,0),Parent=self.Gui,BackgroundTransparency=1
,Parent=self.Gui,BackgroundTransparency=1,d.Create'ImageButton'{Name= ,d.Create'ImageButton'{Name='SafeChatButton',Size=UDim2.new(0,44,0,31),Position=
'SafeChatButton',Size=UDim2.new(0,44,0,31),Position=UDim2.new(0,1,0.35,0), UDim2.new(0,1,0.35,0),BackgroundTransparency=1,Image=
BackgroundTransparency=1,Image='http://www.roblox.com/asset/?id=97080365'}}self. 'http://www.roblox.com/asset/?id=97080365'}}self.SafeChatButton=self.
SafeChatButton=self.SafeChatFrame.SafeChatButton self.SafeChatTree[self. SafeChatFrame.SafeChatButton self.SafeChatTree[self.SafeChatButton]=k:
SafeChatButton]=k:CreateSafeChatOptions(self.SafeChat_List,self.SafeChatButton) CreateSafeChatOptions(self.SafeChat_List,self.SafeChatButton)self.SafeChatButton
self.SafeChatButton.MouseButton1Click:connect(function()k:ToggleSafeChatMenu( .MouseButton1Click:connect(function()k:ToggleSafeChatMenu(self.SafeChatButton)
self.SafeChatButton)end)end function k:FocusOnChatBar()if self.ClickToChatButton end)end function k:FocusOnChatBar()if self.ClickToChatButton then self.
then self.ClickToChatButton.Visible=false end self.GotFocus=true if self.Frame[ ClickToChatButton.Visible=false end self.GotFocus=true if self.Frame[
'Background']then self.Frame.Background.Visible=false end self.ChatBar: 'Background']then self.Frame.Background.Visible=false end self.ChatBar:
CaptureFocus()end function k: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 'Frame'{Name='ChatTouchFrame',Size=UDim2.new(0,128,0,32),Position=UDim2.new(0,88
@ -351,8 +351,8 @@ 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 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 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)== ,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. '%'then n='(TEAM) '..string.sub(n,2,#n)end end if g.ClassicChat then if not(
sub(n,1,3)=='/e 'or string.sub(n,1,7)=='/emote 'then elseif(a or b.ChatMode== string.sub(n,1,3)=='/e 'or string.sub(n,1,7)=='/emote ')and(a or b.ChatMode==
Enum.ChatMode.TextAndMenu)or(b.ChatMode==Enum.ChatMode.Menu and string.sub(n,1,3 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) )=='/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 end end end function k:CullThread()while true do if#self.MessageQueue>0 then for