From 326ab15a1c88050c4e1bb68e52375ccacebaeea9 Mon Sep 17 00:00:00 2001 From: Thomas G <62822072+Thomasluigi07@users.noreply.github.com> Date: Sat, 20 May 2023 13:46:15 +1000 Subject: [PATCH] clean --- maintenance/_redirects | 2 - maintenance/asset/1 | 91 - maintenance/asset/10 | 1001 ------- maintenance/asset/100 | 2751 ------------------ maintenance/asset/11 | 3013 ------------------- maintenance/asset/11744447 | 1 - maintenance/asset/12 | 867 ------ maintenance/asset/13 | 416 --- maintenance/asset/14 | 863 ------ maintenance/asset/15 | 1034 ------- maintenance/asset/16 | 147 - maintenance/asset/17 | 3845 ------------------------- maintenance/asset/18 | 24 - maintenance/asset/18881789 | 1 - maintenance/asset/18881808 | 1 - maintenance/asset/19 | 1116 ------- maintenance/asset/19238067 | 1 - maintenance/asset/19238114 | 1 - maintenance/asset/2 | 23 - maintenance/asset/20 | 2208 -------------- maintenance/asset/200 | 311 -- maintenance/asset/201 | 242 -- maintenance/asset/2409156 | 1 - maintenance/asset/2409157 | 1 - maintenance/asset/3 | 1 - maintenance/asset/300 | 140 - maintenance/asset/301 | Bin 49236 -> 0 bytes maintenance/asset/302 | 3 - maintenance/asset/303 | 10 - maintenance/asset/304 | Bin 11931 -> 0 bytes maintenance/asset/305 | 10 - maintenance/asset/306 | 10 - maintenance/asset/307 | Bin 3581 -> 0 bytes maintenance/asset/308 | 14 - maintenance/asset/360360 | 1 - maintenance/asset/360362 | 1 - maintenance/asset/360363 | 1 - maintenance/asset/360365 | 1 - maintenance/asset/360369 | 1 - maintenance/asset/360371 | 1 - maintenance/asset/360372 | 1 - maintenance/asset/360375 | 1 - maintenance/asset/360378 | 1 - maintenance/asset/360380 | 1 - maintenance/asset/38037265 | 392 --- maintenance/asset/383875 | 1 - maintenance/asset/383878 | 1 - maintenance/asset/383879 | 1 - maintenance/asset/4 | 110 - maintenance/asset/400 | Bin 205990 -> 0 bytes maintenance/asset/4000000000000000000 | Bin 202899 -> 0 bytes maintenance/asset/4000000000000000001 | Bin 198845 -> 0 bytes maintenance/asset/400993 | 1 - maintenance/asset/401 | 10 - maintenance/asset/433570 | 1 - maintenance/asset/433603 | 1 - maintenance/asset/438059 | 1 - maintenance/asset/462226 | 1 - maintenance/asset/5 | 2002 ------------- maintenance/asset/6 | 561 ---- maintenance/asset/7 | 73 - maintenance/asset/8 | 215 -- maintenance/asset/9 | 939 ------ maintenance/asset/GetScriptState.ashx | 1 - maintenance/asset/PrivKey.pem | 3 - maintenance/asset/index.php | 69 - 66 files changed, 22542 deletions(-) delete mode 100644 maintenance/asset/1 delete mode 100644 maintenance/asset/10 delete mode 100644 maintenance/asset/100 delete mode 100644 maintenance/asset/11 delete mode 100644 maintenance/asset/11744447 delete mode 100644 maintenance/asset/12 delete mode 100644 maintenance/asset/13 delete mode 100644 maintenance/asset/14 delete mode 100644 maintenance/asset/15 delete mode 100644 maintenance/asset/16 delete mode 100644 maintenance/asset/17 delete mode 100644 maintenance/asset/18 delete mode 100644 maintenance/asset/18881789 delete mode 100644 maintenance/asset/18881808 delete mode 100644 maintenance/asset/19 delete mode 100644 maintenance/asset/19238067 delete mode 100644 maintenance/asset/19238114 delete mode 100644 maintenance/asset/2 delete mode 100644 maintenance/asset/20 delete mode 100644 maintenance/asset/200 delete mode 100644 maintenance/asset/201 delete mode 100644 maintenance/asset/2409156 delete mode 100644 maintenance/asset/2409157 delete mode 100644 maintenance/asset/3 delete mode 100644 maintenance/asset/300 delete mode 100644 maintenance/asset/301 delete mode 100644 maintenance/asset/302 delete mode 100644 maintenance/asset/303 delete mode 100644 maintenance/asset/304 delete mode 100644 maintenance/asset/305 delete mode 100644 maintenance/asset/306 delete mode 100644 maintenance/asset/307 delete mode 100644 maintenance/asset/308 delete mode 100644 maintenance/asset/360360 delete mode 100644 maintenance/asset/360362 delete mode 100644 maintenance/asset/360363 delete mode 100644 maintenance/asset/360365 delete mode 100644 maintenance/asset/360369 delete mode 100644 maintenance/asset/360371 delete mode 100644 maintenance/asset/360372 delete mode 100644 maintenance/asset/360375 delete mode 100644 maintenance/asset/360378 delete mode 100644 maintenance/asset/360380 delete mode 100644 maintenance/asset/38037265 delete mode 100644 maintenance/asset/383875 delete mode 100644 maintenance/asset/383878 delete mode 100644 maintenance/asset/383879 delete mode 100644 maintenance/asset/4 delete mode 100644 maintenance/asset/400 delete mode 100644 maintenance/asset/4000000000000000000 delete mode 100644 maintenance/asset/4000000000000000001 delete mode 100644 maintenance/asset/400993 delete mode 100644 maintenance/asset/401 delete mode 100644 maintenance/asset/433570 delete mode 100644 maintenance/asset/433603 delete mode 100644 maintenance/asset/438059 delete mode 100644 maintenance/asset/462226 delete mode 100644 maintenance/asset/5 delete mode 100644 maintenance/asset/6 delete mode 100644 maintenance/asset/7 delete mode 100644 maintenance/asset/8 delete mode 100644 maintenance/asset/9 delete mode 100644 maintenance/asset/GetScriptState.ashx delete mode 100644 maintenance/asset/PrivKey.pem delete mode 100644 maintenance/asset/index.php diff --git a/maintenance/_redirects b/maintenance/_redirects index 678578a..fb95841 100644 --- a/maintenance/_redirects +++ b/maintenance/_redirects @@ -1,5 +1,3 @@ /studio/* https://github.com/archblox/website/raw/main/public/studio/:splat 302 /client/* https://github.com/archblox/website/raw/main/public/client/:splat 302 -/asset/?id=* https://github.com/archblox/website/raw/main/public/asset/:splat 302 -/asset?id=* https://github.com/archblox/website/raw/main/public/asset/:splat 302 /asset/* https://github.com/archblox/website/raw/main/public/asset/:splat 302 \ No newline at end of file diff --git a/maintenance/asset/1 b/maintenance/asset/1 deleted file mode 100644 index bb48ce0..0000000 --- a/maintenance/asset/1 +++ /dev/null @@ -1,91 +0,0 @@ -%1% --- Creates all neccessary scripts for the gui on initial load, everything except build tools --- Created by Ben T. 10/29/10 --- Please note that these are loaded in a specific order to diminish errors/perceived load time by user -local scriptContext = game:GetService("ScriptContext") -local touchEnabled = false -pcall(function() touchEnabled = game:GetService("UserInputService").TouchEnabled end) - --- library registration -scriptContext:AddCoreScript(2, scriptContext,"/Libraries/LibraryRegistration/LibraryRegistration") - -local function waitForChild(instance, name) - while not instance:FindFirstChild(name) do - instance.ChildAdded:wait() - end -end -local function waitForProperty(instance, property) - while not instance[property] do - instance.Changed:wait() - end -end - --- Responsible for tracking logging items -local scriptContext = game:GetService("ScriptContext") -scriptContext:AddCoreScript(3, scriptContext, "CoreScripts/Sections") - -waitForChild(game:GetService("CoreGui"),"RobloxGui") -local screenGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") - -if not touchEnabled then - -- ToolTipper (creates tool tips for gui) - scriptContext:AddCoreScript(4,screenGui,"CoreScripts/ToolTip") - -- SettingsScript - scriptContext:AddCoreScript(5,screenGui,"CoreScripts/Settings") -end - --- For Deepak Testing -pcall(function() - waitForProperty(game,"PlaceId") - if game.PlaceId == deepakTestingPlace then - scriptContext:AddCoreScript(52177626,screenGui,"RBXStatusBuffsGUIScript") - end -end) - --- MainBotChatScript -scriptContext:AddCoreScript(6,screenGui,"CoreScripts/MainBotChatScript") - --- Popup Script -scriptContext:AddCoreScript(7,screenGui,"CoreScripts/PopupScript") --- Friend Notification Script (probably can use this script to expand out to other notifications) -scriptContext:AddCoreScript(8,screenGui,"CoreScripts/NotificationScript") --- Chat script -scriptContext:AddCoreScript(9, screenGui, "CoreScripts/ChatScript") --- Purchase Prompt Script -scriptContext:AddCoreScript(10, screenGui, "CoreScripts/PurchasePromptScript") - -if not touchEnabled then - -- New Player List - scriptContext:AddCoreScript(11,screenGui,"CoreScripts/PlayerListScript") -elseif screenGui.AbsoluteSize.Y > 600 then - -- New Player List - scriptContext:AddCoreScript(11,screenGui,"CoreScripts/PlayerListScript") -else - delay(5, function() - if screenGui.AbsoluteSize.Y >= 600 then - -- New Player List - scriptContext:AddCoreScript(11,screenGui,"CoreScripts/PlayerListScript") - end - end) -end - -if game.CoreGui.Version >= 3 then - -- Backpack Builder, creates most of the backpack gui - scriptContext:AddCoreScript(12,screenGui,"CoreScripts/BackpackScripts/BackpackBuilder") - - waitForChild(screenGui,"CurrentLoadout") - waitForChild(screenGui,"Backpack") - local Backpack = screenGui.Backpack - - -- Manager handles all big backpack state changes, other scripts subscribe to this and do things accordingly - if game.CoreGui.Version >= 7 then - scriptContext:AddCoreScript(13,Backpack,"CoreScripts/BackpackScripts/BackpackManager") - end - - -- Backpack Gear (handles all backpack gear tab stuff) - game:GetService("ScriptContext"):AddCoreScript(14,Backpack,"CoreScripts/BackpackScripts/BackpackGear") - -- Loadout Script, used for gear hotkeys - scriptContext:AddCoreScript(15,screenGui.CurrentLoadout,"CoreScripts/BackpackScripts/LoadoutScript") - -- Wardrobe script handles all character dressing operations - scriptContext:AddCoreScript(16,Backpack,"CoreScripts/BackpackScripts/BackpackWardrobe") -end \ No newline at end of file diff --git a/maintenance/asset/10 b/maintenance/asset/10 deleted file mode 100644 index 2627b37..0000000 --- a/maintenance/asset/10 +++ /dev/null @@ -1,1001 +0,0 @@ -%10% --- this script creates the gui and sends the web requests for in game purchase prompts - --- wait for important items to appear -while not game do - wait(0.1) -end -while not game:GetService("MarketplaceService") do - wait(0.1) -end -while not game:FindFirstChild("CoreGui") do - wait(0.1) -end -while not game.CoreGui:FindFirstChild("RobloxGui") do - wait(0.1) -end - -local allowedPlaceIds = nil--{41647283, 54352498, 96623001, 100364292} - -if allowedPlaceIds ~= nil then - local currentPlaceId = game.PlaceId - local canRunScript = false - - for index, id in pairs(allowedPlaceIds) do - if currentPlaceId == id then - canRunScript = true - break - end - end - - if not canRunScript then - script:Destroy() - return -- don't think this gets hit, but just in case return - end -end - - --------------------------------- Global Variables ---------------------------------------- --- utility variables -local RbxUtility = nil -local baseUrl = game:GetService("ContentProvider").BaseUrl:lower() - --- data variables -local currentProductInfo, currentAssetId, currentCurrencyType, currentCurrencyAmount, currentEquipOnPurchase, currentProductId -local checkingPlayerFunds = false -local openBCUpSellWindowConnection = nil --- When a player has insufficient funds to buy something, this is how often we check to see if their funds have changed (in seconds) -local checkPlayerFundsLoopTime = 5 - --- gui variables -local openBuyCurrencyWindowConnection = nil -local currentlyPrompting = false -local purchaseDialog, errorDialog = nil -local tweenTime = 0.3 -local showPosition = UDim2.new(0.5,-330,0.5,-200) -local hidePosition = UDim2.new(0.5,-330,1,5) -local isSmallScreen = nil -local spinning = false -local spinnerIcons = nil -local smallScreenThreshold = 450 - -local hereText - --- user facing images -local assetUrls = {} -local assetUrl = "http://www.jarfeh.xyz/Asset/?id=" -local errorImageUrl = assetUrl .. "42557901" table.insert(assetUrls, errorImageUrl) -local buyImageUrl = assetUrl .. "104651457" table.insert(assetUrls,buyImageUrl) -local buyImageDownUrl = assetUrl .. "104651515" table.insert(assetUrls, buyImageDownUrl) -local buyImageDisabledUrl = assetUrl .. "104651532" table.insert(assetUrls, buyImageDisabledUrl) -local cancelButtonImageUrl = assetUrl .. "104651592" table.insert(assetUrls, cancelButtonImageUrl) -local cancelButtonDownUrl = assetUrl .. "104651639" table.insert(assetUrls, cancelButtonDownUrl) -local okButtonUrl = assetUrl .. "104651665" table.insert(assetUrls, okButtonUrl) -local okButtonPressedrl = assetUrl .."104651707" table.insert(assetUrls, okButtonPressedrl) -local freeButtonImageUrl = assetUrl .. "104651733" table.insert(assetUrls, freeButtonImageUrl) -local freeButtonImageDownUrl = assetUrl .. "104651761" table.insert(assetUrls, freeButtonImageDownUrl) -local tixIcon = assetUrl .. "102481431" table.insert(assetUrls,tixIcon) -local robuxIcon = assetUrl .. "102481419" table.insert(assetUrls,robuxIcon) - --- user facing string -local buyHeaderText = "Buy Item" -local takeHeaderText = "Take Item" -local buyFailedHeaderText = "An Error Occurred" - -local errorPurchasesDisabledText = "in-game purchases are disabled" -local errorPurchasesUnknownText = "Roblox is performing maintenance" - -local purchaseSucceededText = "Your purchase of itemName succeeded!" -local purchaseFailedText = "Your purchase of itemName failed because errorReason. Your account has not been charged. Please try again soon." -local itemPurchaseText = "Would you like to buy the assetType 'itemName' for currencyType currencyAmount?" -local freeItemPurchaseText = "Would you like to take the assetType 'itemName' for FREE?" -local freeItemBalanceText = "Your balance of Robux or Tix will not be affected by this transaction." - -local buildsClubUpsellText = "You don't have the appropriate membership to buy this item. Please click here to upgrade your builders club" --------------------------------- End Global Variables ---------------------------------------- - - ------------------------------ Util Functions --------------------------------------------- -function getSecureApiBaseUrl() - local secureApiUrl = baseUrl - secureApiUrl = string.gsub(secureApiUrl,"http","https") - secureApiUrl = string.gsub(secureApiUrl,"www","api") - return secureApiUrl -end - -function getRbxUtility() - if not RbxUtility then - RbxUtility = LoadLibrary("RbxUtility") - end - return RbxUtility -end - -function preloadAssets() - for i = 1, #assetUrls do - game:GetService("ContentProvider"):Preload(assetUrls[i]) - end -end ------------------------------ End Util Functions --------------------------------------------- - - --------------------------------- Accept/Decline Functions -------------------------------------- -function removeCurrentPurchaseInfo() - currentAssetId = nil - currentCurrencyType = nil - currentCurrencyAmount = nil - currentEquipOnPurchase = nil - currentProductId = nil - currentProductInfo = nil -end - -function closePurchasePrompt() - purchaseDialog:TweenPosition(hidePosition, Enum.EasingDirection.Out, Enum.EasingStyle.Quad, tweenTime, true, function() - game.GuiService:RemoveCenterDialog(purchaseDialog) - hidePurchasing() - purchaseDialog.Visible = false - currentlyPrompting = false - end) -end - -function userPurchaseActionsEnded(isSuccess) - checkingPlayerFunds = false - - if isSuccess then -- show the user we bought the item successfully, when they close this dialog we will call signalPromptEnded - local newPurchasedSucceededText = string.gsub( purchaseSucceededText,"itemName", tostring(currentProductInfo["Name"])) - purchaseDialog.BodyFrame.ItemPreview.ItemDescription.Text = newPurchasedSucceededText - setButtonsVisible(purchaseDialog.BodyFrame.OkPurchasedButton) - hidePurchasing() - else -- otherwise we didn't purchase, no need to show anything, just signal and close dialog - signalPromptEnded(isSuccess) - end -end - -function signalPromptEnded(isSuccess) - closePurchasePrompt() - game:GetService("MarketplaceService"):SignalPromptPurchaseFinished(game.Players.LocalPlayer, currentAssetId, isSuccess) - removeCurrentPurchaseInfo() -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 -function updatePurchasePromptData(toggleColoredText) - local newItemDescription = "" - - if hereText then - hereText.Parent = nil - end - - if not currentProductInfo then return end - - -- id to use when we request a purchase - currentProductId = currentProductInfo["ProductId"] - - if isFreeItem() then - newItemDescription = string.gsub( freeItemPurchaseText,"itemName", tostring(currentProductInfo["Name"])) - newItemDescription = string.gsub( newItemDescription,"assetType", tostring(assetTypeToString(currentProductInfo["AssetTypeId"])) ) - setHeaderText(takeHeaderText) - else -- otherwise item costs something, so different prompt - newItemDescription = string.gsub( itemPurchaseText,"itemName", tostring(currentProductInfo["Name"])) - newItemDescription = string.gsub( newItemDescription,"assetType", tostring(assetTypeToString(currentProductInfo["AssetTypeId"])) ) - newItemDescription = string.gsub( newItemDescription,"currencyType", tostring(currencyTypeToString(currentCurrencyType)) ) - newItemDescription = string.gsub( newItemDescription,"currencyAmount", tostring(currentCurrencyAmount)) - setHeaderText(buyHeaderText) - end - - purchaseDialog.BodyFrame.ItemPreview.ItemDescription.Text = newItemDescription - purchaseDialog.BodyFrame.ItemPreview.Image = baseUrl .. "thumbs/asset.ashx?assetid=" .. tostring(currentAssetId) .. '&x=100&y=100&format=png'; -end - -function showPurchasePrompt() - local canPurchase, insufficientFunds, notRightBC, override, descText = canPurchaseItem() - if canPurchase then - updatePurchasePromptData() - if override and descText then - purchaseDialog.BodyFrame.ItemPreview.ItemDescription.Text = descText - purchaseDialog.BodyFrame.AfterBalanceButton.Visible = false - end - game.GuiService:AddCenterDialog(purchaseDialog, Enum.CenterDialogType.ModalDialog, - --ShowFunction - function() - -- set the state for our buttons - purchaseDialog.Visible = true - if isFreeItem() then - setButtonsVisible(purchaseDialog.BodyFrame.FreeButton, purchaseDialog.BodyFrame.CancelButton, purchaseDialog.BodyFrame.AfterBalanceButton) - elseif notRightBC then - purchaseDialog.BodyFrame.AfterBalanceButton.Text = "You require an upgrade to your Builders Club membership to purchase this item. Click here to upgrade." - if not openBCUpSellWindowConnection then - openBCUpSellWindowConnection = purchaseDialog.BodyFrame.AfterBalanceButton.MouseButton1Click:connect(function() - if purchaseDialog.BodyFrame.AfterBalanceButton.Text == "You require an upgrade to your Builders Club membership to purchase this item. Click here to upgrade." then - print('Upselling BC') - openBCUpSellWindow() - end - end) - end - setButtonsVisible(purchaseDialog.BodyFrame.BuyDisabledButton, purchaseDialog.BodyFrame.CancelButton, purchaseDialog.BodyFrame.AfterBalanceButton) - elseif insufficientFunds then - setButtonsVisible(purchaseDialog.BodyFrame.BuyDisabledButton, purchaseDialog.BodyFrame.CancelButton, purchaseDialog.BodyFrame.AfterBalanceButton) - elseif override then - setButtonsVisible(purchaseDialog.BodyFrame.BuyDisabledButton, purchaseDialog.BodyFrame.CancelButton) -- , purchaseDialog.BodyFrame.AfterBalanceButton) - else - setButtonsVisible(purchaseDialog.BodyFrame.BuyButton, purchaseDialog.BodyFrame.CancelButton) -- , purchaseDialog.BodyFrame.AfterBalanceButton) - end - - purchaseDialog:TweenPosition(showPosition, Enum.EasingDirection.Out, Enum.EasingStyle.Quad, tweenTime, true) - - -- funds are insufficient so we have prompted the user to buy more, now we check until the user buys or cancels - if insufficientFunds and notRightBC == false then - Spawn(function() - checkingPlayerFunds = true - checkPlayerFundLoop() - end) - end - end, - --HideFunction - function() - purchaseDialog.Visible = false - end) - else -- we failed in prompting a purchase, do a decline - doDeclinePurchase() - end -end - --- given an asset id, this function will grab that asset from the website, and return the first "Tool" object found inside it -function getToolAssetID(assetID) - local newTool = game:GetService("InsertService"):LoadAsset(assetID) - if not newTool then return nil end - - if newTool:IsA("Tool") then - return newTool - end - - local toolChildren = newTool:GetChildren() - for i = 1, #toolChildren do - if toolChildren[i]:IsA("Tool") then - return toolChildren[i] - end - end - return nil -end - --- the user tried to purchase by clicking the purchase button, but something went wrong. --- let them know their account was not charged, and that they do not own the item yet. -function purchaseFailed(inGamePurchasesDisabled) - local newPurchasedFailedText = string.gsub( purchaseFailedText,"itemName", tostring(currentProductInfo["Name"])) - if inGamePurchasesDisabled then - newPurchasedFailedText = string.gsub( newPurchasedFailedText,"errorReason", tostring(errorPurchasesDisabledText) ) - else - newPurchasedFailedText = string.gsub( newPurchasedFailedText,"errorReason", tostring(errorPurchasesUnknownText) ) - end - - purchaseDialog.BodyFrame.ItemPreview.ItemDescription.Text = newPurchasedFailedText - purchaseDialog.BodyFrame.ItemPreview.Image = errorImageUrl - - setButtonsVisible(purchaseDialog.BodyFrame.OkButton) - - setHeaderText(buyFailedHeaderText) - - hidePurchasing() -end - --- user has specified they want to buy an item, now try to attempt to buy it for them -function doAcceptPurchase(currencyPreferredByUser) - showPurchasing() -- shows a purchasing ui (shows spinner) - - -- http call to do the purchase - local response = "none" - local success, reason = ypcall(function() - response = game:HttpPostAsync(getSecureApiBaseUrl() .. "marketplace/purchase?productId=" .. tostring(currentProductId) .. - "¤cyTypeId=" .. tostring(currencyEnumToInt(currentCurrencyType)) .. - "&purchasePrice=" .. tostring(currentCurrencyAmount) .. - "&locationType=Game" .. "&locationId=" .. Game.PlaceId, - "RobloxPurchaseRequest") - end) - - -- debug output for us (found in the logs from local) - print("doAcceptPurchase success from ypcall is ",success,"reason is",reason) - print("doAcceptPurchase response is ",response) - - wait(1) -- allow the purchasing waiting dialog to at least be readable (otherwise it might flash, looks bad)... - - -- check to make sure purchase actually happened on the web end - if response == "none" or response == nil or response == '' then - print("did not get a proper response from web on purchase of",currentAssetId) - purchaseFailed() - return - end - - -- parse our response, decide how to react - response = getRbxUtility().DecodeJSON(response) - - if response then - if response["success"] == false then - if response["status"] ~= "AlreadyOwned" then - print("web return response of fail on purchase of",currentAssetId) - purchaseFailed( (response["status"] == "EconomyDisabled") ) - return - end - end - else - print("web return response of non parsable JSON on purchase of",currentAssetId) - purchaseFailed() - return - end - - -- check to see if this item was bought, and if we want to equip it (also need to make sure the asset type was gear) - if currentEquipOnPurchase and success and tonumber(currentProductInfo["AssetTypeId"]) == 19 then - local tool = getToolAssetID(tonumber(currentAssetId)) - if tool then - tool.Parent = game.Players.LocalPlayer.Backpack - end - end - - userPurchaseActionsEnded(success) -end - --- user pressed the cancel button, just remove all purchasing prompts -function doDeclinePurchase() - userPurchaseActionsEnded(false) -end --------------------------------- End Accept/Decline Functions -------------------------------------- - - ----------------------------------------------- Currency Functions --------------------------------------------- --- enums have no implicit conversion to numbers in lua, has to have a function to do this -function currencyEnumToInt(currencyEnum) - if currencyEnum == Enum.CurrencyType.Robux then - return 1 - elseif currencyEnum == Enum.CurrencyType.Tix then - return 2 - end -end - --- oi, this is ugly -function assetTypeToString(assetType) - if assetType == 1 then return "Image" - elseif assetType == 2 then return "T-Shirt" - elseif assetType == 3 then return "Audio" - elseif assetType == 4 then return "Mesh" - elseif assetType == 5 then return "Lua" - elseif assetType == 6 then return "HTML" - elseif assetType == 7 then return "Text" - elseif assetType == 8 then return "Hat" - elseif assetType == 9 then return "Place" - elseif assetType == 10 then return "Model" - elseif assetType == 11 then return "Shirt" - elseif assetType == 12 then return "Pants" - elseif assetType == 13 then return "Decal" - elseif assetType == 16 then return "Avatar" - elseif assetType == 17 then return "Head" - elseif assetType == 18 then return "Face" - elseif assetType == 19 then return "Gear" - elseif assetType == 21 then return "Badge" - elseif assetType == 22 then return "Group Emblem" - elseif assetType == 24 then return "Animation" - elseif assetType == 25 then return "Arms" - elseif assetType == 26 then return "Legs" - elseif assetType == 27 then return "Torso" - elseif assetType == 28 then return "Right Arm" - elseif assetType == 29 then return "Left Arm" - elseif assetType == 30 then return "Left Leg" - elseif assetType == 31 then return "Right Leg" - elseif assetType == 32 then return "Package" - elseif assetType == 33 then return "YouTube Video" - elseif assetType == 34 then return "Game Pass" - end - - return "" -end - -function currencyTypeToString(currencyType) - if currencyType == Enum.CurrencyType.Tix then - return "Tix" - else - return "R$" - end -end - --- figure out what currency to use based on the currency you can actually sell the item in and what the script specified -function setCurrencyAmountAndType(priceInRobux, priceInTix) - if currentCurrencyType == Enum.CurrencyType.Default or currentCurrencyType == Enum.CurrencyType.Robux then -- sell for default (user doesn't care) or robux - if priceInRobux ~= nil and priceInRobux ~= 0 then -- we can sell for robux - currentCurrencyAmount = priceInRobux - currentCurrencyType = Enum.CurrencyType.Robux - else -- have to use tix - currentCurrencyAmount = priceInTix - currentCurrencyType = Enum.CurrencyType.Tix - end - elseif currentCurrencyType == Enum.CurrencyType.Tix then -- we want to sell for tix - if priceInTix ~= nil and priceInTix ~= 0 then -- we can sell for tix - currentCurrencyAmount = priceInTix - currentCurrencyType = Enum.CurrencyType.Tix - else -- have to use robux - currentCurrencyAmount = priceInRobux - currentCurrencyType = Enum.CurrencyType.Robux - end - else - return false - end - - if currentCurrencyAmount == nil then - return false - end - - return true -end - --- will get the player's balance of robux and tix, return in a table -function getPlayerBalance() - local playerBalance = nil - local success, errorCode = ypcall(function() playerBalance = game:HttpGetAsync(getSecureApiBaseUrl() .. "currency/balance") end) - if not success then - print("Get player balance failed because",errorCode) - return nil - end - - if playerBalance == '' then - return nil - end - - playerBalance = getRbxUtility().DecodeJSON(playerBalance) - - return playerBalance -end - --- should open an external default browser window to this url -function openBuyCurrencyWindow() - game:GetService("GuiService"):OpenBrowserWindow(baseUrl .. "Upgrades/Robux.aspx") -end - -function openBCUpSellWindow() - Game:GetService('GuiService'):OpenBrowserWindow(baseUrl .. "Upgrades/BuildersClubMemberships.aspx") -end - --- set up the gui text at the bottom of the prompt (alerts user to how much money they will have left, or if they need to buy more to buy the item) -function updateAfterBalanceText(playerBalance, notRightBc) - if isFreeItem() then - purchaseDialog.BodyFrame.AfterBalanceButton.Text = freeItemBalanceText - return true, false - end - - local keyWord = nil - if currentCurrencyType == Enum.CurrencyType.Robux then - keyWord = "robux" - elseif currentCurrencyType == Enum.CurrencyType.Tix then - keyWord = "tickets" - end - - if not keyWord then - return false - end - - local playerBalanceNumber = tonumber(playerBalance[keyWord]) - if not playerBalanceNumber then - return false - end - - local afterBalanceNumber = playerBalanceNumber - currentCurrencyAmount - - -- check to see if we have enough of the desired currency to allow a purchase, if not we need to prompt user to buy robux - if not notRightBc then - if afterBalanceNumber < 0 and keyWord == "robux" then - if openBuyCurrencyWindowConnection == nil then - openBuyCurrencyWindowConnection = purchaseDialog.BodyFrame.AfterBalanceButton.MouseButton1Click:connect(openBuyCurrencyWindow) - end - purchaseDialog.BodyFrame.AfterBalanceButton.Text = "You need " .. currencyTypeToString(currentCurrencyType) .. " " .. tostring(-afterBalanceNumber) .. " more to buy this, click here to purchase more." - return true, true - elseif afterBalanceNumber < 0 and keyWord == "tickets" then - purchaseDialog.BodyFrame.AfterBalanceButton.Text = "You need " .. tostring(-afterBalanceNumber) .. " " .. currencyTypeToString(currentCurrencyType) .. " more to buy this item." - return true, true -- user can't buy more tickets, so we say fail the transaction (maybe instead we can prompt them to trade currency???) - end - end - - -- this ensures that we only have one connection to openBuyCurrencyWindow at a time (otherwise might open multiple browser windows) - if(openBuyCurrencyWindowConnection) then - openBuyCurrencyWindowConnection:disconnect() - openBuyCurrencyWindowConnection = nil - end - purchaseDialog.BodyFrame.AfterBalanceButton.Text = "Your balance after this transaction will be " .. currencyTypeToString(currentCurrencyType) .. " " .. tostring(afterBalanceNumber) .. "." - return true, false -end - -function isFreeItem() - -- if both of these are true, then the item is free, just prompt user if they want to take one - return currentProductInfo and currentProductInfo["IsForSale"] == true and currentProductInfo["IsPublicDomain"] == true -end - --- will continuously poll the player to see if funds have changed. Poll rate is changed by adjusting checkPlayerFundsLoopTime, which is specified in seconds -function checkPlayerFundLoop() - local canPurchase = true - local insufficientFunds = true - while checkingPlayerFunds and insufficientFunds do - wait(checkPlayerFundsLoopTime) - canPurchase, insufficientFunds = canPurchaseItem() -- check again to see if we can buy item - if canPurchase then - if not insufficientFunds then - -- we can buy item! set our buttons up and we will exit this loop - setButtonsVisible(purchaseDialog.BodyFrame.BuyButton,purchaseDialog.BodyFrame.CancelButton, purchaseDialog.BodyFrame.AfterBalanceButton) - end - end - end -end ----------------------------------------------- End Currency Functions --------------------------------------------- - - ----------------------------------------------- Data Functions ----------------------------------------------------- - --- more enum to int fun! -function membershipTypeToNumber(membership) - if membership == Enum.MembershipType.None then - return 0 - elseif membership == Enum.MembershipType.BuildersClub then - return 1 - elseif membership == Enum.MembershipType.TurboBuildersClub then - return 2 - elseif membership == Enum.MembershipType.OutrageousBuildersClub then - return 3 - end - - return -1 -end - --- This functions checks to make sure the purchase is even possible, if not it returns false and we don't prompt user (some situations require user feedback when we won't prompt) -function canPurchaseItem() - - -- first we see if player already owns the asset - local playerOwnsAsset = false - local notRightBc = false - local descText = nil - local success, errorCode = ypcall(function() playerOwnsAsset = game:HttpGetAsync(getSecureApiBaseUrl() - .. "/ownership/hasAsset?userId=" - .. tostring(game.Players.LocalPlayer.userId) - .. "&assetId=" .. tostring(currentAssetId)) - end) - - if not success then - print("could not tell if player owns asset because",errorCode) - return false - end - - purchaseDialog.BodyFrame.AfterBalanceButton.Visible = true - - -- next we get the product info and do some checks on that - local success = ypcall(function() currentProductInfo = game:GetService("MarketplaceService"):GetProductInfo(currentAssetId) end) - if currentProductInfo == nil or not success then - descText = "In-game sales are temporarily disabled. Please try again later." - return true, nil, nil, true, descText - end - - if type(currentProductInfo) ~= "table" then - currentProductInfo = getRbxUtility().DecodeJSON(currentProductInfo) - end - - if not currentProductInfo then - descText = "Could not get product info. Please try again later." - return true, nil, nil, true, descText - end - - if playerOwnsAsset == true or playerOwnsAsset == "true" then - descText = "You already own this item." - return true, nil, nil, true, descText - end - - if currentProductInfo["IsForSale"] == false and currentProductInfo["IsPublicDomain"] == false then - descText = "This item is no longer for sale." - return true, nil, nil, true, descText - end - - -- now we start talking money, making sure we are going to be able to purchase this - if not setCurrencyAmountAndType(tonumber(currentProductInfo["PriceInRobux"]), tonumber(currentProductInfo["PriceInTickets"])) then - descText = "We could retrieve the price of the item correctly. Please try again later." - return true, nil, nil, true, descText - end - - local playerBalance = getPlayerBalance() - if not playerBalance then - descText = "Could not retrieve your balance. Please try again later." - return true, nil, nil, true, descText - end - - if tonumber(currentProductInfo["MinimumMembershipLevel"]) > membershipTypeToNumber(game.Players.LocalPlayer.MembershipType) then - notRightBc = true - end - - local updatedBalance, insufficientFunds = updateAfterBalanceText(playerBalance, notRightBc) - - if notRightBc then - purchaseDialog.BodyFrame.AfterBalanceButton.Active = true - return true, insufficientFunds, notRightBc, false - end - - if currentProductInfo["ContentRatingTypeId"] == 1 then - if game.Players.LocalPlayer:GetUnder13() then - descText = "Your account is under 13 so purchase of this item is not allowed." - return true, nil, nil, true, descText - end - end - - if (currentProductInfo["IsLimited"] == true or currentProductInfo["IsLimitedUnique"] == true) and - (currentProductInfo["Remaining"] == "" or currentProductInfo["Remaining"] == 0 or currentProductInfo["Remaining"] == nil) then - descText = "All copies of this item have been sold out! Try buying from other users on the website." - return true, nil, nil, true, descText - end - - if not updatedBalance then - descText = 'Could not update your balance. Please check back after some time.' - return true, nil, nil, true, descText - end - - -- we use insufficient funds to display a prompt to buy more robux - purchaseDialog.BodyFrame.AfterBalanceButton.Active = true - return true, insufficientFunds -end - -function computeSpaceString(pLabel) - local nString = " " - local tempSpaceLabel = Instance.new('TextButton') - tempSpaceLabel.Size = UDim2.new(0, pLabel.AbsoluteSize.X, 0, pLabel.AbsoluteSize.Y); - tempSpaceLabel.FontSize = pLabel.FontSize; - tempSpaceLabel.Parent = pLabel.Parent; - tempSpaceLabel.BackgroundTransparency = 1.0; - tempSpaceLabel.Text = nString; - tempSpaceLabel.Name = 'SpaceButton' - - while tempSpaceLabel.TextBounds.X < pLabel.TextBounds.X do - nString = nString .. " " - tempSpaceLabel.Text = nString - end - nString = nString .. " " - tempSpaceLabel.Text = "" - return nString -end - ----------------------------------------------- End Data Functions ----------------------------------------------------- - - ----------------------------------------------- Gui Functions ---------------------------------------------- -function startSpinner() - spinning = true - Spawn( function() - local spinPos = 0 - while spinning do - local pos = 0 - - while pos < 8 do - if pos == spinPos or pos == ((spinPos+1)%8) then - spinnerIcons[pos+1].Image = "http://www.jarfeh.xyz/Asset?id=45880668" - else - spinnerIcons[pos+1].Image = "http://www.jarfeh.xyz/Asset?id=45880710" - end - - pos = pos + 1 - end - spinPos = (spinPos + 1) % 8 - wait(1/15) - end - end) -end - -function stopSpinner() - spinning = false -end - --- convenience method to say exactly what buttons should be visible (all others are not!) -function setButtonsVisible(...) - local args = {...} - local argCount = select('#', ...) - - local bodyFrameChildren = purchaseDialog.BodyFrame:GetChildren() - for i = 1, #bodyFrameChildren do - if bodyFrameChildren[i]:IsA("GuiButton") then - bodyFrameChildren[i].Visible = false - for j = 1, argCount do - if bodyFrameChildren[i] == args[j] then - bodyFrameChildren[i].Visible = true - break - end - end - end - end -end - --- used for the "Purchasing..." frame -function createSpinner(size,position,parent) - local spinnerFrame = Instance.new("Frame") - spinnerFrame.Name = "Spinner" - spinnerFrame.Size = size - spinnerFrame.Position = position - spinnerFrame.BackgroundTransparency = 1 - spinnerFrame.ZIndex = 10 - spinnerFrame.Parent = parent - - spinnerIcons = {} - local spinnerNum = 1 - while spinnerNum <= 8 do - local spinnerImage = Instance.new("ImageLabel") - spinnerImage.Name = "Spinner"..spinnerNum - spinnerImage.Size = UDim2.new(0, 16, 0, 16) - spinnerImage.Position = UDim2.new(.5+.3*math.cos(math.rad(45*spinnerNum)), -8, .5+.3*math.sin(math.rad(45*spinnerNum)), -8) - spinnerImage.BackgroundTransparency = 1 - spinnerImage.ZIndex = 10 - spinnerImage.Image = "http://www.jarfeh.xyz/Asset/?id=45880710" - spinnerImage.Parent = spinnerFrame - - spinnerIcons[spinnerNum] = spinnerImage - spinnerNum = spinnerNum + 1 - end -end - --- all the gui init. Would be nice if this didn't have to be a script -function createPurchasePromptGui() - purchaseDialog = Instance.new("Frame") - purchaseDialog.Name = "PurchaseFrame" - purchaseDialog.Size = UDim2.new(0,660,0,400) - purchaseDialog.Position = hidePosition - purchaseDialog.Visible = false - purchaseDialog.BackgroundColor3 = Color3.new(141/255,141/255,141/255) - purchaseDialog.BorderColor3 = Color3.new(204/255,204/255,204/255) - purchaseDialog.Parent = game.CoreGui.RobloxGui - - local bodyFrame = Instance.new("Frame") - bodyFrame.Name = "BodyFrame" - bodyFrame.Size = UDim2.new(1,0,1,-60) - bodyFrame.Position = UDim2.new(0,0,0,60) - bodyFrame.BackgroundColor3 = Color3.new(67/255, 67/255, 67/255) - bodyFrame.BorderSizePixel = 0 - bodyFrame.Parent = purchaseDialog - - local titleLabel = createTextObject("TitleLabel", "Buy Item", "TextLabel", Enum.FontSize.Size48) - titleLabel.Size = UDim2.new(1,0,0,60) - local titleBackdrop = titleLabel:Clone() - titleBackdrop.Name = "TitleBackdrop" - titleBackdrop.TextColor3 = Color3.new(32/255,32/255,32/255) - titleBackdrop.BackgroundTransparency = 0.0 - titleBackdrop.BackgroundColor3 = Color3.new(54/255, 96/255, 171/255) - titleBackdrop.Position = UDim2.new(0,0,0,-2) - titleBackdrop.Parent = purchaseDialog - titleLabel.Parent = purchaseDialog - - local cancelButton = createImageButton("CancelButton") - cancelButton.Position = UDim2.new(0.75,-70,1,-120) - cancelButton.BackgroundTransparency = 1 - cancelButton.BorderSizePixel = 0 - cancelButton.Parent = bodyFrame - cancelButton.Modal = true - cancelButton.Image = cancelButtonImageUrl - cancelButton.MouseButton1Down:connect(function() - cancelButton.Image = cancelButtonDownUrl - end) - cancelButton.MouseButton1Up:connect(function( ) - cancelButton.Image = cancelButtonImageUrl - end) - cancelButton.MouseLeave:connect(function( ) - cancelButton.Image = cancelButtonImageUrl - end) - cancelButton.MouseButton1Click:connect(doDeclinePurchase) - - local buyButton = createImageButton("BuyButton") - buyButton.Position = UDim2.new(0.25,-100,1,-120) - buyButton.BackgroundTransparency = 1 - buyButton.BorderSizePixel = 0 - buyButton.Image = buyImageUrl - buyButton.MouseButton1Down:connect(function() - buyButton.Image = buyImageDownUrl - end) - buyButton.MouseButton1Up:connect(function( ) - buyButton.Image = buyImageUrl - end) - buyButton.MouseLeave:connect(function( ) - buyButton.Image = buyImageUrl - end) - buyButton.Parent = bodyFrame - - local buyDisabledButton = buyButton:Clone() - buyDisabledButton.Name = "BuyDisabledButton" - buyDisabledButton.AutoButtonColor = false - buyDisabledButton.Visible = false - buyDisabledButton.Active = false - buyDisabledButton.Image = buyImageDisabledUrl - buyDisabledButton.Parent = bodyFrame - - local freeButton = buyButton:Clone() - freeButton.BackgroundTransparency = 1 - freeButton.Name = "FreeButton" - freeButton.Visible = false - freeButton.Image = freeButtonImageUrl - freeButton.MouseButton1Down:connect(function() - freeButton.Image = freeButtonImageDownUrl - end) - freeButton.MouseButton1Up:connect(function( ) - freeButton.Image = freeButtonImageUrl - end) - freeButton.MouseLeave:connect(function( ) - freeButton.Image = freeButtonImageUrl - end) - freeButton.Parent = bodyFrame - - local okButton = buyButton:Clone() - okButton.Name = "OkButton" - okButton.BackgroundTransparency = 1 - okButton.Visible = false - okButton.Position = UDim2.new(0.5,-okButton.Size.X.Offset/2,1,-120) - okButton.Modal = true - okButton.Image = okButtonUrl - okButton.MouseButton1Down:connect(function() - okButton.Image = okButtonPressedrl - end) - okButton.MouseButton1Up:connect(function( ) - okButton.Image = okButtonUrl - end) - okButton.MouseLeave:connect(function( ) - okButton.Image = okButtonUrl - end) - okButton.Parent = bodyFrame - - local okPurchasedButton = okButton:Clone() - okPurchasedButton.Name = "OkPurchasedButton" - okPurchasedButton.MouseButton1Down:connect(function() - okPurchasedButton.Image = okButtonPressedrl - end) - okPurchasedButton.MouseButton1Up:connect(function( ) - okPurchasedButton.Image = okButtonUrl - end) - okPurchasedButton.MouseLeave:connect(function( ) - okPurchasedButton.Image = okButtonUrl - end) - okPurchasedButton.Parent = bodyFrame - - okButton.MouseButton1Click:connect(function () userPurchaseActionsEnded(false) end) - okPurchasedButton.MouseButton1Click:connect(function() signalPromptEnded(true) end) - buyButton.MouseButton1Click:connect(function() doAcceptPurchase(Enum.CurrencyType.Robux) end) - freeButton.MouseButton1Click:connect(function() doAcceptPurchase(false) end) - - local itemPreview = Instance.new("ImageLabel") - itemPreview.Name = "ItemPreview" - itemPreview.BackgroundColor3 = Color3.new(32/255,32/255,32/255) - itemPreview.BorderColor3 = Color3.new(141/255,141/255,141/255) - itemPreview.Position = UDim2.new(0,30,0,20) - itemPreview.Size = UDim2.new(0,180,0,180) - itemPreview.ZIndex = 2 - itemPreview.Parent = bodyFrame - - local itemDescription = createTextObject("ItemDescription", "Would you like to buy the 'itemName' for currencyType currencyAmount?","TextLabel",Enum.FontSize.Size24) - itemDescription.Position = UDim2.new(1,20,0,0) - itemDescription.Size = UDim2.new(0,410,1,0) - itemDescription.Parent = itemPreview - - local afterBalanceButton = createTextObject("AfterBalanceButton","Place holder text ip sum lorem dodo ashs","TextButton",Enum.FontSize.Size24) - afterBalanceButton.AutoButtonColor = false - afterBalanceButton.Position = UDim2.new(0,5,1,-55) - afterBalanceButton.Size = UDim2.new(1,-10,0,50) - afterBalanceButton.Parent = bodyFrame - - local purchasingFrame = Instance.new("Frame") - purchasingFrame.Name = "PurchasingFrame" - purchasingFrame.Size = UDim2.new(1,0,1,0) - purchasingFrame.BackgroundColor3 = Color3.new(0,0,0) - purchasingFrame.BackgroundTransparency = 0.2 - purchasingFrame.BorderSizePixel = 0 - purchasingFrame.ZIndex = 9 - purchasingFrame.Visible = false - purchasingFrame.Active = true - purchasingFrame.Parent = purchaseDialog - - local purchasingLabel = createTextObject("PurchasingLabel","Purchasing...","TextLabel",Enum.FontSize.Size48) - purchasingLabel.Size = UDim2.new(1,0,1,0) - purchasingLabel.ZIndex = 10 - purchasingLabel.Parent = purchasingFrame - - createSpinner(UDim2.new(0,50,0,50), UDim2.new(0.5,-25,0.5,30), purchasingLabel) -end - --- next two functions control the "Purchasing..." overlay -function showPurchasing() - startSpinner() - purchaseDialog.PurchasingFrame.Visible = true -end - -function hidePurchasing() - purchaseDialog.PurchasingFrame.Visible = false - stopSpinner() -end - --- next 2 functions are convenienvce creation functions for guis -function createTextObject(name, text, type, size) - local textLabel = Instance.new(type) - textLabel.Font = Enum.Font.ArialBold - textLabel.TextColor3 = Color3.new(217/255, 217/255, 217/255) - textLabel.TextWrapped = true - textLabel.Name = name - textLabel.Text = text - textLabel.BackgroundTransparency = 1 - textLabel.BorderSizePixel = 0 - textLabel.FontSize = size - - return textLabel -end - -function createImageButton(name) - local imageButton = Instance.new("ImageButton") - imageButton.Size = UDim2.new(0,153,0,46) - imageButton.Name = name - return imageButton -end - -function setHeaderText(text) - purchaseDialog.TitleLabel.Text = text - purchaseDialog.TitleBackdrop.Text = text -end - -function cutSizeInHalfRecursive(instance) - -- todo: change the gui size based on how much space we have - --[[changeSize(instance,0.5) - - local children = instance:GetChildren() - for i = 1, #children do - cutSizeInHalfRecursive(children[i]) - end]] -end - -function doubleSizeRecursive(instance) - -- todo: change the gui size based on how much space we have - --[[changeSize(instance,2) - - local children = instance:GetChildren() - for i = 1, #children do - doubleSizeRecursive(children[i]) - end]] -end - -function modifyForSmallScreen() - cutSizeInHalfRecursive(purchaseDialog) -end - -function modifyForLargeScreen() - doubleSizeRecursive(purchaseDialog) -end - --- depending on screen size, we need to change the gui -function changeGuiToScreenSize(smallScreen) - if smallScreen then - modifyForSmallScreen() - else - modifyForLargeScreen() - end -end ----------------------------------------------- End Gui Functions ---------------------------------------------- - - ----------------------------------------------- Script Event start/initialization ---------------------------------------------- -preloadAssets() - -game:GetService("MarketplaceService").PromptPurchaseRequested:connect(function(player, assetId, equipIfPurchased, currencyType) - if not purchaseDialog then - createPurchasePromptGui() - end - - if player == game.Players.LocalPlayer then - if currentlyPrompting then return end - - currentlyPrompting = true - currentAssetId = assetId - currentCurrencyType = currencyType - currentEquipOnPurchase = equipIfPurchased - - showPurchasePrompt() - end -end) - -game.CoreGui.RobloxGui.Changed:connect(function() - local nowIsSmallScreen = (game.CoreGui.RobloxGui.AbsoluteSize.Y <= smallScreenThreshold) - if nowIsSmallScreen and not isSmallScreen then - changeGuiToScreenSize(true) - elseif not nowIsSmallScreen and isSmallScreen then - changeGuiToScreenSize(false) - end - - isSmallScreen = nowIsSmallScreen -end) - -isSmallScreen = (game.CoreGui.RobloxGui.AbsoluteSize.Y <= smallScreenThreshold) -if isSmallScreen then - changeGuiToScreenSize(true) -end diff --git a/maintenance/asset/100 b/maintenance/asset/100 deleted file mode 100644 index 68de7c3..0000000 --- a/maintenance/asset/100 +++ /dev/null @@ -1,2751 +0,0 @@ - - null - nil - - - true - true - - 0.0299999993 - 0 - 0 - 0.217036352 - 0 - 0.976163507 - 0 - 1 - -0 - -0.976163507 - 0 - 0.217036352 - - BloxyCola - http://www.jarfeh.xyz/asset/?id=10472127 - - - - - false - -0.5 - 0.5 - 0 - 0 - -0.5 - 0.5 - 0 - 0 - 1002 - - 17.9107418 - 3.7941227 - -18.4676247 - -0.11355377 - 0.000259967375 - -0.993531823 - 0.00077729387 - 0.999999702 - 0.000172820466 - 0.993531585 - -0.000752641819 - -0.113553926 - - false - 0.5 - 0.300000012 - -0.5 - 0.5 - 0 - 0 - -0.5 - 0.5 - 0 - 0 - true - 256 - Handle - 0 - -0.5 - 0.5 - 0 - 0 - - 0 - 0 - 0 - - -0.5 - 0.5 - 0 - 0 - 0 - - 0 - 0 - 0 - - 2 - 1 - - 1 - 1.20000005 - 1 - - - - - 2 - 2 - http://www.jarfeh.xyz/asset/?id=10470609 - 5 - Mesh - - 0 - 0 - 0 - - - 1.20000005 - 1.20000005 - 1.20000005 - - http://www.jarfeh.xyz/asset/?id=10470600 - - 1 - 1 - 1 - - - - - - - -4.71828389e-006 - -1.06949216e-007 - 6.73912837e-008 - -1.96380037e-010 - -7.15101578e-006 - 1 - -3.45956111e-011 - 1 - 9.53468771e-006 - -1 - 4.01852024e-011 - -2.64911593e-010 - - - -4.71828389e-006 - -1.06949216e-007 - 6.73912837e-008 - -1.96380037e-010 - -7.15101578e-006 - 1 - -3.45956111e-011 - 1 - 9.53468771e-006 - -1 - 4.01852024e-011 - -2.64911593e-010 - - Weld - null - null - - - - - - -1.34138972e-007 - -6.91051537e-006 - 0 - -3.91537502e-021 - 0.999999106 - -0.00133771845 - 2.81109586e-022 - 0.00133771845 - 0.999999106 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - -1.34138972e-007 - -6.91051537e-006 - 0 - -3.91537502e-021 - 0.999999106 - -0.00133771845 - 2.81109586e-022 - 0.00133771845 - 0.999999106 - 1 - 3.91499535e-021 - -2.86346992e-022 - - Weld - null - null - - - - - - 3.64912034e-006 - -1.13236744e-007 - -2.01656292e-008 - -7.08486672e-011 - 0.000798657886 - -0.999999702 - 1.55140234e-010 - 0.999999702 - 0.000793890678 - 1 - 1.55083765e-010 - 7.09721865e-011 - - - 3.64912034e-006 - -1.13236744e-007 - -2.01656292e-008 - -7.08486672e-011 - 0.000798657886 - -0.999999702 - 1.55140234e-010 - 0.999999702 - 0.000793890678 - 1 - 1.55083765e-010 - 7.09721865e-011 - - Weld - null - null - - - - - - 1.6321755e-007 - 3.49538391e-006 - 0 - -3.9252309e-021 - 0.996502578 - -0.0835621059 - -4.1799742e-023 - 0.0835621059 - 0.996502578 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - 1.6321755e-007 - 3.49538391e-006 - 0 - -3.9252309e-021 - 0.996502578 - -0.0835621059 - -4.1799742e-023 - 0.0835621059 - 0.996502578 - 1 - 3.91499535e-021 - -2.86346992e-022 - - Weld - null - null - - - - - - 5.25072437e-006 - -9.04979558e-008 - -6.02840373e-008 - -2.12544884e-010 - 0.000803425093 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789123471 - 1 - 4.6525081e-010 - 2.12915421e-010 - - - 5.25072437e-006 - -9.04979558e-008 - -6.02840373e-008 - -2.12544884e-010 - 0.000803425093 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789123471 - 1 - 4.6525081e-010 - 2.12915421e-010 - - Weld - null - null - - - - - - 5.25072437e-006 - -9.04979558e-008 - -6.02840373e-008 - -2.12544884e-010 - 0.000803425093 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789123471 - 1 - 4.6525081e-010 - 2.12915421e-010 - - - 0.533214211 - 4.09488493e-005 - -0.399536163 - -6.19143847e-010 - 0.000817726948 - -0.999999702 - 8.15887191e-010 - 0.999999702 - 0.000791507307 - 1 - 8.10171485e-010 - 1.58504349e-010 - - Weld - null - null - - - - - - 5.25072437e-006 - -9.04979558e-008 - -6.02840373e-008 - -2.12544884e-010 - 0.000803425093 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789123471 - 1 - 4.6525081e-010 - 2.12915421e-010 - - - -1.12273511e-007 - 2.60849974e-005 - -0.533189535 - 1 - 8.50161941e-010 - 3.96162853e-010 - 8.3357371e-010 - 0.999999702 - 0.000782926101 - 3.96190469e-010 - -0.000809622463 - 0.999999702 - - Weld - null - null - - - - - - 5.25072437e-006 - -9.04979558e-008 - -6.02840373e-008 - -2.12544884e-010 - 0.000803425093 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789123471 - 1 - 4.6525081e-010 - 2.12915421e-010 - - - 0.533214211 - 0.373362005 - -4.18045545e-008 - -6.20301976e-010 - 0.000817726948 - -0.999999702 - 8.56068161e-010 - 0.999999702 - 0.000791507307 - 1 - 8.50351511e-010 - 1.59694272e-010 - - Weld - null - null - - - - - - 5.25072437e-006 - -9.04979558e-008 - -6.02840373e-008 - -2.12544884e-010 - 0.000803425093 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789123471 - 1 - 4.6525081e-010 - 2.12915421e-010 - - - -5.43287024e-006 - 0.132771105 - 0.400390655 - 8.48401349e-010 - 0.999999702 - 0.000774821616 - -6.20273943e-010 - 0.000801041257 - -0.999999702 - -1 - -8.37917902e-010 - -1.59147528e-010 - - Weld - null - null - - - - - - 5.25072437e-006 - -9.04979558e-008 - -6.02840373e-008 - -2.12544884e-010 - 0.000803425093 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789123471 - 1 - 4.6525081e-010 - 2.12915421e-010 - - - -2.92850495e-006 - -0.400390595 - -0.132823572 - 8.56068161e-010 - 0.999999702 - 0.000791507307 - -1 - -8.50351511e-010 - -1.59694272e-010 - 6.20301976e-010 - -0.000817726948 - 0.999999702 - - Weld - null - null - - - - - - 5.25072437e-006 - -9.04979558e-008 - -6.02840373e-008 - -2.12544884e-010 - 0.000803425093 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789123471 - 1 - 4.6525081e-010 - 2.12915421e-010 - - - 1.20404536e-007 - 1.7940567e-005 - 0.132805407 - -1 - -8.50140069e-010 - -4.23447666e-010 - 8.50476911e-010 - 0.999999702 - 0.000781972543 - -4.22769625e-010 - 0.000810576021 - -0.999999702 - - Weld - null - null - - - - - - 5.25072437e-006 - -9.04979558e-008 - -6.02840373e-008 - -2.12544884e-010 - 0.000803425093 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789123471 - 1 - 4.6525081e-010 - 2.12915421e-010 - - - 5.96581813e-005 - -0.400390744 - 0.9335953 - 8.14806722e-010 - 0.999999702 - 0.000780701288 - 1 - 8.50112314e-010 - 4.58008492e-010 - -4.58215271e-010 - 0.000811847276 - -0.999999702 - - Weld - null - null - - - - - - 5.25072437e-006 - -9.04979558e-008 - -6.02840373e-008 - -2.12544884e-010 - 0.000803425093 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789123471 - 1 - 4.6525081e-010 - 2.12915421e-010 - - - 2.33017072e-005 - -0.933604836 - 0.400390595 - 8.35977676e-010 - 0.999999702 - 0.000791507307 - 6.19722884e-010 - -0.000817726948 - 0.999999702 - 1 - 8.30261526e-010 - 1.59099317e-010 - - Weld - null - null - - - - - - 5.25072437e-006 - -9.04979558e-008 - -6.02840373e-008 - -2.12544884e-010 - 0.000803425093 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789123471 - 1 - 4.6525081e-010 - 2.12915421e-010 - - - -1.52226988e-007 - -0.373301029 - -0.533214867 - 1 - 7.91847865e-010 - 5.28903865e-010 - 9.18089604e-010 - 0.999999702 - 0.000778158777 - 2.51818288e-010 - -0.000804378418 - 0.999999702 - - Weld - null - null - - - - - - 5.25072437e-006 - -9.04979558e-008 - -6.02840373e-008 - -2.12544884e-010 - 0.000803425093 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789123471 - 1 - 4.6525081e-010 - 2.12915421e-010 - - - -0.533214211 - 4.09488493e-005 - -0.400390595 - 6.19143847e-010 - -0.000817726948 - 0.999999702 - 8.15887191e-010 - 0.999999702 - 0.000791507307 - -1 - -8.10171485e-010 - -1.58504349e-010 - - Weld - null - null - - - - - - 5.25072437e-006 - -9.04979558e-008 - -6.02840373e-008 - -2.12544884e-010 - 0.000803425093 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789123471 - 1 - 4.6525081e-010 - 2.12915421e-010 - - - 3.85732619e-008 - 1.708794e-006 - -0.933600962 - 1 - 2.30016242e-010 - -1.24190033e-010 - 2.3550692e-010 - 0.999999702 - 0.000801041722 - 3.36916911e-010 - -0.000808192533 - 0.999999702 - - Weld - null - null - - - - - - 4.58660736e-007 - -1.05566846e-006 - 0 - -3.88906235e-021 - 0.997999787 - 0.0632176325 - 5.33270982e-022 - -0.0632176325 - 0.997999787 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - 4.58660736e-007 - -1.05566846e-006 - 0 - -3.88906235e-021 - 0.997999787 - 0.0632176325 - 5.33270982e-022 - -0.0632176325 - 0.997999787 - 1 - 3.91499535e-021 - -2.86346992e-022 - - Weld - null - null - - - - - - 4.58660736e-007 - -1.05566846e-006 - 0 - -3.88906235e-021 - 0.997999787 - 0.0632176325 - 5.33270982e-022 - -0.0632176325 - 0.997999787 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - 0.533207953 - 4.02465412e-005 - -0.399536252 - -4.0660561e-010 - 0.997998893 - 0.0632319078 - 3.50466517e-010 - -0.0632200092 - 0.997999609 - 1 - 3.27715632e-011 - 3.47643969e-010 - - Weld - null - null - - - - - - 4.58660736e-007 - -1.05566846e-006 - 0 - -3.88906235e-021 - 0.997999787 - 0.0632176325 - 5.33270982e-022 - -0.0632176325 - 0.997999787 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - -3.86806875e-007 - 4.67300815e-005 - -0.533184648 - 1 - -6.89996116e-010 - 1.27482458e-009 - 1.29899103e-009 - -0.0631971732 - 0.998001099 - 6.08729123e-010 - -0.997998476 - -0.0632380918 - - Weld - null - null - - - - - - 4.58660736e-007 - -1.05566846e-006 - 0 - -3.88906235e-021 - 0.997999787 - 0.0632176325 - 5.33270982e-022 - -0.0632176325 - 0.997999787 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - 0.533224404 - 0.373393357 - -3.90072529e-007 - -8.32836911e-010 - 0.997998118 - 0.0632461831 - 1.32148736e-009 - -0.0632057413 - 0.998000562 - 1 - -4.5400067e-010 - 1.28977651e-009 - - Weld - null - null - - - - - - 4.58660736e-007 - -1.05566846e-006 - 0 - -3.88906235e-021 - 0.997999787 - 0.0632176325 - 5.33270982e-022 - -0.0632176325 - 0.997999787 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - -1.24499784e-005 - 0.132795051 - 0.400390744 - 3.829842e-010 - -0.0632033572 - 0.998000681 - -4.07727963e-010 - 0.997999966 - 0.0632152557 - -1 - -3.03974276e-011 - -3.75296128e-010 - - Weld - null - null - - - - - - 4.58660736e-007 - -1.05566846e-006 - 0 - -3.88906235e-021 - 0.997999787 - 0.0632176325 - 5.33270982e-022 - -0.0632176325 - 0.997999787 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - 9.7206248e-006 - -0.400390506 - -0.132816374 - 3.90647487e-010 - -0.0632200092 - 0.997999609 - -1 - -2.90755128e-011 - -3.87671339e-010 - 4.07763739e-010 - -0.997998893 - -0.0632319078 - - Weld - null - null - - - - - - 4.58660736e-007 - -1.05566846e-006 - 0 - -3.88906235e-021 - 0.997999787 - 0.0632176325 - 5.33270982e-022 - -0.0632176325 - 0.997999787 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - 1.12741731e-007 - 1.47659775e-005 - 0.132799253 - -1 - 2.34150421e-010 - -3.70997927e-010 - 3.85058263e-010 - -0.0632104948 - 0.998000264 - -2.10228071e-010 - 0.99799931 - 0.0632247701 - - Weld - null - null - - - - - - 4.58660736e-007 - -1.05566846e-006 - 0 - -3.88906235e-021 - 0.997999787 - 0.0632176325 - 5.33270982e-022 - -0.0632176325 - 0.997999787 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - 3.39694889e-005 - -0.400390744 - 0.933587611 - 3.49388324e-010 - -0.0632092282 - 0.998000324 - 1 - -2.68642109e-010 - 3.68813091e-010 - -2.45674314e-010 - 0.997999251 - 0.0632260367 - - Weld - null - null - - - - - - 4.58660736e-007 - -1.05566846e-006 - 0 - -3.88906235e-021 - 0.997999787 - 0.0632176325 - 5.33270982e-022 - -0.0632176325 - 0.997999787 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - 9.72479302e-006 - -0.933596671 - 0.400390506 - 3.70557002e-010 - -0.0632200092 - 0.997999609 - 4.07184675e-010 - -0.997998893 - -0.0632319078 - 1 - 3.09235346e-011 - 3.67657654e-010 - - Weld - null - null - - - - - - 4.58660736e-007 - -1.05566846e-006 - 0 - -3.88906235e-021 - 0.997999787 - 0.0632176325 - 5.33270982e-022 - -0.0632176325 - 0.997999787 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - -9.38037488e-008 - -0.37332812 - -0.533202708 - 1 - -3.35761835e-010 - 3.06237286e-010 - 4.52671733e-010 - -0.0632066876 - 0.998000503 - 3.92738446e-011 - -0.997999728 - -0.0632185861 - - Weld - null - null - - - - - - 4.58660736e-007 - -1.05566846e-006 - 0 - -3.88906235e-021 - 0.997999787 - 0.0632176325 - 5.33270982e-022 - -0.0632176325 - 0.997999787 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - -0.533207953 - 4.02465412e-005 - -0.400390506 - 4.0660561e-010 - -0.997998893 - -0.0632319078 - 3.50466517e-010 - -0.0632200092 - 0.997999609 - -1 - -3.27715632e-011 - -3.47643969e-010 - - Weld - null - null - - - - - - 4.58660736e-007 - -1.05566846e-006 - 0 - -3.88906235e-021 - 0.997999787 - 0.0632176325 - 5.33270982e-022 - -0.0632176325 - 0.997999787 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - -7.07679817e-008 - 2.65414451e-006 - -0.933581531 - 1 - 1.09589553e-010 - 2.37319969e-010 - 2.3550692e-010 - -0.0632223934 - 0.997999489 - 3.36916911e-010 - -0.997999012 - -0.0632295236 - - Weld - null - null - - - - - - 5.53692553e-006 - 2.04514564e-007 - -6.04753154e-008 - -2.12544884e-010 - 0.00080342195 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789126614 - 1 - 4.6525081e-010 - 2.12915435e-010 - - - 5.53692553e-006 - 2.04514564e-007 - -6.04753154e-008 - -2.12544884e-010 - 0.00080342195 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789126614 - 1 - 4.6525081e-010 - 2.12915435e-010 - - Weld - null - null - - - - - - 5.53692553e-006 - 2.04514564e-007 - -6.04753154e-008 - -2.12544884e-010 - 0.00080342195 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789126614 - 1 - 4.6525081e-010 - 2.12915435e-010 - - - 0.533212543 - 4.33809255e-005 - -0.399536133 - -4.77452022e-010 - 0.000812952989 - -0.999999702 - 5.0560689e-010 - 0.999999702 - 0.000796274282 - 1 - 5.00004205e-010 - 1.65627564e-011 - - Weld - null - null - - - - - - 5.53692553e-006 - 2.04514564e-007 - -6.04753154e-008 - -2.12544884e-010 - 0.00080342195 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789126614 - 1 - 4.6525081e-010 - 2.12915435e-010 - - - -2.3357552e-007 - 5.55160077e-005 - -0.533165157 - 1 - 1.7806564e-009 - 8.21978263e-010 - 1.76440684e-009 - 0.999999702 - 0.000768627622 - 8.21264445e-010 - -0.000823920942 - 0.999999702 - - Weld - null - null - - - - - - 5.53692553e-006 - 2.04514564e-007 - -6.04753154e-008 - -2.12544884e-010 - 0.00080342195 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789126614 - 1 - 4.6525081e-010 - 2.12915435e-010 - - - 0.533225417 - 0.37339133 - -1.62893741e-007 - -1.04536846e-009 - 0.000832025486 - -0.999999821 - 1.78690496e-009 - 0.999999702 - 0.000777208828 - 1 - 1.78084936e-009 - 5.85509641e-010 - - Weld - null - null - - - - - - 5.53692553e-006 - 2.04514564e-007 - -6.04753154e-008 - -2.12544884e-010 - 0.00080342195 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789126614 - 1 - 4.6525081e-010 - 2.12915435e-010 - - - -4.40306758e-006 - 0.132771388 - 0.400390655 - 8.48401349e-010 - 0.999999702 - 0.000774823886 - -6.20273943e-010 - 0.000801038579 - -0.999999702 - -1 - -8.37917902e-010 - -1.59147542e-010 - - Weld - null - null - - - - - - 5.53692553e-006 - 2.04514564e-007 - -6.04753154e-008 - -2.12544884e-010 - 0.00080342195 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789126614 - 1 - 4.6525081e-010 - 2.12915435e-010 - - - 1.28626851e-007 - -0.400390595 - -0.13282387 - 8.56068161e-010 - 0.999999702 - 0.000791509985 - -1 - -8.50351511e-010 - -1.59694299e-010 - 6.20301976e-010 - -0.000817724678 - 0.999999702 - - Weld - null - null - - - - - - 5.53692553e-006 - 2.04514564e-007 - -6.04753154e-008 - -2.12544884e-010 - 0.00080342195 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789126614 - 1 - 4.6525081e-010 - 2.12915435e-010 - - - 1.20785018e-007 - 3.03727884e-005 - 0.132775158 - -1 - -8.50140069e-010 - -4.23447694e-010 - 8.50476911e-010 - 0.999999702 - 0.000781978946 - -4.22769625e-010 - 0.000810569618 - -0.999999702 - - Weld - null - null - - - - - - 5.53692553e-006 - 2.04514564e-007 - -6.04753154e-008 - -2.12544884e-010 - 0.00080342195 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789126614 - 1 - 4.6525081e-010 - 2.12915435e-010 - - - 6.63429382e-005 - -0.400390744 - 0.933595598 - 8.14806722e-010 - 0.999999702 - 0.000780706818 - 1 - 8.50112369e-010 - 4.58008492e-010 - -4.58215271e-010 - 0.000811841746 - -0.999999702 - - Weld - null - null - - - - - - 5.53692553e-006 - 2.04514564e-007 - -6.04753154e-008 - -2.12544884e-010 - 0.00080342195 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789126614 - 1 - 4.6525081e-010 - 2.12915435e-010 - - - 2.15904674e-005 - -0.933605134 - 0.400390595 - 8.35977676e-010 - 0.999999702 - 0.000791509985 - 6.19722884e-010 - -0.000817724678 - 0.999999702 - 1 - 8.30261526e-010 - 1.59099331e-010 - - Weld - null - null - - - - - - 5.53692553e-006 - 2.04514564e-007 - -6.04753154e-008 - -2.12544884e-010 - 0.00080342195 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789126614 - 1 - 4.6525081e-010 - 2.12915435e-010 - - - -1.52702455e-007 - -0.373297483 - -0.533215165 - 1 - 7.91847865e-010 - 5.28903921e-010 - 9.18089604e-010 - 0.999999702 - 0.000778160116 - 2.51818288e-010 - -0.000804377254 - 0.999999702 - - Weld - null - null - - - - - - 5.53692553e-006 - 2.04514564e-007 - -6.04753154e-008 - -2.12544884e-010 - 0.00080342195 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789126614 - 1 - 4.6525081e-010 - 2.12915435e-010 - - - -0.533214509 - 4.16217954e-005 - -0.400390595 - 6.19143847e-010 - -0.000817724678 - 0.999999702 - 8.15887191e-010 - 0.999999702 - 0.000791509985 - -1 - -8.10171485e-010 - -1.58504362e-010 - - Weld - null - null - - - - - - 5.53692553e-006 - 2.04514564e-007 - -6.04753154e-008 - -2.12544884e-010 - 0.00080342195 - -0.999999702 - 4.65420175e-010 - 0.999999702 - 0.000789126614 - 1 - 4.6525081e-010 - 2.12915435e-010 - - - 3.86851866e-008 - 1.33582325e-005 - -0.93360126 - 1 - 2.30016242e-010 - -1.24190033e-010 - 2.3550692e-010 - 0.999999702 - 0.000801045971 - 3.36916911e-010 - -0.000808193639 - 0.999999702 - - Weld - null - null - - - - - - -3.95431243e-007 - 7.30769489e-006 - 0 - -3.92543285e-021 - 0.997566223 - -0.069725059 - 1.26768054e-023 - 0.069725059 - 0.997566223 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - -3.95431243e-007 - 7.30769489e-006 - 0 - -3.92543285e-021 - 0.997566223 - -0.069725059 - 1.26768054e-023 - 0.069725059 - 0.997566223 - 1 - 3.91499535e-021 - -2.86346992e-022 - - Weld - null - null - - - - - - -3.95431243e-007 - 7.30769489e-006 - 0 - -3.92543285e-021 - 0.997566223 - -0.069725059 - 1.26768054e-023 - 0.069725059 - 0.997566223 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - 0.533207655 - 4.00506069e-005 - -0.399536133 - -2.64911593e-010 - 0.997566879 - -0.069715552 - 4.01852024e-011 - 0.0697179288 - 0.9975667 - 1 - 1.98314268e-010 - 2.08188033e-011 - - Weld - null - null - - - - - - -3.95431243e-007 - 7.30769489e-006 - 0 - -3.92543285e-021 - 0.997566223 - -0.069725059 - 1.26768054e-023 - 0.069725059 - 0.997566223 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - -4.09776021e-007 - 5.64174661e-005 - -0.533183694 - 1 - -5.1479393e-010 - 1.35508649e-009 - 1.29899103e-009 - 0.0697455108 - 0.997564793 - 6.08729123e-010 - -0.997567654 - 0.0697046071 - - Weld - null - null - - - - - - -3.95431243e-007 - 7.30769489e-006 - 0 - -3.92543285e-021 - 0.997566223 - -0.069725059 - 1.26768054e-023 - 0.069725059 - 0.997566223 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - 0.53322345 - 0.373397857 - -4.03579065e-007 - -8.32836911e-010 - 0.997568309 - -0.0696965307 - 1.32148736e-009 - 0.0697369501 - 0.997565389 - 1 - -2.78900597e-010 - 1.33860167e-009 - - Weld - null - null - - - - - - -3.95431243e-007 - 7.30769489e-006 - 0 - -3.92543285e-021 - 0.997566223 - -0.069725059 - 1.26768054e-023 - 0.069725059 - 0.997566223 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - -9.81253652e-006 - 0.132794693 - 0.400390744 - 3.829842e-010 - 0.0697393268 - 0.99756521 - -4.07727963e-010 - 0.997566044 - -0.0697274357 - -1 - -7.99115982e-011 - -3.6794745e-010 - - Weld - null - null - - - - - - -3.95431243e-007 - 7.30769489e-006 - 0 - -3.92543285e-021 - 0.997566223 - -0.069725059 - 1.26768054e-023 - 0.069725059 - 0.997566223 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - 2.00291402e-006 - -0.400390506 - -0.132815465 - 3.90647487e-010 - 0.0697226822 - 0.997566402 - -1 - -8.02429304e-011 - -3.80388637e-010 - 4.07763739e-010 - -0.997567236 - 0.0697107911 - - Weld - null - null - - - - - - -3.95431243e-007 - 7.30769489e-006 - 0 - -3.92543285e-021 - 0.997566223 - -0.069725059 - 1.26768054e-023 - 0.069725059 - 0.997566223 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - 1.20755828e-007 - 4.99412226e-006 - 0.132797584 - -1 - 1.82868595e-010 - -3.98779315e-010 - 3.85058263e-010 - 0.0697321892 - 0.997565746 - -2.10228071e-010 - 0.9975667 - -0.0697179288 - - Weld - null - null - - - - - - -3.95431243e-007 - 7.30769489e-006 - 0 - -3.92543285e-021 - 0.997566223 - -0.069725059 - 1.26768054e-023 - 0.069725059 - 0.997566223 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - 4.74962835e-005 - -0.400390744 - 0.933588088 - 3.49388324e-010 - 0.0697334558 - 0.997565627 - 1 - -2.17345295e-010 - 4.0118911e-010 - -2.45674314e-010 - 0.997566819 - -0.0697166622 - - Weld - null - null - - - - - - -3.95431243e-007 - 7.30769489e-006 - 0 - -3.92543285e-021 - 0.997566223 - -0.069725059 - 1.26768054e-023 - 0.069725059 - 0.997566223 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - 2.00708268e-006 - -0.933598638 - 0.400390506 - 3.70557002e-010 - 0.0697226822 - 0.997566402 - 4.07184675e-010 - -0.997567236 - 0.0697107911 - 1 - 7.94198179e-011 - 3.60306673e-010 - - Weld - null - null - - - - - - -3.95431243e-007 - 7.30769489e-006 - 0 - -3.92543285e-021 - 0.997566223 - -0.069725059 - 1.26768054e-023 - 0.069725059 - 0.997566223 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - -1.0609989e-007 - -0.373298496 - -0.533198833 - 1 - -2.92172536e-010 - 3.48069656e-010 - 4.52671733e-010 - 0.0697359964 - 0.997565448 - 3.92738446e-011 - -0.997566283 - 0.0697241053 - - Weld - null - null - - - - - - -3.95431243e-007 - 7.30769489e-006 - 0 - -3.92543285e-021 - 0.997566223 - -0.069725059 - 1.26768054e-023 - 0.069725059 - 0.997566223 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - -0.533206105 - 3.25288311e-005 - -0.400390536 - 4.0660561e-010 - -0.997567236 - 0.0697107911 - 3.50466517e-010 - 0.0697226822 - 0.997566402 - -1 - -7.85967125e-011 - -3.4022471e-010 - - Weld - null - null - - - - - - -3.95431243e-007 - 7.30769489e-006 - 0 - -3.92543285e-021 - 0.997566223 - -0.069725059 - 1.26768054e-023 - 0.069725059 - 0.997566223 - 1 - 3.91499535e-021 - -2.86346992e-022 - - - -6.55530812e-008 - 2.72896377e-005 - -0.933581114 - 1 - 1.40101444e-010 - 2.20685789e-010 - 2.3550692e-010 - 0.0697202981 - 0.997566581 - 3.36916911e-010 - -0.997567058 - 0.0697131678 - - Weld - null - null - - - - - - 1.14122267e-005 - 2.31042439e-008 - -1.81467669e-007 - -6.37624675e-010 - 0.000817726715 - -0.999999702 - 1.396256e-009 - 0.999999702 - 0.000774821849 - 1 - 1.39574785e-009 - 6.38736286e-010 - - - 1.14122267e-005 - 2.31042439e-008 - -1.81467669e-007 - -6.37624675e-010 - 0.000817726715 - -0.999999702 - 1.396256e-009 - 0.999999702 - 0.000774821849 - 1 - 1.39574785e-009 - 6.38736286e-010 - - Weld - null - null - - - - - - 1.14122267e-005 - 2.31042439e-008 - -1.81467669e-007 - -6.37624675e-010 - 0.000817726715 - -0.999999702 - 1.396256e-009 - 0.999999702 - 0.000774821849 - 1 - 1.39574785e-009 - 6.38736286e-010 - - - 0.5332008 - 8.52442608e-005 - -0.399536431 - -1.4692636e-009 - 0.000846330251 - -0.999999821 - 2.67755484e-009 - 0.999999702 - 0.000762904063 - 1 - 2.67116107e-009 - 1.01012287e-009 - - Weld - null - null - - - - - - 1.14122267e-005 - 2.31042439e-008 - -1.81467669e-007 - -6.37624675e-010 - 0.000817726715 - -0.999999702 - 1.396256e-009 - 0.999999702 - 0.000774821849 - 1 - 1.39574785e-009 - 6.38736286e-010 - - - -3.54604822e-007 - 7.10747918e-005 - -0.533170998 - 1 - 2.71114486e-009 - 1.24778021e-009 - 2.69523404e-009 - 0.999999702 - 0.000754322857 - 1.24632515e-009 - -0.000838225707 - 0.999999702 - - Weld - null - null - - - - - - 1.14122267e-005 - 2.31042439e-008 - -1.81467669e-007 - -6.37624675e-010 - 0.000817726715 - -0.999999702 - 1.396256e-009 - 0.999999702 - 0.000774821849 - 1 - 1.39574785e-009 - 6.38736286e-010 - - - 0.533231318 - 0.373406291 - -2.83906502e-007 - -1.47042167e-009 - 0.000846330251 - -0.999999821 - 2.71773581e-009 - 0.999999702 - 0.000762904063 - 1 - 2.71134115e-009 - 1.0113117e-009 - - Weld - null - null - - - - - - 1.14122267e-005 - 2.31042439e-008 - -1.81467669e-007 - -6.37624675e-010 - 0.000817726715 - -0.999999702 - 1.396256e-009 - 0.999999702 - 0.000774821849 - 1 - 1.39574785e-009 - 6.38736286e-010 - - - 5.93345294e-006 - 0.132752568 - 0.400390923 - 2.71005463e-009 - 0.999999702 - 0.000746218371 - -1.47042467e-009 - 0.000829644501 - -0.999999702 - -1 - -2.69890754e-009 - -1.01076525e-009 - - Weld - null - null - - - - - - 1.14122267e-005 - 2.31042439e-008 - -1.81467669e-007 - -6.37624675e-010 - 0.000817726715 - -0.999999702 - 1.396256e-009 - 0.999999702 - 0.000774821849 - 1 - 1.39574785e-009 - 6.38736286e-010 - - - 8.4651374e-006 - -0.400390327 - -0.132810175 - 2.71773581e-009 - 0.999999702 - 0.000762904063 - -1 - -2.71134115e-009 - -1.0113117e-009 - 1.47042167e-009 - -0.000846330251 - 0.999999821 - - Weld - null - null - - - - - - 1.14122267e-005 - 2.31042439e-008 - -1.81467669e-007 - -6.37624675e-010 - 0.000817726715 - -0.999999702 - 1.396256e-009 - 0.999999702 - 0.000774821849 - 1 - 1.39574785e-009 - 6.38736286e-010 - - - 3.62762336e-007 - 2.95230384e-005 - 0.132817402 - -1 - -2.71112222e-009 - -1.27506505e-009 - 2.71213629e-009 - 0.999999702 - 0.000753369299 - -1.27290256e-009 - 0.000839179265 - -0.999999702 - - Weld - null - null - - - - - - 1.14122267e-005 - 2.31042439e-008 - -1.81467669e-007 - -6.37624675e-010 - 0.000817726715 - -0.999999702 - 1.396256e-009 - 0.999999702 - 0.000774821849 - 1 - 1.39574785e-009 - 6.38736286e-010 - - - 0.000142092002 - -0.400391012 - 0.93360728 - 2.67646505e-009 - 0.999999702 - 0.000752098043 - 1 - 2.71109335e-009 - 1.30962585e-009 - -1.30834588e-009 - 0.000840450521 - -0.999999702 - - Weld - null - null - - - - - - 1.14122267e-005 - 2.31042439e-008 - -1.81467669e-007 - -6.37624675e-010 - 0.000817726715 - -0.999999702 - 1.396256e-009 - 0.999999702 - 0.000774821849 - 1 - 1.39574785e-009 - 6.38736286e-010 - - - 0.000101452555 - -0.933591425 - 0.400390327 - 2.69764522e-009 - 0.999999702 - 0.000762904063 - 1.46984258e-009 - -0.000846330251 - 0.999999821 - 1 - 2.69125122e-009 - 1.01071729e-009 - - Weld - null - null - - - - - - 1.14122267e-005 - 2.31042439e-008 - -1.81467669e-007 - -6.37624675e-010 - 0.000817726715 - -0.999999702 - 1.396256e-009 - 0.999999702 - 0.000774821849 - 1 - 1.39574785e-009 - 6.38736286e-010 - - - -3.94687646e-007 - -0.373256177 - -0.533165812 - 1 - 2.65282685e-009 - 1.38052292e-009 - 2.77974577e-009 - 0.999999702 - 0.000749555533 - 1.10196274e-009 - -0.000832981663 - 0.999999702 - - Weld - null - null - - - - - - 1.14122267e-005 - 2.31042439e-008 - -1.81467669e-007 - -6.37624675e-010 - 0.000817726715 - -0.999999702 - 1.396256e-009 - 0.999999702 - 0.000774821849 - 1 - 1.39574785e-009 - 6.38736286e-010 - - - -0.5332008 - 8.52442608e-005 - -0.400390327 - 1.4692636e-009 - -0.000846330251 - 0.999999821 - 2.67755484e-009 - 0.999999702 - 0.000762904063 - -1 - -2.67116107e-009 - -1.01012287e-009 - - Weld - null - null - - - - - - 1.14122267e-005 - 2.31042439e-008 - -1.81467669e-007 - -6.37624675e-010 - 0.000817726715 - -0.999999702 - 1.396256e-009 - 0.999999702 - 0.000774821849 - 1 - 1.39574785e-009 - 6.38736286e-010 - - - -2.17958132e-008 - 2.16124681e-005 - -0.933588922 - 1 - 6.95267954e-010 - 8.87237436e-011 - 7.00928149e-010 - 0.999999702 - 0.000793890911 - 5.49456258e-010 - -0.000815343345 - 0.999999702 - - Weld - null - null - - - - - - 2.73681553e-006 - -7.9203943e-008 - -1.32984567e-007 - -1 - 4.29049651e-005 - 1.27289645e-009 - 4.29049651e-005 - 1 - -2.71216405e-009 - -1.27303168e-009 - -2.7121092e-009 - -1 - - - 2.73681553e-006 - -7.9203943e-008 - -1.32984567e-007 - -1 - 4.29049651e-005 - 1.27289645e-009 - 4.29049651e-005 - 1 - -2.71216405e-009 - -1.27303168e-009 - -2.7121092e-009 - -1 - - Weld - RBX1 - RBX1 - - - - - - 2.58500165e-007 - 1.47510104e-006 - 9.1201764e-007 - -0.0304826926 - -0.998224854 - 0.0511664115 - -0.997482359 - 0.027100971 - -0.0655324385 - 0.0640294328 - -0.0530351698 - -0.996537805 - - - 2.58500165e-007 - 1.47510104e-006 - 9.1201764e-007 - -0.0304826926 - -0.998224854 - 0.0511664115 - -0.997482359 - 0.027100971 - -0.0655324385 - 0.0640294328 - -0.0530351698 - -0.996537805 - - Weld - RBX1 - RBX1 - - - - - - 5.81937775e-006 - 3.66444342e-009 - 4.0117655e-007 - -1 - 1.83190277e-005 - 1.62574338e-007 - 1.82680233e-005 - 1 - -5.43802935e-006 - -1.05692934e-007 - -5.39845632e-006 - -1.00000012 - - - 5.81937775e-006 - 3.66444342e-009 - 4.0117655e-007 - -1 - 1.83190277e-005 - 1.62574338e-007 - 1.82680233e-005 - 1 - -5.43802935e-006 - -1.05692934e-007 - -5.39845632e-006 - -1.00000012 - - Weld - RBX1 - RBX1 - - - - - - 5.19993637e-006 - -2.07580495e-008 - -4.3925632e-009 - -0.99999994 - -7.85102384e-006 - 1.626222e-007 - -7.9020283e-006 - 1 - -7.75445642e-006 - -1.05581343e-007 - -7.71488703e-006 - -1.00000012 - - - 5.19993637e-006 - -2.07580495e-008 - -4.3925632e-009 - -0.99999994 - -7.85102384e-006 - 1.626222e-007 - -7.9020283e-006 - 1 - -7.75445642e-006 - -1.05581343e-007 - -7.71488703e-006 - -1.00000012 - - Weld - RBX1 - RBX1 - - - - - - -4.51719643e-007 - 1.87397453e-009 - -3.76758157e-006 - -0.999999821 - -3.77100787e-006 - -6.00899241e-009 - -3.82201188e-006 - 1 - -4.80523522e-006 - 6.30072776e-008 - -4.76566538e-006 - -1.00000012 - - - -4.51719643e-007 - 1.87397453e-009 - -3.76758157e-006 - -0.999999821 - -3.77100787e-006 - -6.00899241e-009 - -3.82201188e-006 - 1 - -4.80523522e-006 - 6.30072776e-008 - -4.76566538e-006 - -1.00000012 - - Weld - RBX1 - RBX1 - - - - - - 1.26816673e-007 - -2.34453221e-008 - 5.90223294e-007 - -0.999999762 - -1.85550198e-005 - -5.83594151e-009 - -1.86060279e-005 - 1 - -8.11173049e-006 - 6.29660306e-008 - -8.07215929e-006 - -1.00000012 - - - 1.26816673e-007 - -2.34453221e-008 - 5.90223294e-007 - -0.999999762 - -1.85550198e-005 - -5.83594151e-009 - -1.86060279e-005 - 1 - -8.11173049e-006 - 6.29660306e-008 - -8.07215929e-006 - -1.00000012 - - Weld - RBX1 - RBX1 - - - - - - 8.01678993e-007 - -1.1426212e-008 - -1.10775409e-006 - -0.999999702 - -1.59489209e-005 - -5.85270321e-009 - -1.5999929e-005 - 1 - -9.83655082e-006 - 6.29892654e-008 - -9.79697961e-006 - -1.00000012 - - - 8.01678993e-007 - -1.1426212e-008 - -1.10775409e-006 - -0.999999702 - -1.59489209e-005 - -5.85270321e-009 - -1.5999929e-005 - 1 - -9.83655082e-006 - 6.29892654e-008 - -9.79697961e-006 - -1.00000012 - - Weld - RBX1 - RBX1 - - - - - - 1.07855703e-006 - -1.98978043e-008 - -4.36352309e-007 - -0.999999642 - -1.87142232e-005 - -3.42939558e-007 - -1.87652277e-005 - 1 - -1.32089617e-005 - 4.00166499e-007 - -1.31693841e-005 - -1.00000012 - - - 1.07855703e-006 - -1.98978043e-008 - -4.36352309e-007 - -0.999999642 - -1.87142232e-005 - -3.42939558e-007 - -1.87652277e-005 - 1 - -1.32089617e-005 - 4.00166499e-007 - -1.31693841e-005 - -1.00000012 - - Weld - RBX1 - RBX1 - - - - - - -2.96131202e-006 - 1.15200116e-008 - -5.08313747e-008 - -0.999999583 - -2.1935306e-005 - -3.42888029e-007 - -2.19863105e-005 - 1 - -1.28208176e-005 - 4.00148849e-007 - -1.27812382e-005 - -1.00000012 - - - -2.96131202e-006 - 1.15200116e-008 - -5.08313747e-008 - -0.999999583 - -2.1935306e-005 - -3.42888029e-007 - -2.19863105e-005 - 1 - -1.28208176e-005 - 4.00148849e-007 - -1.27812382e-005 - -1.00000012 - - Weld - RBX1 - RBX1 - - - - - false - DrinkSound - 1 - false - http://www.jarfeh.xyz/asset/?id=10722059 - 0.5 - - - - - false - OpenSound - 1 - false - http://www.jarfeh.xyz/asset/?id=10721950 - 0.5 - - - - - - false - - Script - local Tool = script.Parent; - -enabled = true - - - - -function onActivated() - if not enabled then - return - end - - enabled = false - Tool.GripForward = Vector3.new(0,-.759,-.651) - Tool.GripPos = Vector3.new(1.5,-.5,.3) - Tool.GripRight = Vector3.new(1,0,0) - Tool.GripUp = Vector3.new(0,.651,-.759) - - - Tool.Handle.DrinkSound:Play() - - wait(3) - - local h = Tool.Parent:FindFirstChild("Humanoid") - if (h ~= nil) then - if (h.MaxHealth > h.Health + 5) then - h.Health = h.Health + 5 - else - h.Health = h.MaxHealth - end - end - - Tool.GripForward = Vector3.new(-.976,0,-0.217) - Tool.GripPos = Vector3.new(0.03,0,0) - Tool.GripRight = Vector3.new(.217,0,-.976) - Tool.GripUp = Vector3.new(0,1,0) - - enabled = true - -end - -function onEquipped() - Tool.Handle.OpenSound:play() -end - -script.Parent.Activated:connect(onActivated) -script.Parent.Equipped:connect(onEquipped) - - - - - \ No newline at end of file diff --git a/maintenance/asset/11 b/maintenance/asset/11 deleted file mode 100644 index 8fc5a3d..0000000 --- a/maintenance/asset/11 +++ /dev/null @@ -1,3013 +0,0 @@ -%11% ---new playerlist by Zach Lindblad (fusroblox) ---contact him for any revisions/issues --------------------- --- Super Util --------------------- - -----FORMER ADMINS----- --- SQL, Stick -- ----------------------- - -local ADMINS = -{ - Thomas = 1, - ARCHBLOX = 1, - Conkley = 1, - Penguin = 1, - BagOfDreams = 1, - templater = 1, - AliMine8555 = 1, - TersisWelvin = 1, - Mura = 1, - rec01n = 1, - sodium = 1, - cott = 1, - MORBLOX = 1, - zombieboy667 = 1, -} - -local Images = { - bottomDark = '94691904', - bottomLight = '94691940', - midDark = '94691980', - midLight = '94692025', - LargeDark = '96098866', - LargeLight = '96098920', - LargeHeader = '96097470', - NormalHeader = '94692054', - LargeBottom = '96397271', -- '96098152', - NormalBottom = '94754966', - DarkBluePopupMid = '97114905', - LightBluePopupMid = '97114905', - DarkPopupMid = '97112126', - LightPopupMid = '97109338', - DarkBluePopupTop = '97114838', - LightBluePopupTop = '', - DarkPopupTop = '', - LightPopupTop = '', - DarkBluePopupBottom = '97114758', - LightBluePopupBottom = '', - DarkPopupBottom = '100869219', - LightPopupBottom = '97109175', -} - - ---[[ - Generic object Create function, which I am using to create Gui's - Thanks to Stravant! ---]] -local Obj = {} -function Obj.Create(guiType) - return function(data) - local obj = Instance.new(guiType) - for k, v in pairs(data) do - if type(k) == 'number' then - v.Parent = obj - else - obj[k] = v - end - end - return obj - end -end - ---[[ - makes a full sized background for a guiobject - @Args: - imgName asset name of image to fill background - @Return: background gui object ---]] -function MakeBackgroundGuiObj(imgName) - return Obj.Create'ImageLabel' - { - Name = 'Background', - BackgroundTransparency = 1, - Image = imgName, - Position = UDim2.new(0, 0, 0, 0), - Size = UDim2.new(1,0,1,0), - } -end ---[[ turns 255 integer color value to a color3 --]] -function Color3I(r,g,b) - return Color3.new(r/255,g/255,b/255) -end - ---[[ - Gets correct icon for builder's club status to display by name - @Args: - membershipType Enum of membership status - @Return: string of image asset ---]] -function getMembershipTypeIcon(membershipType,playerName) - if ADMINS[playerName]~=nil then - if ADMINS[playerName] == 1 then - return "rbxasset://textures/ui/TinyAdminIcon.png" - else - return ADMINS[playerName] - end - elseif membershipType == Enum.MembershipType.None then - return "" - elseif membershipType == Enum.MembershipType.BuildersClub then - return "rbxasset://textures/ui/TinyBcIcon.png" - elseif membershipType == Enum.MembershipType.TurboBuildersClub then - return "rbxasset://textures/ui/TinyTbcIcon.png" - elseif membershipType == Enum.MembershipType.OutrageousBuildersClub then - return "rbxasset://textures/ui/TinyObcIcon.png" - else - error("Unknown membershipType" .. membershipType) - end -end - -local function getFriendStatusIcon(friendStatus) - if friendStatus == Enum.FriendStatus.Unknown or friendStatus == Enum.FriendStatus.NotFriend then - return "" - elseif friendStatus == Enum.FriendStatus.Friend then - return "http://www.jarfeh.xyz/asset/?id=99749771" - elseif friendStatus == Enum.FriendStatus.FriendRequestSent then - return "http://www.jarfeh.xyz/asset/?id=99776888" - elseif friendStatus == Enum.FriendStatus.FriendRequestReceived then - return "http://www.jarfeh.xyz/asset/?id=99776838" - else - error("Unknown FriendStatus: " .. friendStatus) - end -end - - ---[[ - Utility function to create buttons for the popup menus - @Args: - nparent what to parent this button to - ntext text to put on this button - index number index of this entry in menu - last is this the last element of the popup menu - @Return: a popup menu button ---]] -function MakePopupButton(nparent,ntext,index,last) - local tobj = Obj.Create"ImageButton" - { - Name = 'ReportButton', - BackgroundTransparency = 1, - Position = UDim2.new(0,0,1*index,0), - Size = UDim2.new(1, 0, 1, 0), - ZIndex=9, - Obj.Create'TextLabel' - { - Name = 'ButtonText', - BackgroundTransparency = 1, - Position = UDim2.new(.07, 0, .07, 0), - Size = UDim2.new(.86,0,.86,0), - Parent = HeaderFrame, - Font = 'ArialBold', - Text = ntext, - FontSize = 'Size14', - TextScaled = true, - TextColor3 = Color3.new(1,1,1), - TextStrokeTransparency = 1, - ZIndex=9, - }, - Parent = nparent, - } - if index==0 then - tobj.Image = 'http://www.jarfeh.xyz/asset/?id=97108784' - elseif last then - if index%2==1 then - tobj.Image = 'http://www.jarfeh.xyz/asset/?id='.. Images['LightPopupBottom'] - else - tobj.Image = 'http://www.jarfeh.xyz/asset/?id='.. Images['DarkPopupBottom'] - end - else - if index%2==1 then - tobj.Image = 'http://www.jarfeh.xyz/asset/?id=97112126' - else - tobj.Image = 'http://www.jarfeh.xyz/asset/?id=97109338' - end - end - return tobj -end - - ---[[ - obligatory wait for child function - @Args: - parent Parent object to look for child in - child name of child object to look for - @Return: object waited for ---]] -function WaitForChild(parent,child) - while not parent:FindFirstChild(child) do - wait() debugprint(" child "..parent.Name.." waiting for "..child) - end - return parent[child] -end - - --------------------------- - -- Workspace Objects - --------------------------- - --- might want to move all this to an init function, wait for localplayer elsewhere -local Players = game:GetService('Players') --- make sure this doesn't run on the server(it will if you dont do this) -while not Players.LocalPlayer do - Players.Changed:wait() -end - -local LocalPlayer = Players.LocalPlayer -local Mouse = LocalPlayer:GetMouse() - -local ScreenGui = Obj.Create"Frame" -{ - Name = 'PlayerListScreen', - Size = UDim2.new(1, 0, 1, 0), - BackgroundTransparency = 1, - Parent = script.Parent -- LocalPlayer.PlayerGui -- use for switching into playergui mode -} -local MainFrame = Obj.Create"Frame" -{ - Name = 'LeaderBoardFrame', - Position = UDim2.new(1, -150, 0.005, 0), - Size = UDim2.new(0, 150, 0, 800), - BackgroundTransparency = 1, - Parent = ScreenGui, -} - ---frame used for expanding leaderstats when frame is 'focused' -local FocusFrame = Obj.Create"Frame" -{ - Name = 'FocusFrame', - Position = UDim2.new(0, 0, 0, 0), - Size = UDim2.new(1, 0, 0, 100), - BackgroundTransparency = 1, - Active = true, - Parent = MainFrame, -} - -local TemplateFrameYSize = 0.670000017 - - -- HEADER -local HeaderFrame = Obj.Create"Frame" -{ - Name = 'Header', - BackgroundTransparency = 1, - Position = UDim2.new(0,0,0,0), - Size = UDim2.new(1, 0, .07, 0), - Parent = MainFrame, - MakeBackgroundGuiObj('http://www.jarfeh.xyz/asset/?id=94692054'), -} - local HeaderFrameHeight = HeaderFrame.Size.Y.Scale - local MaximizeButton = Obj.Create"ImageButton" - { - Name = 'MaximizeButton', - Active = true, - BackgroundTransparency = 1, - Position = UDim2.new(0, 0, 0, 0), - Size = UDim2.new(1,0,1,0), - Parent = HeaderFrame, - } - local HeaderName = Obj.Create"TextLabel" - { - Name = 'PlayerName', - BackgroundTransparency = 1, - Position = UDim2.new(0, 0, .01, 0), - Size = UDim2.new(.98,0,.38,0), - Parent = HeaderFrame, - Font = 'ArialBold', - Text = LocalPlayer.Name, - FontSize='Size24', - --TextScaled = true, - TextColor3 = Color3.new(1,1,1), - TextStrokeColor3 = Color3.new(0,0,0), - TextStrokeTransparency = 0, - TextXAlignment = 'Right', - TextYAlignment = 'Center', - } - local HeaderScore = Obj.Create"TextLabel" - { - Name = 'PlayerScore', - BackgroundTransparency = 1, - Position = UDim2.new(0, 0, .4, 0), - Size = UDim2.new(.98,0,0,30), - Parent = HeaderFrame, - Font = 'ArialBold', - Text = '', - FontSize='Size24', - TextYAlignment = 'Top', - --TextScaled = true, - TextColor3 = Color3.new(1,1,1), - TextStrokeTransparency = 1, - TextXAlignment = 'Right', - TextYAlignment = 'Top', - } - -- BOTTOM - --used for shifting bottom frame for mouse over effects -local BottomShiftFrame = Obj.Create"Frame" -{ - Name= 'BottomShiftFrame', - BackgroundTransparency = 1, - Position = UDim2.new(0,0,HeaderFrameHeight,0), - Size = UDim2.new(1,0,1,0), - Parent=MainFrame, -} - local BottomFrame = Obj.Create"Frame" - { - Name = 'Bottom', - BackgroundTransparency = 1, - Position = UDim2.new(0,0,.07,0), - Size = UDim2.new(1, 0, .03, 0), - Parent = BottomShiftFrame, - MakeBackgroundGuiObj('http://www.jarfeh.xyz/asset/?id=94754966'), - } - local ExtendButton = Obj.Create"ImageButton" - { - Name = 'bigbutton', - Active = true, - BackgroundTransparency = 1, - Position = UDim2.new(0, 0, 0, 0), - Size = UDim2.new(1,0,1.5,0), - ZIndex = 3, - Parent = BottomFrame, - } - local ExtendTab = Obj.Create"ImageButton" - { - Name = 'extendTab', - Active = true, - BackgroundTransparency = 1, - Image = 'http://www.jarfeh.xyz/asset/?id=94692731', - Position = UDim2.new(.608, 0, .3, 0), - Size = UDim2.new(.3,0,.7,0), - Parent = BottomFrame, - } -local TopClipFrame = Obj.Create"Frame" -{ - Name = 'ListFrame', - BackgroundTransparency = 1, - Position = UDim2.new(-1,0,.07,0), - Size = UDim2.new(2, 0, 1, 0), - Parent = MainFrame, - ClipsDescendants = true, -} - local BottomClipFrame = Obj.Create"Frame" - { - Name = 'BottomFrame', - BackgroundTransparency = 1, - Position = UDim2.new(0,0, - .8,0), - Size = UDim2.new(1, 0, 1, 0), - Parent = TopClipFrame, - ClipsDescendants = true, - } - local ScrollBarFrame = Obj.Create"Frame" - { - Name = 'ScrollBarFrame', - BackgroundTransparency = 1, - Position = UDim2.new(.987,0,.8,0), - Size = UDim2.new(.01, 0, .2, 0), - Parent = BottomClipFrame, - } - local ScrollBar = Obj.Create"Frame" - { - Name = 'ScrollBar', - BackgroundTransparency = 0, - BackgroundColor3 = Color3.new(.2,.2,.2), - Position = UDim2.new(0,0,0,0), - Size = UDim2.new(1, 0, .5, 0), - ZIndex = 5, - Parent = ScrollBarFrame, - - } - local ListFrame = Obj.Create"Frame" - { - Name = 'SubFrame', - BackgroundTransparency = 1, - Position = UDim2.new(0,0,.8,0), - Size = UDim2.new(1, 0, 1, 0), - Parent = BottomClipFrame, - } -local PopUpClipFrame = Obj.Create"Frame" -{ - Name = 'PopUpFrame', - BackgroundTransparency = 1, - SizeConstraint='RelativeXX', - Position = MainFrame.Position + UDim2.new( 0,-150,0,0), - Size = UDim2.new(0,150,0,800), - Parent = MainFrame, - ClipsDescendants = true, - ZIndex=9, -} -local PopUpPanel = nil - local PopUpPanelTemplate = Obj.Create"Frame" - { - Name = 'Panel', - BackgroundTransparency = 1, - Position = UDim2.new(1,0,0,0), - Size = UDim2.new(1,0,.032,0), - Parent = PopUpClipFrame, - } - -local StatTitles = Obj.Create"Frame" -{ - Name = 'StatTitles', - BackgroundTransparency = 1, - Position = UDim2.new(0,0,1,-10), - Size = UDim2.new(1, 0, 0, 0), - Parent = HeaderFrame, -} - -local IsMinimized = Instance.new('BoolValue') -local IsMaximized = Instance.new('BoolValue') -local IsTabified = Instance.new('BoolValue') -local AreNamesExpanded = Instance.new('BoolValue') - - -local MiddleTemplate = Obj.Create"Frame" -{ - Name = 'MidTemplate', - BackgroundTransparency = 1, - Position = UDim2.new(100,0,.07,0), - Size = UDim2.new(.5, 0, .025, 0),--UDim2.new(1, 0, .03, 0), - Obj.Create'ImageLabel' - { - Name = 'BCLabel', - Active = true, - BackgroundTransparency = 1, - Position = UDim2.new(.005, 5, .20, 0), - Size = UDim2.new(0,16,0,16), - SizeConstraint = 'RelativeYY', - Image = "", - ZIndex = 3, - }, - Obj.Create'ImageLabel' - { - Name = 'FriendLabel', - Active = true, - BackgroundTransparency = 1, - Position = UDim2.new(.005, 5, .15, 0), - Size = UDim2.new(0,16,0,16), - SizeConstraint = 'RelativeYY', - Image = "", - ZIndex = 3, - }, - Obj.Create"ImageButton" - { - Name = 'ClickListener', - Active = true, - BackgroundTransparency = 1, - Position = UDim2.new(.005, 1, 0, 0), - Size = UDim2.new(.96,0,1,0), - ZIndex = 3, - }, - Obj.Create"Frame" - { - Name = 'TitleFrame', - BackgroundTransparency = 1, - Position = UDim2.new(.01, 0, 0, 0), - Size = UDim2.new(0,140,1,0), - ClipsDescendants=true, - Obj.Create"TextLabel" - { - Name = 'Title', - BackgroundTransparency = 1, - Position = UDim2.new(0, 5, 0, 0), - Size = UDim2.new(100,0,1,0), - Font = 'Arial', - FontSize='Size14', - TextColor3 = Color3.new(1,1,1), - TextXAlignment = 'Left', - TextYAlignment = 'Center', - ZIndex = 3, - }, - }, - - Obj.Create"TextLabel" - { - Name = 'PlayerScore', - BackgroundTransparency = 1, - Position = UDim2.new(0, 0, 0, 0), - Size = UDim2.new(1,0,1,0), - Font = 'ArialBold', - Text = '', - FontSize='Size14', - TextColor3 = Color3.new(1,1,1), - TextXAlignment = 'Left', - TextYAlignment = 'Center', - ZIndex = 3, - }, - --Obj.Create'IntValue'{Name = 'ID'}, - --Obj.Create'ObjectValue'{Name = 'Player'}, - --Obj.Create'IntValue'{Name = 'Score'}, - ZIndex = 3, -} -local MiddleBGTemplate = Obj.Create"Frame" -{ - Name = 'MidBGTemplate', - BackgroundTransparency = 1, - Position = UDim2.new(100,0,.07,0), - Size = UDim2.new(.5, 0, .025, 0),--UDim2.new(1, 0, .03, 0), - MakeBackgroundGuiObj('http://www.jarfeh.xyz/asset/?id=94692025'), - -} - - -- REPORT ABUSE OBJECTS - -local ReportAbuseShield = Obj.Create"TextButton" -{ - Name = "ReportAbuseShield", - Text = "", - AutoButtonColor = false, - Active = true, - Visible = true, - Size = UDim2.new(1,0,1,0), - BackgroundColor3 = Color3I(51,51,51), - BorderColor3 = Color3I(27,42,53), - BackgroundTransparency = 1, -} - -local ReportAbuseFrame = Obj.Create "Frame" -{ - Name = "Settings", - Position = UDim2.new(0.5, - 250, 0.5, - 200), - Size = UDim2.new(0.0, 500, 0.0, 400), - BackgroundTransparency = 1, - Active = true, - Parent = ReportAbuseShield, -} - -local AbuseSettingsFrame = Obj.Create"Frame" -{ - Name = "ReportAbuseStyle", - Size = UDim2.new(1, 0, 1, 0), - Active = true, - BackgroundTransparency = 1, - MakeBackgroundGuiObj('http://www.jarfeh.xyz/asset/?id=96488767'), -- 96480351'), - Obj.Create"TextLabel" - { - Name = "Title", - Text = "Report Abuse", - TextColor3 = Color3I(221,221,221), - Position = UDim2.new(0.5, 0, 0, 30), - Font = Enum.Font.ArialBold, - FontSize = Enum.FontSize.Size36, - }, - Obj.Create"TextLabel" - { - Name = "Description", - Text = "This will send a complete report to a moderator. The moderator will review the chat log and take appropriate action.", - TextColor3 = Color3I(221,221,221), - Position = UDim2.new(.01, 0, 0, 55), - Size = UDim2.new(.99, 0, 0, 40), - BackgroundTransparency = 1, - Font = Enum.Font.Arial, - FontSize = Enum.FontSize.Size18, - TextWrap = true, - TextXAlignment = Enum.TextXAlignment.Left, - TextYAlignment = Enum.TextYAlignment.Top, - }, - Obj.Create"TextLabel" - { - Name = "AbuseLabel", - Text = "What did they do?", - Font = Enum.Font.Arial, - BackgroundTransparency = 1, - FontSize = Enum.FontSize.Size18, - Position = UDim2.new(0.025,0,0,140), - Size = UDim2.new(0.4,0,0,36), - TextColor3 = Color3I(255,255,255), - TextXAlignment = Enum.TextXAlignment.Left, - }, - Obj.Create"TextLabel" - { - Name = "ShortDescriptionLabel", - Text = "Short Description: (optional)", - Font = Enum.Font.Arial, - FontSize = Enum.FontSize.Size18, - Position = UDim2.new(0.025,0,0,180), - Size = UDim2.new(0.95,0,0,36), - TextColor3 = Color3I(255,255,255), - TextXAlignment = Enum.TextXAlignment.Left, - BackgroundTransparency = 1, - }, - Obj.Create"TextLabel" - { - Name = "ReportingPlayerLabel", - Text = "Reporting Player", - BackgroundTransparency = 1, - Font = Enum.Font.Arial, - FontSize = Enum.FontSize.Size18, - Position = UDim2.new(0.025,0,0,100), - Size = UDim2.new(0.95,0,0,36), - TextColor3 = Color3I(255,255,255), - TextXAlignment = Enum.TextXAlignment.Left, - Parent = AbuseSettingsFrame - }, - - Parent = ReportAbuseFrame, -} - -local AbusePlayerLabel = Obj.Create"TextLabel" -{ - Name = "PlayerLabel", - Text = "", - BackgroundTransparency = 1, - Font = Enum.Font.ArialBold, - FontSize = Enum.FontSize.Size18, - Position = UDim2.new(0.025,0,0,100), - Size = UDim2.new(0.95,0,0,36), - TextColor3 = Color3I(255,255,255), - TextXAlignment = Enum.TextXAlignment.Right, - Parent = AbuseSettingsFrame -} - -local SubmitReportButton = Obj.Create"ImageButton" -{ - Name = "SubmitReportBtn", - Active = false, - BackgroundTransparency = 1, - Position = UDim2.new(.5, - 200, 1, - 80), - Size = UDim2.new(0,150,0,50), - AutoButtonColor = false, - Image = 'http://www.jarfeh.xyz/asset/?id=96502438', -- 96501119', - Parent = AbuseSettingsFrame, -} - -local CancelReportButton = Obj.Create"ImageButton" -{ - Name = "CancelBtn", - BackgroundTransparency = 1, - Position = UDim2.new(0.5, 50, 1, - 80), - Size = UDim2.new(0,150,0,50), - AutoButtonColor = true, - Image = 'http://www.jarfeh.xyz/asset/?id=96500683', - Parent = AbuseSettingsFrame, -} - -local AbuseDescriptionWrapper = Obj.Create"Frame" -{ - Name = "AbuseDescriptionWrapper", - Position = UDim2.new(0.025,0,0,220), - Size = UDim2.new(0.95,0,1, - 310), - BackgroundColor3 = Color3I(0,0,0), - BorderSizePixel = 0, - Parent = AbuseSettingsFrame, -} - -local AbuseDescriptionBox - -local OriginalAbuseDescriptionBox = Obj.Create"TextBox" -{ - Name = "TextBox", - Text = "", - ClearTextOnFocus = false, - Font = Enum.Font.Arial, - FontSize = Enum.FontSize.Size18, - Position = UDim2.new(0,3,0,3), - Size = UDim2.new(1, - 6,1, - 6), - TextColor3 = Color3I(255,255,255), - TextXAlignment = Enum.TextXAlignment.Left, - TextYAlignment = Enum.TextYAlignment.Top, - TextWrap = true, - BackgroundColor3 = Color3I(0,0,0), - BorderSizePixel = 0, -} - -local CalmingAbuseBox = Obj.Create'Frame' -{ - Name = 'AbuseFeedbackBox', - BackgroundTransparency = 1, - Position=UDim2.new(0.25, 0, 0.300000012, 0), - Size=UDim2.new(0.5, 0, 0.370000005, 0), - MakeBackgroundGuiObj('http://www.jarfeh.xyz/asset/?id=96506233'), - Obj.Create'TextLabel' - { - Name = 'Header', - Position=UDim2.new(0,10,.05,0), - Size=UDim2.new(1, -30, .15, 0), - TextScaled = true, - BackgroundTransparency = 1, - TextXAlignment = Enum.TextXAlignment.Center, - TextYAlignment = Enum.TextYAlignment.Top, - Text = 'Thanks for your report!', - TextColor3 = Color3.new(1,1,1), - FontSize = Enum.FontSize.Size48, - Font = 'ArialBold', - }, - Obj.Create'TextLabel' - { - Name = 'content', - Position = UDim2.new(0,10,.20,0), - Size = UDim2.new(1, -30, .40, 0), - TextScaled = true, - BackgroundTransparency = 1, - TextColor3 = Color3.new(1,1,1), - Text = 'Our moderators will review the chat logs and determine what happened. The other user is probably just trying to make you mad.\n\nIf anyone used swear words, inappropriate language, or threatened you in real life, please report them for Bad Words or Threats', - TextWrapped = true, - TextYAlignment = Enum.TextYAlignment.Top, - FontSize = Enum.FontSize.Size24, - Font = 'Arial', - }, - Obj.Create'ImageButton' - { - Name = "OkButton", - BackgroundTransparency = 1, - Position = UDim2.new(0.5, -75, 1, -80), - Size = UDim2.new(0,150,0,50), - AutoButtonColor = true, - Image = 'http://www.jarfeh.xyz/asset/?id=96507959', - } -} -local NormalAbuseBox = Obj.Create'Frame' -{ - Name = 'AbuseFeedbackBox', - BackgroundTransparency = 1, - Position = UDim2.new(0.25, 0, 0.300000012, 0), - Size = UDim2.new(0.5, 0, 0.370000005, 0), - MakeBackgroundGuiObj('http://www.jarfeh.xyz/asset/?id=96506233'), - Obj.Create'TextLabel' - { - Name = 'Header', - Position = UDim2.new(0,10,.05,0), - Size = UDim2.new(1, -30, .15, 0), - TextScaled = true, - BackgroundTransparency = 1, - TextColor3 = Color3.new(1,1,1), - TextXAlignment = Enum.TextXAlignment.Center, - TextYAlignment = Enum.TextYAlignment.Top, - Text = 'Thanks for your report!', - FontSize = Enum.FontSize.Size48, - Font ='ArialBold' - }, - Obj.Create'TextLabel' - { - Name = 'content', - Position = UDim2.new(0,10,.20,0), - Size = UDim2.new(1, -30, .15, 0), - TextScaled = true, - BackgroundTransparency = 1, - TextColor3 = Color3.new(1,1,1), - Text = "Our moderators will review the chat logs and determine what happened.", - TextWrapped = true, - TextYAlignment = Enum.TextYAlignment.Top, - FontSize = Enum.FontSize.Size24, - Font = 'Arial', - }, - Obj.Create'ImageButton' - { - Name = "OkButton", - BackgroundTransparency = 1, - Position = UDim2.new(0.5, -75, 1, -80), - Size = UDim2.new(0,150,0,50), - AutoButtonColor = true, - Image = 'http://www.jarfeh.xyz/asset/?id=96507959', - }, -} - -local BigButton=Instance.new('ImageButton') - BigButton.Size=UDim2.new(1,0,1,0) - BigButton.BackgroundTransparency=1 - BigButton.ZIndex=8 - BigButton.Visible=false - --BigButton.Active=false - BigButton.Parent=ScreenGui - - - local debugFrame = Obj.Create"Frame" - { - Name = 'debugframe', - Position = UDim2.new(0, 0, 0, 0), - Size = UDim2.new(0, 150, 0, 800),--0.99000001 - BackgroundTransparency = 1, - - } - local debugplayers = Obj.Create"TextLabel" - { - BackgroundTransparency = .8, - Position = UDim2.new(0, 0, .01, 0), - Size = UDim2.new(1,0,.5,0), - Parent = debugFrame, - Font = 'ArialBold', - Text = '--', - FontSize='Size14', - TextWrapped=true, - TextColor3 = Color3.new(1,1,1), - TextStrokeColor3 = Color3.new(0,0,0), - TextStrokeTransparency = 0, - TextXAlignment = 'Right', - TextYAlignment = 'Center', - } - local debugOutput = Obj.Create"TextLabel" - { - BackgroundTransparency = .8, - Position = UDim2.new(0, 0, .5, 0), - Size = UDim2.new(1,0,.5,0), - Parent = debugFrame, - Font = 'ArialBold', - Text = '--', - FontSize='Size14', - TextWrapped=true, - TextColor3 = Color3.new(1,1,1), - TextStrokeColor3 = Color3.new(0,0,0), - TextStrokeTransparency = 0, - TextXAlignment = 'Right', - TextYAlignment = 'Center', - } - - ---[[ - simple function to toggle the display of debug output ---]] -local DebugPrintEnabled=true -function debugprint(str) - if DebugPrintEnabled then - debugOutput.Text=str - end -end - - - ------------------------- - -- Script objects - ------------------------- -local RbxGui = assert(LoadLibrary('RbxGui')) - - -- number of entries to show if you click minimize -local DefaultEntriesOnScreen = 8 - - - - - -for _,i in pairs(Images) do - Game:GetService("ContentProvider"):Preload("http://www.jarfeh.xyz/asset/?id="..i) -end - - -- ordered array of 'score data', each entry has: - -- Name(String) - -- Priority(number) - -- IsPrimary (bool, should it be shown in upper right) - -- MaxLength (integer, of the length of the longest element for this column) -local ScoreNames = {} - -- prevents flipping in playerlist panels -local AddId = 0 - -- intermediate table form of all player entries in format of: - -- Frame - -- Player - -- Score - -- ID - -- MyTeam (team ENRTY(not actual team) I am currently on) -local PlayerFrames = {} - -- intermediate ordered frame array, composed of Entrys of - -- Frame - -- MyTeam (my team object) - -- MyPlayers ( an ordered array of all player frames in team ) - -- AutoHide (bool saying whether it should be hidden) - -- IsHidden (bool) - -- ID (int to prevent flipping out of leaderboard, fun times) -local TeamFrames = {} - -- one special entry from teamFrames, for unaffiliated players, only shown if players non - empty -local NeutralTeam = nil - - -- final 'to be displayed' list of frames -local MiddleFrames = {} -local MiddleFrameBackgrounds = {} -local MiddleFrameHeight = .03 - -- time of last click -local LastClick = 0 -local ButtonCooldown = .25 - -local OnIos = false -pcall(function() OnIos = Game:GetService('UserInputService').TouchEnabled end) - - - -- you get 200 of x screen space per stat added, start width 16% -local BaseScreenXSize = 150 -local SpacingPerStat = 10 --spacing between stats - - -local MaximizedBounds = UDim2.new(.5,0,1,0) -local MaximizedPosition = UDim2.new(.25,0,.1,0) -local NormalBounds = UDim2.new(0,BaseScreenXSize, 0, 800) -local NormalPosition = UDim2.new(1 , - BaseScreenXSize, 0.005, 0) - -local MinimizedBounds = UDim2.new(0, BaseScreenXSize, 0.99000001, 0) - - - -- number of stats to show from leaderstats -local NumPrimaryStats = 0 - -- where the scroll par currently is positioned -local ScrollPosition = 0.75999999 -local IsDragging = false -- am I dragging the player list - -local DefaultBottomClipPos = BottomClipFrame.Position.Y.Scale - -local LastSelectedPlayerEntry = nil -local SelectedPlayerEntry = nil -local SelectedPlayer = nil - - -- locks(semaphores) for stopping race conditions -local AddingFrameLock = false -local ChangingOrderLock = false -local AddingStatLock = false -local BaseUpdateLock = false -local WaitForClickLock = false -local InPopupWaitForClick=false -local PlayerChangedLock = false -local NeutralTeamLock = false - -local ScrollWheelConnections = {} - - -local DefaultListSize = 8 -if not OnIos then DefaultListSize = 12 end -local DidMinimizeDrag = false - - -- report abuse objects -local AbuseName -local Abuses = { - "Bad Words or Threats", - "Bad Username", - "Talking about Dating", - "Account Trading or Sharing", - "Asking Personal Questions", - "Rude or Mean Behavior", - "False Reporting Me" -} -local UpdateAbuseFunction -local AbuseDropDown, UpdateAbuseSelection - -local PrivilegeLevel = -{ - Owner = 255, - Admin = 240, - Member = 128, - Visitor = 10, - Banned = 0, -} - - -local IsPersonalServer = not not game.Workspace:FindFirstChild("PSVariable") -if IsPersonalServer then - --THIS SHOULD NOT BE HERE GUYS, only keeping to perserve old functionality - game:GetService("ScriptContext"):AddCoreScript(64164692,game.Players.LocalPlayer,"BuildToolManager") -end -game.Workspace.ChildAdded:connect(function(nchild) - if nchild.Name=='PSVariable' and nchild:IsA('BoolValue') then - IsPersonalServer=true - --THIS SHOULD NOT BE HERE GUYS, only keeping to perserve old functionality - game:GetService("ScriptContext"):AddCoreScript(64164692,game.Players.LocalPlayer,"BuildToolManager") - end -end) - ------------------------------- - -- Static Functions - ------------------------------- -function GetTotalEntries() - return math.min(#MiddleFrameBackgrounds,DefaultEntriesOnScreen) -end - -function GetEntryListLength() - local numEnts=#PlayerFrames+#TeamFrames - if NeutralTeam then - numEnts=numEnts+1 - end - return numEnts -end - -function AreAllEntriesOnScreen() - return #MiddleFrameBackgrounds * MiddleTemplate.Size.Y.Scale <= 1 + DefaultBottomClipPos -end - -function GetLengthOfVisbleScroll() - return 1 + DefaultBottomClipPos -end - -function GetMaxScroll() - return DefaultBottomClipPos * - 1 -end - -- can be optimized by caching when this varible changes -function GetMinScroll() - if AreAllEntriesOnScreen() then - return GetMaxScroll() - else - return (GetMaxScroll() - (#MiddleFrameBackgrounds * MiddleTemplate.Size.Y.Scale)) + (1 + DefaultBottomClipPos) - end -end - -function AbsoluteToPercent(x,y) - return Vector2.new(x,y)/ScreenGui.AbsoluteSize -end ---[[ - tweens text transparency of element from starta to enda over length of time - Warning: should be put in a Spawn call - @Args: - element textobject to tween transparency on - starta alpha to start tweening - enda alpha to end tweening on - length how many seconds to spend tweening ---]] -function TweenTextTransparency(element,starta,enda,length) - local startTime = time() - while time() - startTime < length do - element.TextTransparency = ((enda - starta) * ((time() - startTime)/length)) + starta - wait(.01) - end - element.TextTransparency = enda -end ---[[ - tweens background transparency of element from starta to enda over length of time - Warning: should be put in a Spawn call - @Args: - element guiobject to tween transparency on - starta alpha to start tweening - enda alpha to end tweening on - length how many seconds to spend tweening ---]] -function TweenBackgroundTransparency(element,starta,enda,length) - local startTime = time() - while time() - startTime < length do - element.BackgroundTransparency = ((enda - starta) * ((time() - startTime)/length)) + starta - wait(.01) - end - element.BackgroundTransparency = enda -end - ---[[ - UGLY UGLY HACK FUNCTION - replace with some sort of global input catching A.S.A. FREAKING P. - creates a fullsize gui element to catch next mouse up event(completeing a click) - @Args: - frameParent Object to parent fullscreen gui to - polledFunction function to call on mouse moved events in this gui - exitFunction function to call when click event is fired ---]] -function WaitForClick(frameParent,polledFunction,exitFunction) - if WaitForClickLock then return end - debugprint('waiting for click!') - WaitForClickLock=true - BigButton.Visible=true - --BigButton.Active=true - --BigButton.Parent=frameParent - local upHappened=false - local connection, connection2 - connection2=BigButton.MouseMoved:connect( function(nx,ny) - polledFunction(nx,ny) - end) - connection=BigButton.MouseButton1Up:connect(function(nx,ny) - exitFunction(nx,ny) - BigButton.Visible=false - connection:disconnect() - connection2:disconnect() - debugprint('mouse up!') - end) - frameParent.AncestryChanged:connect(function(child,nparent) - if child == frameParent and nparent ==nil then - exitFunction(nx,ny) - BigButton.Visible=false - connection:disconnect() - connection2:disconnect() - debugprint("forced out of wait for click") - end - end) - WaitForClickLock=false -end - - ---------------------------- ---Personal Server Handling ---------------------------- ---[[ - returns privlage level based on integer rank - Note: these privilege levels seem completely arbitrary, but no documentation exists - this is all from the old player list, really weird - @Args: - rank Integer rank value for player - @Return Normalized integer value for rank? ---]] -function GetPrivilegeType(rank) - if rank <= PrivilegeLevel['Banned'] then - return PrivilegeLevel['Banned'] - elseif rank <= PrivilegeLevel['Visitor'] then - return PrivilegeLevel['Visitor'] - elseif rank <= PrivilegeLevel['Member'] then - return PrivilegeLevel['Member'] - elseif rank <= PrivilegeLevel['Admin'] then - return PrivilegeLevel['Admin'] - else - return PrivilegeLevel['Owner'] - end -end - ---[[ - gives a player a new privilage rank - Note: Very odd that I have to use loops with this instead of directly setting the rank - but no documentation for personal server service exists - @Args: - player player to change rank of - nrank new integer rank to give player ---]] -function SetPrivilegeRank(player,nrank) - while player.PersonalServerRanknrank do - game:GetService("PersonalServerService"):Demote(player) - end -end ---[[ - called when player selects new privilege level from popup menu - @Args: - player player to set privileges on - nlevel new privilege level for this player ---]] -function OnPrivilegeLevelSelect(player,nlevel,BanPlayerButton,VisitorButton,MemberButton,AdminButton) - debugprint('setting privilege level') - SetPrivilegeRank(player,nlevel) - HighlightMyRank(player,BanPlayerButton,VisitorButton,MemberButton,AdminButton) -end - ---[[ - Highlights current rank of this player in the popup menu - @Args: - player Player to check for rank on ---]] -function HighlightMyRank(player,BanPlayerButton,VisitorButton,MemberButton,AdminButton) - BanPlayerButton.Image= 'http://www.jarfeh.xyz/asset/?id='..Images['LightPopupMid'] - VisitorButton.Image= 'http://www.jarfeh.xyz/asset/?id='..Images['DarkPopupMid'] - MemberButton.Image= 'http://www.jarfeh.xyz/asset/?id='..Images['LightPopupMid'] - AdminButton.Image= 'http://www.jarfeh.xyz/asset/?id='..Images['DarkPopupBottom'] - - local rank=player.PersonalServerRank - if rank <= PrivilegeLevel['Banned'] then - BanPlayerButton.Image='http://www.jarfeh.xyz/asset/?id='..Images['LightBluePopupMid'] - elseif rank <= PrivilegeLevel['Visitor'] then - VisitorButton.Image='http://www.jarfeh.xyz/asset/?id='..Images['DarkBluePopupMid'] - elseif rank <= PrivilegeLevel['Member'] then - MemberButton.Image='http://www.jarfeh.xyz/asset/?id='..Images['LightBluePopupMid'] - elseif rank <= PrivilegeLevel['Admin'] then - AdminButton.Image= 'http://www.jarfeh.xyz/asset/?id='..Images['DarkBluePopupBottom'] - end -end - - -------------------------- - -- Report abuse handling - -------------------------- ---[[ - does final reporting of abuse on selected player, calls closeAbuseDialog ---]] -function OnSubmitAbuse() - if SubmitReportButton.Active then - if AbuseName and SelectedPlayer then - AbuseSettingsFrame.Visible = false - game.Players:ReportAbuse(SelectedPlayer, AbuseName, AbuseDescriptionBox.Text) - if AbuseName == "Rude or Mean Behavior" or AbuseName == "False Reporting Me" then - CalmingAbuseBox.Parent = ReportAbuseShield - else - debugprint('opening abuse box') - NormalAbuseBox.Parent = ReportAbuseShield - end - else - CloseAbuseDialog() - end - end -end - ---[[ - opens the abuse dialog, initialises text to display selectedplayer ---]] -function OpenAbuseDialog() - debugprint('adding report dialog') - AbusePlayerLabel.Text = SelectedPlayer.Name - --AbuseDescriptionBox.Text = "" - PopUpPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Quad", .5,true) - AbuseDescriptionBox=OriginalAbuseDescriptionBox:Clone() - AbuseDescriptionBox.Parent = AbuseDescriptionWrapper - ReportAbuseShield.Parent = ScreenGui -end ---[[ - resets and closes abuse dialog ---]] -function CloseAbuseDialog() - AbuseName = nil - SubmitReportButton.Active = false - SubmitReportButton.Image = 'http://www.jarfeh.xyz/asset/?id=96502438' -- 96501119', - AbuseDescriptionBox:Destroy() - CalmingAbuseBox.Parent = nil - NormalAbuseBox.Parent = nil - ReportAbuseShield.Parent = nil - AbuseSettingsFrame.Visible = true -end - ---[[ - creates dropdownbox, registers all listeners for abuse dialog ---]] -function InitReportAbuse() - - UpdateAbuseFunction = function(abuseText) - AbuseName = abuseText - if AbuseName and SelectedPlayer then - SubmitReportButton.Active = true - SubmitReportButton.Image = 'http://www.jarfeh.xyz/asset/?id=96501119' - end - end - - AbuseDropDown, UpdateAbuseSelection = RbxGui.CreateDropDownMenu(Abuses, UpdateAbuseFunction, true) - AbuseDropDown.Name = "AbuseComboBox" - AbuseDropDown.Position = UDim2.new(0.425, 0, 0, 142) - AbuseDropDown.Size = UDim2.new(0.55,0,0,32) - AbuseDropDown.Parent = AbuseSettingsFrame - - - CancelReportButton.MouseButton1Click:connect(CloseAbuseDialog) - SubmitReportButton.MouseButton1Click:connect(OnSubmitAbuse) - - CalmingAbuseBox:FindFirstChild('OkButton').MouseButton1Down:connect(CloseAbuseDialog) - NormalAbuseBox:FindFirstChild('OkButton').MouseButton1Down:connect(CloseAbuseDialog) -end - -------------------------------------- --- Friend/unfriending -------------------------------------- ---[[ - gets enum val of friend status, uses pcall for some reason?(from old playerlist) - @Args: - player player object to check if friends with - @Return: enum of friend status ---]] -local function GetFriendStatus(player) - if player == game.Players.LocalPlayer then - return Enum.FriendStatus.NotFriend - else - local success, result = pcall(function() return game.Players.LocalPlayer:GetFriendStatus(player) end) - if success then - return result - else - return Enum.FriendStatus.NotFriend - end - end -end - ---[[ - when friend button is clicked, tries to take appropriate action, - based on current friend status with SelectedPlayer ---]] -function OnFriendButtonSelect() - - local friendStatus=GetFriendStatus(SelectedPlayer) - if friendStatus==Enum.FriendStatus.Friend then - LocalPlayer:RevokeFriendship(SelectedPlayer) - elseif friendStatus==Enum.FriendStatus.Unknown or friendStatus==Enum.FriendStatus.NotFriend then - LocalPlayer:RequestFriendship(SelectedPlayer) - elseif friendStatus==Enum.FriendStatus.FriendRequestSent then - LocalPlayer:RevokeFriendship(SelectedPlayer) - elseif friendStatus==Enum.FriendStatus.FriendRequestReceived then - LocalPlayer:RequestFriendship(SelectedPlayer) - end - --PersonalServerPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Quad", .5,true) - ClosePopUpPanel() - PopUpPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Quad", .5,true) -end - -function OnFriendRefuseButtonSelect() - - - LocalPlayer:RevokeFriendship(SelectedPlayer) - ClosePopUpPanel() - PopUpPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Quad", .5,true) -end ------------------------------------- --- Player Entry Handling ------------------------------------- ---[[ - used by lua's table.sort to sort player entries ---]] -function PlayerSortFunction(a,b) - -- prevents flipping out leaderboard - if a['Score'] == b['Score'] then - --return a['ID'] < b['ID'] - return a['Player'].Name:upper() < b['Player'].Name:upper() - end - if not a['Score'] then return false end - if not b['Score'] then return true end - return a['Score'] < b['Score'] -end - - --------------------------------- - -- Stat Handling - --------------------------------- - -- removes and closes all leaderboard stuffs -function BlowThisPopsicleStand() - --ScreenGui:Destroy() - --script:Destroy() - --time to make the fanboys rage... - Tabify() -end ---[[ - used by lua's table.sort to prioritize score entries ---]] -function StatSort(a,b) - -- primary stats should be shown before all others - if a.IsPrimary ~= b.IsPrimary then - return a.IsPrimary - end - -- if priorities are equal, then return the first added one - if a.Priority == b.Priority then - return a.AddId < b.AddId - end - return a.Priority < b.Priority -end ---[[ - doing WAAY too much here, for optimization update only your team - @Args: - playerEntry Entry of player who had a stat change - property Name of stat changed ---]] -function StatChanged(playerEntry,property) - - -- if(playerEntry['MyTeam']) then - -- UpdateSingleTeam(playerEntry['MyTeam']) - -- else - BaseUpdate() - -- end -end ---[[ - Called when stat is added - if playerEntry is localplayer, will add to score names and re-sort the stats, and resize the width of the leaderboard - for all players, will add a listener for if this stat changes - if stat is a string value, crashes the leaderboard - Note:change crash to a 'tabify' leaderboard later - @Args: - nchild new child value to leaderstats - playerEntry entry this stat was added to ---]] -function StatAdded(nchild,playerEntry) - -- dont re - add a leaderstat I alreday have - while AddingStatLock do debugprint('in stat added function lock') wait(1/30) end - AddingStatLock = true - if not (nchild:IsA('StringValue') or nchild:IsA('IntValue') or nchild:IsA('BoolValue') or nchild:IsA('NumberValue') or nchild:IsA('DoubleConstrainedValue') or nchild:IsA('IntConstrainedValue')) then - BlowThisPopsicleStand() - else - local haveScore = false - for _,i in pairs(ScoreNames) do - if i['Name']==nchild.Name then haveScore=true end - end - if not haveScore then - local nstat = {} - nstat['Name'] = nchild.Name - nstat['Priority'] = 0 - if(nchild:FindFirstChild('Priority')) then - nstat['Priority'] = nchild.Priority - end - nstat['IsPrimary'] = false - if(nchild:FindFirstChild('IsPrimary')) then - nstat['IsPrimary'] = true - end - if(nstat['IsPrimary']) then - NumPrimaryStats = NumPrimaryStats + 1 - end - nstat.AddId = AddId - AddId = AddId + 1 - table.insert(ScoreNames,nstat) - table.sort(ScoreNames,StatSort) - UpdateMaximize() - - end - end - AddingStatLock = false - StatChanged(playerEntry) - nchild.Changed:connect(function(property) StatChanged(playerEntry,property) end) - - -end ---[[ - Called when stat is removed from player - for all players, destroys the stat frame associated with this value, - then calls statchanged(to resize frame) - if playerEntry==localplayer, will remove from scorenames - @Args: - nchild ___value to be removed - playerEntry entry of player value is being removed from ---]] -function StatRemoved(nchild,playerEntry) - while AddingStatLock do debugprint('In Adding Stat Lock1') wait(1/30) end - AddingStatLock = true - if playerEntry['Frame']:FindFirstChild(nchild.Name) then - debugprint('Destroyed frame!') - playerEntry['Frame'][nchild.Name].Parent = nil - end - if playerEntry['Player'].Name == LocalPlayer.Name then - for i,val in ipairs(ScoreNames) do - if val['IsPrimary'] then - NumPrimaryStats = NumPrimaryStats - 1 - end - if val['Name'] == nchild.Name then - table.remove(ScoreNames,i) - end - end - end - AddingStatLock = false - StatChanged(playerEntry) -end ---[[ - clears all stats from a given playerEntry - used when leaderstats are removed, or when new leaderstats are added(for weird edge case)+ ---]] -function RemoveAllStats(playerEntry) - while AddingStatLock do debugprint('In Adding Stat Lock1') wait(1/30) end - AddingStatLock = true - - for i,val in ipairs(ScoreNames) do - if playerEntry['Frame']:FindFirstChild(val['Name']) then - debugprint('Destroyed frame!') - playerEntry['Frame'][val['Name']].Parent = nil - end - if playerEntry['Player'].Name == LocalPlayer.Name then - NumPrimaryStats = NumPrimaryStats - 1 - end - end - if playerEntry['Player'].Name == LocalPlayer.Name then - NumPrimaryStats = NumPrimaryStats - 1 - end - - AddingStatLock = false - StatChanged(playerEntry) -end - - -function GetScoreValue(score) - if score:IsA('DoubleConstrainedValue') or score:IsA('IntConstrainedValue') then - return score.ConstrainedValue - elseif score:IsA('BoolValue') then - if score.Value then return 1 else return 0 end - else - return score.Value - end -end ---[[ - ---]] -function MakeScoreEntry(entry,scoreval,panel) - if not panel:FindFirstChild('PlayerScore') then return end - local nscoretxt = panel:FindFirstChild('PlayerScore'):Clone() - local thisScore = nil - --here lies the resting place of a once great and terrible bug - --may its treachery never be forgoten, lest its survivors fall for it again - --RIP the leaderstat bug, oct 2012-nov 2012 - wait() - if entry['Player']:FindFirstChild('leaderstats') then - thisScore = entry['Player']:FindFirstChild('leaderstats'):FindFirstChild(scoreval['Name']) - else - return - end - - if not entry['Player'].Parent then return end - - nscoretxt.Name = scoreval['Name'] - nscoretxt.Text = tostring(GetScoreValue(thisScore)) - if scoreval['Name'] == ScoreNames[1]['Name'] then - debugprint('changing score') - entry['Score'] = GetScoreValue(thisScore) - if entry['Player'] == LocalPlayer then HeaderScore.Text = tostring(GetScoreValue(thisScore)) end - end - - thisScore.Changed:connect(function() - if not thisScore.Parent then return end - if scoreval['Name'] == ScoreNames[1]['Name'] then - - entry['Score'] = GetScoreValue(thisScore) - if entry['Player'] == LocalPlayer then HeaderScore.Text = tostring(GetScoreValue(thisScore)) end - end - nscoretxt.Text = tostring(GetScoreValue(thisScore)) - BaseUpdate() - end) - return nscoretxt - -end - -function CreateStatTitle(statName) - - local ntitle = MiddleTemplate:FindFirstChild('PlayerScore'):Clone() - ntitle.Name = statName - ntitle.Text = statName - -- ntitle - if IsMaximized.Value then - ntitle.TextTransparency = 0 - else - ntitle.TextTransparency = 1 - end - ntitle.Parent = StatTitles -end - -function RecreateScoreColumns(ptable) - while AddingStatLock do debugprint ('In Adding Stat Lock2') wait(1/30) end - AddingStatLock = true - local Xoffset=BaseScreenXSize --current offset from left - local maxXOffset=Xoffset - local MaxSizeColumn=0 --max size for this column - - -- foreach known leaderstat - for j = 1, #ScoreNames,1 do - local scoreval = ScoreNames[j] - --if scoreval['ColumnSize'] then - -- MaxSizeColumn=0--scoreval['ColumnSize'] - --else - MaxSizeColumn=0 - --end - -- for each entry in this player table - for i,entry in ipairs(ptable) do - local panel = entry['Frame'] - local tplayer = entry['Player'] - -- if this panel does not have an element named after this stat - if not panel:FindFirstChild(scoreval['Name']) then - -- make an entry for this object - local nentry = MakeScoreEntry(entry,scoreval,panel) - if nentry then - debugprint('adding '..nentry.Name..' to '..entry['Player'].Name ) - nentry.Parent = panel - -- add score to team - if entry['MyTeam'] and entry['MyTeam'] ~= NeutralTeam and not entry['MyTeam']['Frame']:FindFirstChild(scoreval['Name']) then - local ntitle = nentry:Clone() - ntitle.Parent = entry['MyTeam']['Frame'] - end - - end - end - scoreval['XOffset']=Xoffset - - if panel:FindFirstChild(scoreval['Name']) then - MaxSizeColumn=math.max(MaxSizeColumn,panel[scoreval['Name']].TextBounds.X) - end - end - -- add stat title to top bar - if not StatTitles:FindFirstChild(scoreval['Name']) then - CreateStatTitle(scoreval['Name']) - end - - if AreNamesExpanded.Value then - MaxSizeColumn=math.max(MaxSizeColumn,StatTitles[scoreval['Name'] ].TextBounds.X) - StatTitles[scoreval['Name'] ]:TweenPosition(UDim2.new(0,Xoffset,0,0),'Out','Quad',.25,true) - else - StatTitles[scoreval['Name'] ]:TweenPosition(UDim2.new(.4+((.6/#ScoreNames)*(j-1)),0,0,0),'Out','Quad',.25,true) - end - scoreval['ColumnSize']=MaxSizeColumn - Xoffset= Xoffset+SpacingPerStat+MaxSizeColumn - maxXOffset=math.max(Xoffset,maxXOffset) - end - --print(maxXOffset) - NormalBounds = UDim2.new(0, maxXOffset,0,800) - NormalPosition = UDim2.new(1 , -NormalBounds.X.Offset, NormalPosition.Y.Scale, 0) - UpdateHeaderNameSize() - UpdateMaximize() - - AddingStatLock = false -end - --------------------------- - -- Minimizing and maximizing - --------------------------- - -function ToggleMinimize() - IsMinimized.Value = not IsMinimized.Value - UpdateStatNames() -end - -function ToggleMaximize() - IsMaximized.Value = not IsMaximized.Value - RecreateScoreColumns(PlayerFrames) --done to re-position stat names NOTE: optimize-able -end - -function Tabify() - IsTabified.Value= true - IsMaximized.Value=false - IsMinimized.Value=true - UpdateMinimize() - IsTabified.Value= true - ScreenGui:TweenPosition(UDim2.new(NormalBounds.X.Scale, NormalBounds.X.Offset-10, 0,0),'Out','Quad',1,true) -end - -function UnTabify() - if IsTabified.Value then - IsTabified.Value= false - ScreenGui:TweenPosition(UDim2.new(0, 0, 0,0),'Out','Quad',1,true) - end -end - ---[[ - Does more than it looks like - monitors positions of the clipping frames and bottom frames - called from EVERYWHERE, too much probably ---]] -function UpdateMinimize() - - if IsMinimized.Value then - if IsMaximized.Value then - ToggleMaximize() - end - if not IsTabified.Value then - MainFrame:TweenSizeAndPosition(UDim2.new(0.010, HeaderName.TextBounds.X, NormalBounds.Y.Scale,NormalBounds.Y.Offset), - UDim2.new(.990, -HeaderName.TextBounds.X, NormalPosition.Y.Scale,0),'Out','Quad',1,true) - else - MainFrame:TweenSizeAndPosition(NormalBounds,NormalPosition,'Out','Quad',1,true) - end - --(#MiddleFrameBackgrounds*MiddleBGTemplate.Size.Y.Scale) - BottomClipFrame:TweenPosition(UDim2.new(0,0,-1,0), "Out", "Linear", .25,true) - BottomFrame:TweenPosition(UDim2.new(0,0,0,0), "Out", "Linear", .25,true) - FocusFrame.Size=UDim2.new(1,0,HeaderFrameHeight,0) - ExtendTab.Image = 'http://www.jarfeh.xyz/asset/?id=94692731' - else - if not IsMaximized.Value then - MainFrame:TweenSizeAndPosition(NormalBounds,NormalPosition,'Out','Quad',1,true) - end - --do limiting - DefaultBottomClipPos = math.min(math.max(DefaultBottomClipPos,-1),-1+(#MiddleFrameBackgrounds*MiddleBGTemplate.Size.Y.Scale)) - UpdateScrollPosition() - -- - --BottomClipFrame:TweenPosition(UDim2.new(0,0,DefaultBottomClipPos,0), "Out", "Linear", .25,true) - BottomClipFrame.Position=UDim2.new(0,0,DefaultBottomClipPos,0) - --BottomFrame:TweenPosition(UDim2.new(0,0,((GetTotalEntries()) * MiddleTemplate.Size.Y.Scale),0), "Out", "Linear", .25,true) - local bottomPositon = (DefaultBottomClipPos+BottomClipFrame.Size.Y.Scale) - --BottomFrame:TweenPosition(UDim2.new(0,0,bottomPositon,0), "Out", "Linear", .25,true) - BottomFrame.Position=UDim2.new(0,0,bottomPositon,0) - FocusFrame.Size=UDim2.new(1,0,bottomPositon + HeaderFrameHeight,0) - ExtendTab.Image = 'http://www.jarfeh.xyz/asset/?id=94825585' --wat, why did I put this here? - - - - end -end - ---[[ - Manages the position/size of the mainFrame, swaps out different resolution images for the frame - fades in and out the stat names, moves position of headername and header score ---]] -function UpdateMaximize() - if IsMaximized.Value then - for j = 1, #ScoreNames,1 do - local scoreval = ScoreNames[j] - StatTitles[scoreval['Name'] ]:TweenPosition(UDim2.new(.4+((.6/#ScoreNames)*(j-1)),0,0,0),'Out','Quad',.25,true) - end - - if IsMinimized.Value then - ToggleMinimize() - else - UpdateMinimize() - end - - - MainFrame:TweenSizeAndPosition(MaximizedBounds,MaximizedPosition,'Out','Quad',1,true) - HeaderScore:TweenPosition(UDim2.new(0,0,HeaderName.Position.Y.Scale,0), "Out", "Linear", .25,true) - HeaderName:TweenPosition(UDim2.new( - .1, - HeaderScore.TextBounds.x,HeaderName.Position.Y.Scale,0), "Out", "Linear", .25,true) - HeaderFrame.Background.Image = 'http://www.jarfeh.xyz/asset/?id='..Images['LargeHeader'] - BottomFrame.Background.Image = 'http://www.jarfeh.xyz/asset/?id='..Images['LargeBottom'] - for index, i in ipairs(MiddleFrameBackgrounds) do - if (index%2) ~= 1 then - i.Background.Image = 'http://www.jarfeh.xyz/asset/?id='..Images['LargeDark'] - else - i.Background.Image = 'http://www.jarfeh.xyz/asset/?id='..Images['LargeLight'] - end - end - for index, i in ipairs(MiddleFrames) do - if i:FindFirstChild('ClickListener') then - i.ClickListener.Size = UDim2.new(.974,0,i.ClickListener.Size.Y.Scale,0) - end - for j=1, #ScoreNames,1 do - local scoreval = ScoreNames[j] - if i:FindFirstChild(scoreval['Name']) then - i[scoreval['Name']]:TweenPosition(UDim2.new(.4+((.6/#ScoreNames)*(j-1)),0,0,0), "Out", "Linear", .25,true) - end - end - end - for i,entry in ipairs(PlayerFrames) do - WaitForChild(entry['Frame'],'TitleFrame').Size=UDim2.new(.38,0,entry['Frame'].TitleFrame.Size.Y.Scale,0) - end - - for i,entry in ipairs(TeamFrames) do - WaitForChild(entry['Frame'],'TitleFrame').Size=UDim2.new(.38,0,entry['Frame'].TitleFrame.Size.Y.Scale,0) - end - - else - if not IsMinimized.Value then - MainFrame:TweenSizeAndPosition(NormalBounds,NormalPosition,'Out','Quad',1,true) - end - HeaderScore:TweenPosition(UDim2.new(0,0,.4,0), "Out", "Linear", .25,true) - HeaderName:TweenPosition(UDim2.new(0,0,HeaderName.Position.Y.Scale,0), "Out", "Linear", .25,true) - HeaderFrame.Background.Image = 'http://www.jarfeh.xyz/asset/?id='..Images['NormalHeader'] - BottomFrame.Background.Image = 'http://www.jarfeh.xyz/asset/?id='..Images['NormalBottom'] - for index, i in ipairs(MiddleFrameBackgrounds) do - if index%2 ~= 1 then - i.Background.Image = 'http://www.jarfeh.xyz/asset/?id='..Images['midDark'] - else - i.Background.Image = 'http://www.jarfeh.xyz/asset/?id='..Images['midLight'] - end - end - for index, i in ipairs(MiddleFrames) do - if i:FindFirstChild('ClickListener') then - i.ClickListener.Size = UDim2.new(.96,0,i.ClickListener.Size.Y.Scale,0) - for j=1, #ScoreNames,1 do - local scoreval = ScoreNames[j] - --print(scoreval['XOffset']) - if i:FindFirstChild(scoreval['Name']) and scoreval['XOffset'] then - --print('updateing stat position: ' .. scoreval['Name']) - i[scoreval['Name']]:TweenPosition(UDim2.new(0,scoreval['XOffset'],0,0), "Out", "Linear", .25,true) - end - end - end - end - - for i,entry in ipairs(TeamFrames) do - WaitForChild(entry['Frame'],'TitleFrame').Size=UDim2.new(0,BaseScreenXSize*.9,entry['Frame'].TitleFrame.Size.Y.Scale,0) - - end - for i,entry in ipairs(PlayerFrames) do - WaitForChild(entry['Frame'],'TitleFrame').Size=UDim2.new(0,BaseScreenXSize*.9,entry['Frame'].TitleFrame.Size.Y.Scale,0) - end - end -end - -function UpdateStatNames() - if not AreNamesExpanded.Value or IsMinimized.Value then - CloseNames() - else - ExpandNames() - end -end - -function ExpandNames() - --print('enered expand names') - if #ScoreNames ~= 0 then - for _,i in pairs(StatTitles:GetChildren()) do - --print (tostring(#ScoreNames) .. " is expanding") - Spawn(function()TweenTextTransparency(i,i.TextTransparency,0,.25) end) - end - HeaderFrameHeight=.09 - --as of writing, this and 'CloseNames' are the only places headerframe is resized - HeaderFrame:TweenSizeAndPosition(UDim2.new(HeaderFrame.Size.X.Scale, HeaderFrame.Size.X.Offset, HeaderFrameHeight,0), - HeaderFrame.Position,'Out','Quad',.25,true) - TopClipFrame:TweenPosition(UDim2.new(TopClipFrame.Position.X.Scale,0,HeaderFrameHeight,0),'Out','Quad',.25,true) - BottomShiftFrame:TweenPosition(UDim2.new(0,0,HeaderFrameHeight,0), "Out", 'Quad', .25,true) - - end - -end - -function CloseNames() - --print('close names called') - if #ScoreNames ~= 0 then - HeaderFrameHeight=.07 - if not (IsMaximized.Value) then - for _,i in pairs(StatTitles:GetChildren()) do - Spawn(function()TweenTextTransparency(i,i.TextTransparency,1,.25) end) - end - end - BottomShiftFrame:TweenPosition(UDim2.new(0,0,HeaderFrameHeight,0), "Out", 'Quad', .25,true) - HeaderFrame:TweenSizeAndPosition(UDim2.new(HeaderFrame.Size.X.Scale, HeaderFrame.Size.X.Offset, HeaderFrameHeight,0), - HeaderFrame.Position,'Out','Quad',.25,true) - TopClipFrame:TweenPosition(UDim2.new(TopClipFrame.Position.X.Scale,0,HeaderFrameHeight,0),'Out','Quad',.25,true) - end -end - -function OnScrollWheelMove(direction) - if not (IsTabified.Value or IsMinimized.Value or InPopupWaitForClick) then - local StartFrame = ListFrame.Position - local newFrameY = math.max(math.min(StartFrame.Y.Scale + (direction),GetMaxScroll()),GetMinScroll()) - - ListFrame.Position = UDim2.new(StartFrame.X.Scale,StartFrame.X.Offset,newFrameY,StartFrame.Y.Offset) - UpdateScrollPosition() - end -end - -function AttachScrollWheel() - if ScrollWheelConnections then return end - local pmouse = LocalPlayer:GetMouse() - ScrollWheelConnections = {} - table.insert(ScrollWheelConnections,pmouse.WheelForward:connect(function() - OnScrollWheelMove(.05) - end)) - table.insert(ScrollWheelConnections,pmouse.WheelBackward:connect(function() - OnScrollWheelMove(-.05) - end)) -end - -function DetachScrollWheel() - if ScrollWheelConnections then - for _,i in pairs(ScrollWheelConnections) do - i:disconnect() - end - end - ScrollWheelConnections=nil -end - -FocusFrame.MouseEnter:connect(function() - if not (IsMinimized.Value or IsTabified.Value) then - AttachScrollWheel() - end -end) -FocusFrame.MouseLeave:connect(function() - --if not (IsMaximized.Value or IsMinimized.Value) then - DetachScrollWheel() - --end -end) - - ------------------------ - -- Scroll Bar functions - ------------------------ ---[[ - updates whether the scroll bar should be showing, if it is showing, updates - the size of it ---]] -function UpdateScrollBarVisibility() - if AreAllEntriesOnScreen() then - ScrollBar.BackgroundTransparency = 1 - else - ScrollBar.BackgroundTransparency = 0 - UpdateScrollBarSize() - end -end ---[[ - updates size of scrollbar depending on how many entries exist ---]] -function UpdateScrollBarSize() - local entryListSize = #MiddleFrameBackgrounds * MiddleTemplate.Size.Y.Scale - local shownAreaSize = ((BottomClipFrame.Position.Y.Scale) + 1) - ScrollBar.Size = UDim2.new(1,0,shownAreaSize/entryListSize,0) - -end ---[[ - updates position of listframe so that no gaps at the bottom or top of the list are visible - updates position of scrollbar to match what parts of the list are visible ---]] -function UpdateScrollPosition() - local minPos = GetMinScroll() - local maxPos = GetMaxScroll() - local scrollLength = maxPos - minPos - - local yscrollpos=math.max(math.min(ListFrame.Position.Y.Scale,maxPos),minPos) - ListFrame.Position=UDim2.new(ListFrame.Position.X.Scale,ListFrame.Position.X.Offset,yscrollpos,ListFrame.Position.Y.Offset) - - local adjustedLength = 1 - ScrollBar.Size.Y.Scale - ScrollBar.Position = UDim2.new(0,0,adjustedLength - (adjustedLength * ((ListFrame.Position.Y.Scale - minPos)/scrollLength)),0) -end - ---[[ - WARNING:this is in a working state, but uses massive hacks - revize when global input is available - Manages scrolling of the playerlist on mouse drag ---]] -function StartDrag() - Delay(0,function() - debugprint('Got Click') - local stopDrag = false - local function dragExit() - debugprint('undone click') - stopDrag = true - end - local startY = nil --AbsoluteToPercent(Mouse.X,Mouse.Y).Y - local StartFrame = ListFrame.Position - local function dragpoll(nx,ny) - if not startY then - startY = AbsoluteToPercent(nx,ny).Y - end - local nowY = AbsoluteToPercent(nx,ny).Y - local newFrameY - if OnIos then - newFrameY = math.max(math.min(StartFrame.Y.Scale + (nowY - startY),GetMaxScroll()),GetMinScroll()) - else - newFrameY = math.max(math.min(StartFrame.Y.Scale - (nowY - startY),GetMaxScroll()),GetMinScroll()) - end - ListFrame.Position = UDim2.new(StartFrame.X.Scale,StartFrame.X.Offset,newFrameY,StartFrame.Y.Offset) - UpdateScrollPosition() - end - Spawn(function() WaitForClick(ScreenGui,dragpoll,dragExit) end) - end) -end - - -function StartMinimizeDrag() - Delay(0,function() - local startTime=tick() - debugprint('Got Click2') - local stopDrag = false - local function dragExit() - debugprint('undone click2') - if tick()-startTime<.25 then --was click - ToggleMinimize() - else --was drag - DidMinimizeDrag = true - if IsMinimized.Value then - ToggleMinimize() - end - end - stopDrag = true - end - local startY = nil - local StartFrame = DefaultBottomClipPos - local function dragpoll(nx,ny) - if not IsMinimized.Value then - - if not startY then - startY = AbsoluteToPercent(nx,ny).Y - end - local nowY = AbsoluteToPercent(nx,ny).Y - local newFrameY - newFrameY = math.min(math.max(StartFrame + (nowY - startY),-1),-1+(#MiddleFrameBackgrounds*MiddleBGTemplate.Size.Y.Scale)) - DefaultBottomClipPos = newFrameY - UpdateMinimize() - ScrollBarFrame.Size= UDim2.new(ScrollBarFrame.Size.X.Scale,0,(DefaultBottomClipPos+BottomClipFrame.Size.Y.Scale),0) - ScrollBarFrame.Position= UDim2.new(ScrollBarFrame.Position.X.Scale,0,1-ScrollBarFrame.Size.Y.Scale,0) - UpdateScrollBarSize() - UpdateScrollPosition() - UpdateScrollBarVisibility() - - end - end - Spawn(function() WaitForClick(ScreenGui,dragpoll,dragExit) end) - end) - -end - - ------------------------------- - -- Input Callback functions - ------------------------------- -IsMaximized.Value=false -IsMinimized.Value=false -IsMaximized.Changed:connect(UpdateMaximize) -IsMinimized.Changed:connect(UpdateMinimize) - -ExtendButton.MouseButton1Down:connect(function() - if(time() - LastClick < ButtonCooldown) or InPopupWaitForClick then return end - LastClick = time() - if IsTabified.Value then - UnTabify() - else - StartMinimizeDrag() - end -end) - -MaximizeButton.MouseButton1Click:connect(function() - if(time() - LastClick < ButtonCooldown) or InPopupWaitForClick then return end - LastClick = time() - if IsTabified.Value then - UnTabify() - elseif not AreNamesExpanded.Value then - AreNamesExpanded.Value = true - BaseUpdate() - else - ToggleMaximize() - end -end) - -MaximizeButton.MouseButton2Click:connect(function() - if(time() - LastClick < ButtonCooldown) or InPopupWaitForClick then return end - LastClick = time() - if IsTabified.Value then - UnTabify() - elseif IsMaximized.Value then - ToggleMaximize() - elseif AreNamesExpanded.Value then - AreNamesExpanded.Value = false - BaseUpdate() - else - Tabify() - end -end) - - -------------------------------- --- MiddleFrames management -------------------------------- ---[[ - adds a background frame to the listframe ---]] -function AddMiddleBGFrame() - local nBGFrame = MiddleBGTemplate:Clone() - nBGFrame.Position = UDim2.new(.5,0,((#MiddleFrameBackgrounds) * nBGFrame.Size.Y.Scale),0) - if (#MiddleFrameBackgrounds+1)%2 ~= 1 then - if IsMaximized.Value then - nBGFrame.Background.Image = 'http://www.jarfeh.xyz/asset/?id='..Images['LargeDark'] - else - nBGFrame.Background.Image = 'http://www.jarfeh.xyz/asset/?id='..Images['midDark'] - end - else - if IsMaximized.Value then - nBGFrame.Background.Image = 'http://www.jarfeh.xyz/asset/?id='..Images['LargeLight'] - else - nBGFrame.Background.Image = 'http://www.jarfeh.xyz/asset/?id='..Images['midLight'] - end - end - nBGFrame.Parent = ListFrame - table.insert(MiddleFrameBackgrounds,nBGFrame) - - if #MiddleFrameBackgrounds 1 do - fSize=fSize-1 - tHeader.FontSize=FONT_SIZES[fSize] - wait(.2) - end - HeaderName.FontSize=tHeader.FontSize - tHeader:Destroy() - end) -end -ScreenGui.Changed:connect(UpdateHeaderNameSize) - ---[[ - called only when the leaderstats object is added to a given player entry - removes old stats, adds any existing stats, and sets up listeners for new stats - @Args: - playerEntry A reference to the ENTRY(table) of the player who had leaderstats added ---]] -function LeaderstatsAdded(playerEntry) - --RemoveAllStats(playerEntry) - local nplayer = playerEntry['Player'] - for _,i in pairs(nplayer.leaderstats:GetChildren()) do - StatAdded(i,playerEntry) - end - nplayer.leaderstats.ChildAdded:connect(function(nchild) StatAdded(nchild,playerEntry) end) - nplayer.leaderstats.ChildRemoved:connect(function(nchild) StatRemoved(nchild,playerEntry) end) -end ---[[ - called when leaderstats object is removed from play in player entry - Note: may not be needed, might be able to just rely on leaderstats added - @Args: - oldLeaderstats leaderstats object to be removed - playerEntry A reference to the ENTRY(table) of the player ---]] -function LeaderstatsRemoved(oldLeaderstats,playerEntry) - while AddingFrameLock do debugprint('waiting to insert '..playerEntry['Player'].Name) wait(1/30) end - AddingFrameLock = true - RemoveAllStats(playerEntry) - AddingFrameLock = false -end - -function ClosePopUpPanel() - if SelectedPlayerEntry then --on random times this will be called by both button and playermouse - local tframe = SelectedPlayerEntry['Frame'] - Spawn(function() TweenBackgroundTransparency(tframe,.5,1,.25) end) - PopUpPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Quad", .5,true) - wait(.1) - InPopupWaitForClick= false - SelectedPlayerEntry = nil - end - -end - ---[[ - prepares the needed popup to be tweened on screen, and updates the position of the popup clip - frame to match the selected player frame's position ---]] -function InitMovingPanel( entry, player) - PopUpClipFrame.Parent= ScreenGui - - if PopUpPanel then - PopUpPanel:Destroy() - end - PopUpPanel= PopUpPanelTemplate:Clone() - PopUpPanel.Parent= PopUpClipFrame - - local nextIndex = 2 - local friendStatus = GetFriendStatus(player) - local showRankMenu = IsPersonalServer and LocalPlayer.PersonalServerRank >= PrivilegeLevel['Admin'] and LocalPlayer.PersonalServerRank > SelectedPlayer.PersonalServerRank - - - local ReportPlayerButton = MakePopupButton(PopUpPanel,'Report Player',0) - ReportPlayerButton.MouseButton1Click:connect(function() ClosePopUpPanel() OpenAbuseDialog() end) - local FriendPlayerButton = MakePopupButton(PopUpPanel,'Friend',1, not showRankMenu and friendStatus~=Enum.FriendStatus.FriendRequestReceived) - FriendPlayerButton.MouseButton1Click:connect(OnFriendButtonSelect) - - - if friendStatus==Enum.FriendStatus.Friend then - FriendPlayerButton:FindFirstChild('ButtonText').Text='UnFriend Player' - elseif friendStatus==Enum.FriendStatus.Unknown or friendStatus==Enum.FriendStatus.NotFriend then - FriendPlayerButton:FindFirstChild('ButtonText').Text='Send Request' - elseif friendStatus==Enum.FriendStatus.FriendRequestSent then - FriendPlayerButton:FindFirstChild('ButtonText').Text='Revoke Request' - elseif friendStatus==Enum.FriendStatus.FriendRequestReceived then - FriendPlayerButton:FindFirstChild('ButtonText').Text='Accept Friend' - local FriendRefuseButton = MakePopupButton(PopUpPanel,'Decline Friend',2,not showRankMenu) - FriendRefuseButton.MouseButton1Click:connect(OnFriendRefuseButtonSelect) - nextIndex=nextIndex+1 - end - - if showRankMenu then - local BanPlayerButton = MakePopupButton(PopUpPanel,'Ban',nextIndex) - local VisitorButton = MakePopupButton(PopUpPanel,'Visitor',nextIndex+1) - local MemberButton = MakePopupButton(PopUpPanel,'Member',nextIndex+2) - local AdminButton = MakePopupButton(PopUpPanel,'Admin',nextIndex+3,true) - - BanPlayerButton.MouseButton1Click:connect(function() ClosePopUpPanel() - OnPrivilegeLevelSelect(player,PrivilegeLevel['Banned'],BanPlayerButton,VisitorButton,MemberButton,AdminButton) - end) - VisitorButton.MouseButton1Click:connect(function() ClosePopUpPanel() - OnPrivilegeLevelSelect(player,PrivilegeLevel['Visitor'],BanPlayerButton,VisitorButton,MemberButton,AdminButton) - end) - MemberButton.MouseButton1Click:connect(function() ClosePopUpPanel() - OnPrivilegeLevelSelect(player,PrivilegeLevel['Member'],BanPlayerButton,VisitorButton,MemberButton,AdminButton) - end) - AdminButton.MouseButton1Click:connect(function() ClosePopUpPanel() - OnPrivilegeLevelSelect(player,PrivilegeLevel['Admin'],BanPlayerButton,VisitorButton,MemberButton,AdminButton) - end) - - HighlightMyRank(SelectedPlayer,BanPlayerButton,VisitorButton,MemberButton,AdminButton) - end - - PopUpPanel:TweenPosition(UDim2.new(0,0,0,0), "Out", "Quad", .5,true) - Delay(1, function() - local tconnection - tconnection = LocalPlayer:GetMouse().Button1Down:connect(function() - tconnection:disconnect() - ClosePopUpPanel() - end) - end) - - local myFrame = entry['Frame'] - -- THIS IS GARBAGE. - -- if I parent to frame to auto update position, it gets clipped - -- sometimes garbage is the only option. - Spawn(function() - --print('got in spawn') - while InPopupWaitForClick do - --print('in position update loop') - PopUpClipFrame.Position=UDim2.new( 0,myFrame.AbsolutePosition.X-PopUpClipFrame.Size.X.Offset,0,myFrame.AbsolutePosition.Y) - wait() - end - end) - -end - ---[[ - Called when a player entry in the leaderboard is clicked - either will highlight entry and start the drag event, or open a popup menu - @Args: - entry the player entry clicked ---]] -function OnPlayerEntrySelect(entry) - if SelectedPlayer then - debugprint('trying to open popup menu!!'.. tostring(entry == SelectedPlayerEntry).. ' ' .. tostring(SelectedPlayer~=LocalPlayer)..' ' .. tostring(SelectedPlayer.userId) ..' '..tostring(LocalPlayer.userId) ) - end - if not InPopupWaitForClick and entry == SelectedPlayerEntry and SelectedPlayer~=LocalPlayer and SelectedPlayer and SelectedPlayer.userId>1 and LocalPlayer.userId>1 then - - entry['Frame'].BackgroundColor3 = Color3.new(0,1,1) - Spawn(function() TweenBackgroundTransparency(entry['Frame'],1,.5,.5) end) - InPopupWaitForClick=true - InitMovingPanel(entry,SelectedPlayer) - - - elseif not InPopupWaitForClick then - --print('starting drag ', entry['Player'].Name) - --movingPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Quad", .5,true) - SelectedPlayerEntry = entry - SelectedPlayer = entry['Player'] - - Delay(1, function() - if not InPopupWaitForClick then - SelectedPlayerEntry = nil - end - end) - StartDrag() - end - - -end - ---[[ - the basic update for the playerlist mode's state, - assures the order and length of the player frames ---]] -function PlayerListModeUpdate() - RecreateScoreColumns(PlayerFrames) - table.sort(PlayerFrames,PlayerSortFunction) - for i,val in ipairs(PlayerFrames) do - MiddleFrames[i] = val['Frame'] - end - for i = #PlayerFrames + 1,#MiddleFrames,1 do - MiddleFrames[i] = nil - end - UpdateMinimize() -end ---[[ - this one's a doozie, happens when a player is added to the game - inits their player frame and player entry, assigns them to a team if possible, - and hooks up their leaderstats - @Args: - nplayer new player object to insert ---]] -function InsertPlayerFrame(nplayer) - while AddingFrameLock do debugprint('waiting to insert '..nplayer.Name) wait(1/30) end - AddingFrameLock = true - - local nFrame = MiddleTemplate:Clone() - WaitForChild(WaitForChild(nFrame,'TitleFrame'),'Title').Text = nplayer.Name - - nFrame.Position = UDim2.new(1,0,((#MiddleFrames) * nFrame.Size.Y.Scale),0) - - local nfriendstatus = GetFriendStatus(nplayer) - - nFrame:FindFirstChild('BCLabel').Image = getMembershipTypeIcon(nplayer.MembershipType,nplayer.Name) - nFrame:FindFirstChild('FriendLabel').Image = getFriendStatusIcon(nfriendstatus) - nFrame.Name = nplayer.Name - WaitForChild(WaitForChild(nFrame,'TitleFrame'),'Title').Text = nplayer.Name - - --move for bc label - nFrame.FriendLabel.Position=nFrame.FriendLabel.Position+UDim2.new(0,17,0,0) - nFrame.TitleFrame.Title.Position=nFrame.TitleFrame.Title.Position+UDim2.new(0,17,0,0) - - if(nFrame:FindFirstChild('FriendLabel').Image ~= '') then - nFrame.TitleFrame.Title.Position=nFrame.TitleFrame.Title.Position+UDim2.new(0,17,0,0) - --nFrame.FriendLabel.Position=nFrame.TitleFrame.Position+UDim2.new(nFrame.TitleFrame.Size.X.Scale,-20+nFrame.TitleFrame.Size.X.Offset,0,0) - end - - if nplayer.Name == LocalPlayer.Name then - nFrame.TitleFrame.Title.Font = 'ArialBold' - nFrame.PlayerScore.Font = 'ArialBold' - ChangeHeaderName(nplayer.Name) - local dropShadow = nFrame.TitleFrame.Title:Clone() - dropShadow.TextColor3 = Color3.new(0,0,0) - dropShadow.TextTransparency=0 - dropShadow.ZIndex=2 - dropShadow.Position=nFrame.TitleFrame.Title.Position+UDim2.new(0,1,0,1) - dropShadow.Name='DropShadow' - dropShadow.Parent= nFrame.TitleFrame - elseif LocalPlayer:IsFriendsWith(nplayer.userId) then - - end - nFrame.TitleFrame.Title.Font = 'ArialBold' - - - nFrame.Parent = ListFrame - nFrame:TweenPosition(UDim2.new(.5,0,((#MiddleFrames) * nFrame.Size.Y.Scale),0), "Out", "Quad", .5,true) - UpdateMinimize() - local nentry = {} - nentry['Frame'] = nFrame - nentry['Player'] = nplayer - nentry['ID'] = AddId - AddId = AddId + 1 - table.insert(PlayerFrames,nentry) - if #TeamFrames~=0 then - - if nplayer.Neutral then - nentry['MyTeam'] = nil - if not NeutralTeam then - AddNeutralTeam() - else - AddPlayerToTeam(NeutralTeam,nentry) - end - - else - local addedToTeam=false - for i,tval in ipairs(TeamFrames) do - if tval['MyTeam'].TeamColor == nplayer.TeamColor then - AddPlayerToTeam(tval,nentry) - nentry['MyTeam'] = tval - addedToTeam=true - end - end - if not addedToTeam then - nentry['MyTeam']=nil - if not NeutralTeam then - AddNeutralTeam() - else - AddPlayerToTeam(NeutralTeam,nentry) - end - nentry['MyTeam'] = NeutralTeam - end - end - - end - - if nplayer:FindFirstChild('leaderstats') then - LeaderstatsAdded(nentry) - end - - nplayer.ChildAdded:connect(function(nchild) - if nchild.Name == 'leaderstats' then - while AddingFrameLock do debugprint('in adding leaderstats lock') wait(1/30) end - AddingFrameLock = true - LeaderstatsAdded(nentry) - AddingFrameLock = false - end - end) - - nplayer.ChildRemoved:connect(function (nchild) - if nplayer==LocalPlayer and nchild.Name == 'leaderstats' then - LeaderstatsRemoved(nchild,nentry) - end - end) - nplayer.Changed:connect(function(prop)PlayerChanged(nentry,prop) end) - - local listener = WaitForChild(nFrame,'ClickListener') - listener.Active = true - listener.MouseButton1Down:connect(function() OnPlayerEntrySelect(nentry) end) - - AddMiddleBGFrame() - BaseUpdate() - AddingFrameLock = false -end - ---[[ - Note:major optimization can be done here - removes this player's frame if it exists, calls base update ---]] -function RemovePlayerFrame(tplayer) - while AddingFrameLock do debugprint('in removing player frame lock') wait(1/30) end - AddingFrameLock = true - - local tteam - for i,key in ipairs(PlayerFrames) do - if tplayer == key['Player'] then - if PopUpClipFrame.Parent == key['Frame'] then - PopUpClipFrame.Parent = nil - end - key['Frame']:Destroy() - tteam=key['MyTeam'] - table.remove(PlayerFrames,i) - end - end - if tteam then - for j,tentry in ipairs(tteam['MyPlayers']) do - if tentry['Player'] == tplayer then - RemovePlayerFromTeam(tteam,j) - end - end - end - - RemoveMiddleBGFrame() - UpdateMinimize() - BaseUpdate() - AddingFrameLock = false -end - -Players.ChildRemoved:connect(RemovePlayerFrame) - ----------------------------- --- Team Callback Functions ----------------------------- ---[[ - turns a list of team entries with sub lists of players into a single ordered - list, in the correct order,and of the correct length - @Args: - tframes the team entries to unroll - outframes the list to unroll these entries into ---]] -function UnrollTeams(tframes,outframes) - local numEntries = 0 - if NeutralTeam and not NeutralTeam['IsHidden'] then - for i,val in ipairs(NeutralTeam['MyPlayers']) do - numEntries = numEntries + 1 - outframes[numEntries] = val['Frame'] - end - numEntries = numEntries + 1 - outframes[numEntries] = NeutralTeam['Frame'] - end - for i,val in ipairs(tframes) do - if not val['IsHidden'] then - for j,pval in ipairs(val.MyPlayers) do - numEntries = numEntries + 1 - outframes[numEntries] = pval['Frame'] - end - numEntries = numEntries + 1 - outframes[numEntries] = val['Frame'] - end - end - -- clear any additional entries from outframes - for i = numEntries + 1,#outframes,1 do - outframes[i] = nil - end -end ---[[ - uses lua's table.sort to sort the teams ---]] -function TeamSortFunc(a,b) - if a['TeamScore'] == b['TeamScore'] then - return a['ID'] < b['ID'] - end - if not a['TeamScore'] then return false end - if not b['TeamScore'] then return true end - return a['TeamScore'] < b['TeamScore'] - -end ---[[ - consider adding lock with wait for performance - sorts each of the team's player lists induvidually, adds up the team scores. - @Args: - tentries table of team entries ---]] -function SortTeams(tentries) - - for i,val in ipairs(tentries) do - - table.sort(val['MyPlayers'],PlayerSortFunction) - AddTeamScores(val) - end - table.sort(tentries,TeamSortFunc) -end ---[[ - base update for team mode, adds up the scores of all teams, sorts them, - then unrolls them into middleframes ---]] -function TeamListModeUpdate() - RecreateScoreColumns(PlayerFrames) - SortTeams(TeamFrames) - if NeutralTeam then - AddTeamScores(NeutralTeam) - --RecreateScoreColumns(NeutralTeam['MyPlayers']) - end - UnrollTeams(TeamFrames,MiddleFrames) -end ---[[ - adds up all the score of this team's players to form the team score - @Args: - team team entry to sum the scores of ---]] -function AddTeamScores(team) - - for j = 1, #ScoreNames,1 do - local i = ScoreNames[j] - local tscore = 0 - for _,j in ipairs(team['MyPlayers']) do - local tval = j['Player']:FindFirstChild('leaderstats') and j['Player'].leaderstats:FindFirstChild(i['Name']) - if tval and not tval:IsA('StringValue') then - tscore = tscore + GetScoreValue((j['Player'].leaderstats)[i['Name'] ]) - end - end - if team['Frame']:FindFirstChild(i['Name']) then - team['Frame'][i['Name'] ].Size = UDim2.new(1 - (ScrollBarFrame.Size.X.Scale * 2),- ((j-1) * SpacingPerStat),1,0) - team['Frame'][i['Name'] ].Text = tostring(tscore) - end - end - UpdateMinimize() -end - ---[[ - finds previous team this player was on, and if it exists calls removeplayerfromteam - @Args - entry Player entry ---]] -function FindRemovePlayerFromTeam(entry) - if entry['MyTeam'] then - for j,oldEntry in ipairs(entry['MyTeam']['MyPlayers']) do - if oldEntry['Player'] == entry['Player'] then - RemovePlayerFromTeam(entry['MyTeam'],j) - return - end - end - elseif NeutralTeam then - for j,oldEntry in ipairs(NeutralTeam['MyPlayers']) do - if oldEntry['Player'] == entry['Player'] then - RemovePlayerFromTeam(NeutralTeam,j) - return - end - end - end -end ---[[ - removes a single player from a given team (not usually called directly) - @Args: - teamEntry team entry to remove player from - index index of player in 'MyPlayers' list to remove ---]] -function RemovePlayerFromTeam(teamEntry,index) - table.remove(teamEntry['MyPlayers'],index) - --if teamEntry['AutoHide'] and #teamEntry['MyPlayers'] == 0 then - if teamEntry==NeutralTeam and #teamEntry['MyPlayers']==0 then - RemoveNeutralTeam() - end -end ---[[ - adds player entry entry to teamentry - removes them from any previous team - @Args: - teamEntry entry of team to add player to - entry player entry to add to this team ---]] -function AddPlayerToTeam(teamEntry,entry) - FindRemovePlayerFromTeam(entry) - table.insert(teamEntry['MyPlayers'],entry) - entry['MyTeam'] = teamEntry - if teamEntry['IsHidden'] then - teamEntry['Frame'].Parent = ListFrame - AddMiddleBGFrame() - end - teamEntry['IsHidden'] = false -end - - -function SetPlayerToTeam(entry) - FindRemovePlayerFromTeam(entry) - -- check to see if team exists, if it does add to that team - local setToTeam = false - for i,tframe in ipairs(TeamFrames) do - -- add my entry on the new team - if tframe['MyTeam'].TeamColor == entry['Player'].TeamColor then - AddPlayerToTeam(tframe,entry) - setToTeam = true - end - end - -- if player was set to an invalid team, then set it back to neutral - if not setToTeam then - entry['MyTeam']=nil - if not NeutralTeam then - AddNeutralTeam() - else AddPlayerToTeam(NeutralTeam,entry) end - end -end - ---[[ - Note:another big one, consiter breaking up - called when any children of player changes - handles 'Neutral', teamColor, Name and MembershipType changes - @Args - entry Player entry changed - property name of property changed ---]] -function PlayerChanged(entry, property) - while PlayerChangedLock do - debugprint('in playerchanged lock') - wait(1/30) - end - PlayerChangedLock=true - if property == 'Neutral' then - -- if player changing to neutral - if entry['Player'].Neutral then - debugprint(entry['Player'].Name..'setting to neutral') - FindRemovePlayerFromTeam(entry) - entry['MyTeam']=nil - if not NeutralTeam then - debugprint(entry['Player'].Name..'creating neutral team') - AddNeutralTeam() - else - debugprint(entry['Player'].Name..'adding to neutral team') - AddPlayerToTeam(NeutralTeam,entry) - end - else -- else player switching to a team, or a weird edgecase - SetPlayerToTeam(entry) - end - BaseUpdate() - elseif property == 'TeamColor' and not entry['Player'].Neutral and entry['Player'] ~= entry['MyTeam'] then - debugprint(entry['Player'].Name..'setting to new team') - SetPlayerToTeam(entry) - BaseUpdate() - elseif property == 'Name' or property == 'MembershipType' then - entry['Frame']:FindFirstChild('BCLabel').Image = getMembershipTypeIcon(entry['Player'].MembershipType,entry['Player'].Name) - entry['Frame'].Name = entry['Player'].Name - entry['Frame'].TitleFrame.Title.Text = entry['Player'].Name - if(entry['Frame'].BCLabel.Image ~= '') then - entry['Frame'].TitleFrame.Title.Position=UDim2.new(.01, 30, .1, 0) - end - if entry['Player'] == LocalPlayer then - entry['Frame'].TitleFrame.DropShadow.Text= entry['Player'].Name - ChangeHeaderName(entry['Player'].Name) - end - BaseUpdate() - end - PlayerChangedLock=false -end - -function OnFriendshipChanged(player,friendStatus) - for _, entry in ipairs(PlayerFrames) do - if entry['Player']==player then - local nicon = getFriendStatusIcon(friendStatus) - if nicon == '' and entry['Frame'].FriendLabel.Image ~= '' then - entry['Frame'].TitleFrame.Title.Position=entry['Frame'].TitleFrame.Title.Position-UDim2.new(0,17,0,0) - elseif nicon ~= '' and entry['Frame'].FriendLabel.Image == '' then - entry['Frame'].TitleFrame.Title.Position=entry['Frame'].TitleFrame.Title.Position+UDim2.new(0,17,0,0) - end - entry['Frame'].FriendLabel.Image = nicon - return - end - end -end - -LocalPlayer.FriendStatusChanged:connect(OnFriendshipChanged) - ---[[ - adds a neutral team if nessisary - Note: a lot of redundant code here, might want to refactor to share a function with insertteamframe ---]] -function AddNeutralTeam() - while NeutralTeamLock do debugprint('in neutral team 2 lock') wait() end - NeutralTeamLock = true - - local defaultTeam = Instance.new('Team') - defaultTeam.TeamColor = BrickColor.new('White') - defaultTeam.Name = 'Neutral' - local nentry = {} - nentry['MyTeam'] = defaultTeam - nentry['MyPlayers'] = {} - nentry['Frame'] = MiddleTemplate:Clone() - WaitForChild(WaitForChild(nentry['Frame'],'TitleFrame'),'Title').Text = defaultTeam.Name - nentry['Frame'].TitleFrame.Position=UDim2.new(nentry['Frame'].TitleFrame.Position.X.Scale,nentry['Frame'].TitleFrame.Position.X.Offset,.1,0) - nentry['Frame'].TitleFrame.Size=UDim2.new(nentry['Frame'].TitleFrame.Size.X.Scale,nentry['Frame'].TitleFrame.Size.X.Offset,.8,0) - --nentry['Frame'].TitleFrame.Title.TextScaled=true - nentry['Frame'].TitleFrame.Title.Font = 'ArialBold' - nentry['Frame'].Position = UDim2.new(1,0,((#MiddleFrames) * nentry['Frame'].Size.Y.Scale),0) - WaitForChild(nentry['Frame'],'ClickListener').MouseButton1Down:connect(StartDrag) - nentry['Frame'].ClickListener.BackgroundColor3 = Color3.new(1,1,1) - nentry['Frame'].ClickListener.BackgroundTransparency = .7 - nentry['Frame'].ClickListener.AutoButtonColor=false - nentry['AutoHide'] = true - nentry['IsHidden'] = true - for _,i in pairs(PlayerFrames) do - if i['Player'].Neutral or not i['MyTeam'] then - AddPlayerToTeam(nentry,i) - end - end - if #nentry['MyPlayers'] > 0 then - NeutralTeam = nentry - UpdateMinimize() - BaseUpdate() - end - NeutralTeamLock = false -end - -function RemoveNeutralTeam() - while NeutralTeamLock do debugprint('in neutral team lock') wait() end - NeutralTeamLock = true - NeutralTeam['Frame']:Destroy() - NeutralTeam=nil - RemoveMiddleBGFrame() - NeutralTeamLock = false -end - ---[[ - ---]] -function TeamScoreChanged(entry,nscore) - WaitForChild(entry['Frame'],'PlayerScore').Text = tostring(nscore) - entry['TeamScore'] = nscore -end ---[[ - called when child added to a team, used for autohide functionality - Note: still has teamscore, consiter removing ---]] -function TeamChildAdded(entry,nchild) - if nchild.Name == 'AutoHide' then - entry['AutoHide'] = true - elseif nchild.Name == 'TeamScore' then - WaitForChild(entry['Frame'],'PlayerScore').Text = tostring(nchild.Value) - entry['TeamScore'] = nchild.Value - nchild.Changed:connect(function() TeamScoreChanged(entry,nchild.Value) end) - end -end ---[[ - called when child added to a team, used for autohide functionality - Note: still has teamscore, consiter removing ---]] -function TeamChildRemoved(entry,nchild) - if nchild.Name == 'AutoHide' then - entry['AutoHide'] = false - elseif nchild.Name == 'TeamScore' then - WaitForChild(entry['Frame'],'PlayerScore').Text = "" - entry['TeamScore'] = nil - end -end - -function TeamChanged(entry, property) - if property=='Name' then - WaitForChild(WaitForChild(entry['Frame'],'TitleFrame'),'Title').Text = entry['MyTeam'].Name - - elseif property=='TeamColor' then - entry['Frame'].ClickListener.BackgroundColor3 = entry['MyTeam'].TeamColor.Color - - for _,i in pairs(TeamFrames) do - if i['MyTeam'].TeamColor == entry['MyTeam'] then - RemoveTeamFrame(entry['MyTeam']) --NO DUPLICATE TEAMS! - end - end - - entry['MyPlayers']={} - - for _,i in pairs(PlayerFrames) do - SetPlayerToTeam(i) - end - BaseUpdate() - end -end - ---[[ - creates team entry and frame for this team, sets up listeners for this team - adds any players intended for this team,Creates neutral team if this is the first team added - Note:might be best to break this into multiple functions to simplify - @Args: - nteam new team object added ---]] -function InsertTeamFrame(nteam) - while AddingFrameLock do debugprint('in adding team frame lock') wait(1/30) end - AddingFrameLock = true - --for _,i in pairs(TeamFrames) do - local nentry = {} - nentry['MyTeam'] = nteam - nentry['MyPlayers'] = {} - nentry['Frame'] = MiddleTemplate:Clone() - WaitForChild(WaitForChild(nentry['Frame'],'TitleFrame'),'Title').Text = nteam.Name - nentry['Frame'].TitleFrame.Title.Font = 'ArialBold' - nentry['Frame'].TitleFrame.Title.FontSize = 'Size18' - nentry['Frame'].TitleFrame.Position=UDim2.new(nentry['Frame'].TitleFrame.Position.X.Scale,nentry['Frame'].TitleFrame.Position.X.Offset,.1,0) - nentry['Frame'].TitleFrame.Size=UDim2.new(nentry['Frame'].TitleFrame.Size.X.Scale,nentry['Frame'].TitleFrame.Size.X.Offset,.8,0) - --nentry['Frame'].TitleFrame.Title.TextScaled=true - nentry['Frame'].Position = UDim2.new(1,0,((#MiddleFrames) * nentry['Frame'].Size.Y.Scale),0) - WaitForChild(nentry['Frame'],'ClickListener').MouseButton1Down:connect(StartDrag) - nentry['Frame'].ClickListener.BackgroundColor3 = nteam.TeamColor.Color - nentry['Frame'].ClickListener.BackgroundTransparency = .7 - nentry['Frame'].ClickListener.AutoButtonColor=false - AddId = AddId + 1 - nentry['ID'] = AddId - nentry['AutoHide'] = false - if nteam:FindFirstChild('AutoHide') then - nentry['AutoHide'] = true - end - if nteam:FindFirstChild('TeamScore') then - TeamChildAdded(nentry,nteam.TeamScore) - - end - - nteam.ChildAdded:connect(function(nchild) TeamChildAdded(nentry,nchild) end) - nteam.ChildRemoved:connect(function(nchild) TeamChildRemoved(nentry,nchild) end) - nteam.Changed:connect(function(prop) TeamChanged(nentry,prop) end) - - for _,i in pairs(PlayerFrames) do - if not i['Player'].Neutral and i['Player'].TeamColor == nteam.TeamColor then - AddPlayerToTeam(nentry,i) - end - end - nentry['IsHidden'] = false - if not nentry['AutoHide'] or #nentry['MyPlayers'] > 0 then - - nentry['Frame'].Parent = ListFrame - nentry['Frame']:TweenPosition(UDim2.new(.5,0,((#MiddleFrames) * nentry['Frame'].Size.Y.Scale),0), "Out", "Quad", .5,true) - AddMiddleBGFrame() - else - nentry['IsHidden'] = true - nentry['Frame'].Parent = nil - end - - table.insert(TeamFrames,nentry) - UpdateMinimize() - BaseUpdate() - if #TeamFrames == 1 and not NeutralTeam then - AddNeutralTeam() - end - AddingFrameLock = false -end ---[[ - removes team from team list - @Args: - nteam Teamobject to remove ---]] -function RemoveTeamFrame(nteam) - while AddingFrameLock do debugprint('in removing team frame lock') wait(1/30) end - AddingFrameLock = true - if IsMinimized.Value then - -- ListFrame.Position = ListFrame.Position + UDim2.new(0,0,MiddleTemplate.Size.Y.Scale,0) - end - local myEntry - for i,key in ipairs(TeamFrames) do - if nteam == key['MyTeam'] then - myEntry = key - key['Frame']:Destroy() - table.remove(TeamFrames,i) - end - end - if #TeamFrames==0 then - if NeutralTeam then - RemoveNeutralTeam() - end - end - for i,key in ipairs(myEntry['MyPlayers']) do - RemovePlayerFromTeam(myEntry,i) - PlayerChanged(key, 'TeamColor') - end - RemoveMiddleBGFrame() - BaseUpdate() - AddingFrameLock = false -end - -function TeamAdded(nteam) - InsertTeamFrame(nteam) -end - -function TeamRemoved(nteam) - RemoveTeamFrame(nteam) -end - --------------------------------- ---[[ - called when ANYTHING changes the state of the playerlist - re-sorts everything,assures correct positions of all elements ---]] -function BaseUpdate() - while BaseUpdateLock do debugprint('in baseupdate lock') wait(1/30) end - BaseUpdateLock = true - --print ('baseupdate') - UpdateStatNames() - - if #TeamFrames == 0 then - PlayerListModeUpdate() - else - TeamListModeUpdate() - end - for i,key in ipairs(MiddleFrames) do - if key.Parent ~= nil then - key:TweenPosition(UDim2.new(.5,0,((#MiddleFrames - (i)) * key.Size.Y.Scale),0), "Out", "Quad", .9,true) - end - end - if not IsMinimized.Value and #MiddleFrames>DefaultEntriesOnScreen then - UpdateScrollPosition() - end - - UpdateMinimize() - - UpdateScrollBarSize() - UpdateScrollPosition() - - UpdateScrollBarVisibility() - --debugprint('EndBaseUpdate') - BaseUpdateLock = false -end - ---[[ - code for attaching tab key to maximizing player list ---]] -game.GuiService:AddKey("\t") -local LastTabTime = time() -game.GuiService.KeyPressed:connect( -function(key) - if key == "\t" then - debugprint('caught tab key') - local modalCheck, isModal = pcall(function() return game.GuiService.IsModalDialog end) - if modalCheck == false or (modalCheck and isModal == false) then - if time() - LastTabTime > 0.4 then - LastTabTime = time() - if IsTabified.Value then - if not IsMaximized.Value then - ScreenGui:TweenPosition(UDim2.new(0, 0, 0,0),'Out','Quad',1,true) - IsMaximized.Value = true - else - ScreenGui:TweenPosition(UDim2.new(NormalBounds.X.Scale, NormalBounds.X.Offset-10, 0,0),'Out','Quad',1,true) - IsMaximized.Value = false - IsMinimized.Value=true - end - else - ToggleMaximize() - end - - end - end - end -end) - - ---------------------------- - -- Hookups and initialization - ---------------------------- -function debugPlayerAdd(p) - InsertPlayerFrame(p) -end - -while not game:GetService('Teams') do wait(1/30) debugprint('Waiting For Teams') end -for _,i in pairs(game.Teams:GetTeams()) do TeamAdded(i) end -for _,i in pairs(Players:GetPlayers()) do Spawn(function() debugPlayerAdd(i) end) end--InsertPlayerFrame(i) end - -game.Teams.ChildAdded:connect(TeamAdded) -game.Teams.ChildRemoved:connect(TeamRemoved) -Players.ChildAdded:connect(function(tplayer) Spawn(function() debugPlayerAdd(tplayer) end) end)--InsertPlayerFrame) - -InitReportAbuse() -AreNamesExpanded.Value = true -BaseUpdate() - - - ---UGGGLY,find a better way later -wait(2) -IsPersonalServer= not not game.Workspace:FindFirstChild("PSVariable") - - ---------------------------- - -- Running Logic - ---------------------------- - - --debug stuffs, will only run for 'newplayerlistisbad' - ---REMOVEME - - - if LocalPlayer.Name == 'newplayerlistisbad' or LocalPlayer.Name == 'Imtotallyadmin' then - debugFrame.Parent = ScreenGui - Spawn(function() - while true do - local str_players='' - for _,i in pairs(game.Players:GetPlayers()) do - str_players= str_players .." " .. i.Name - end - debugplayers.Text=str_players - wait(.5) - end - end) - end - ---[[ -function EnsureValidity() - while true do - --make sure all players are in the player list - --and make sure there are no entries that corespond to non-existant players - local unfoundEntries={} - for k,v in pairs(PlayerFrames) do - unfoundEntries[k] = v - end - --for all players - for _,i in pairs(Players:GetPlayers()) do - local foundPlayer=false - --for all known players - for entryIndex,j in pairs(PlayerFrames) do - -- if I know about this player, tag it - if i==j['Player'] then - foundPlayer=true - unfoundEntries[entryIndex]=nil - end - end - --if this player is not known - if not foundPlayer then - wait(.5) - --do a double check - for _,j in pairs(PlayerFrames) do - if i==j['Player'] then - foundPlayer=true - end - end - if not foundPlayer then - InsertPlayerFrame(i) - debugOutput.Text= "Manual Insertion! " .. i.Name - end - end - - end - --for any additional entries, never found, remove them - for _,j in pairs(unfoundEntries) do - RemovePlayerFrame(j['Player']) - debugOutput.Text= "Player Manual Removal! " ..j['Player'].Name - end - wait(1/30) - --make sure there are no gaps or overlaps in the playerlist - while GetEntryListLength()>#MiddleFrameBackgrounds do - AddMiddleBGFrame() - end - while GetEntryListLength()<#MiddleFrameBackgrounds do - RemoveMiddleBGFrame() - end - wait(1/30) - --remove neutral team if it shouldn't exist - if NeutralTeam and (#NeutralTeam['MyPlayers']==0 or #TeamFrames==0) then - wait(.5) - if NeutralTeam and (#NeutralTeam['MyPlayers']==0 or #TeamFrames==0) then - RemoveNeutralTeam() - debugOutput.Text= "Manual removal of neutral team! " - end - end - wait(1/30) - --do a base update, just ot be sure - BaseUpdate() - wait(1/30) - - end -end ---]] - --quick fix running logic, PLEASE LET ME REPLACE LATER - --Spawn(EnsureValidity) - - diff --git a/maintenance/asset/11744447 b/maintenance/asset/11744447 deleted file mode 100644 index a159560..0000000 --- a/maintenance/asset/11744447 +++ /dev/null @@ -1 +0,0 @@ -NameMy ModelsCategoryId-93955576DescriptionA set of my models.AssetSetId-93955576CreatorNameusabilitymanImageAssetId0SetTypeprivate
NameMy DecalsCategoryId-93955575DescriptionA set of my decals.AssetSetId-93955575CreatorNameusabilitymanImageAssetId21002577SetTypeprivate
NameBasic BuildingCategoryId360380DescriptionAssetSetId360380CreatorNameusabilitymanImageAssetId56455869SetTypeuser
NameAdvanced BuildingCategoryId360378DescriptionAssetSetId360378CreatorNameusabilitymanImageAssetId56455649SetTypeuser
NameHouse KitCategoryId360375DescriptionAssetSetId360375CreatorNameusabilitymanImageAssetId56455420SetTypeuser
NameHouse Interior KitCategoryId360372Description: )AssetSetId360372CreatorNameusabilitymanImageAssetId56455139SetTypeuser
NameLandscapeCategoryId360371DescriptionAssetSetId360371CreatorNameusabilitymanImageAssetId56455006SetTypeuser
NameCastle KitCategoryId360369DescriptionAssetSetId360369CreatorNameusabilitymanImageAssetId56454815SetTypeuser
NameCastle Interior KitCategoryId360365DescriptionAssetSetId360365CreatorNameusabilitymanImageAssetId56454396SetTypeuser
NameSpace KitCategoryId360363DescriptionAssetSetId360363CreatorNameusabilitymanImageAssetId56454184SetTypeuser
NameFun MachinesCategoryId360362DescriptionAssetSetId360362CreatorNameusabilitymanImageAssetId56453969SetTypeuser
NameDeadly MachinesCategoryId360360DescriptionAssetSetId360360CreatorNameusabilitymanImageAssetId56453811SetTypeuser
\ No newline at end of file diff --git a/maintenance/asset/12 b/maintenance/asset/12 deleted file mode 100644 index ba0a94f..0000000 --- a/maintenance/asset/12 +++ /dev/null @@ -1,867 +0,0 @@ -%12% --- This script creates almost all gui elements found in the backpack (warning: there are a lot!) --- TODO: automate this process - -if game.CoreGui.Version < 3 then return end -- peace out if we aren't using the right client - -local gui = script.Parent - --- A couple of necessary functions -local function waitForChild(instance, name) - while not instance:FindFirstChild(name) do - instance.ChildAdded:wait() - end -end -local function waitForProperty(instance, property) - while not instance[property] do - instance.Changed:wait() - end -end - -local function IsTouchDevice() - local touchEnabled = false - pcall(function() touchEnabled = Game:GetService('UserInputService').TouchEnabled end) - return touchEnabled -end - -waitForChild(game,"Players") -waitForProperty(game.Players,"LocalPlayer") -local player = game.Players.LocalPlayer - --- First up is the current loadout -local CurrentLoadout = Instance.new("Frame") -CurrentLoadout.Name = "CurrentLoadout" -CurrentLoadout.Position = UDim2.new(0.5, -300, 1, -85) -CurrentLoadout.Size = UDim2.new(0, 600, 0, 54) -CurrentLoadout.BackgroundTransparency = 1 -CurrentLoadout.RobloxLocked = true -CurrentLoadout.Parent = gui - -local CLBackground = Instance.new('ImageLabel') -CLBackground.Name = 'Background'; -CLBackground.Size = UDim2.new(1.2, 0, 1.2, 0); -CLBackground.Image = "http://www.jarfeh.xyz/asset/?id=96536002" -CLBackground.BackgroundTransparency = 1.0; -CLBackground.Position = UDim2.new(-0.1, 0, -0.1, 0); -CLBackground.ZIndex = 0.0; -CLBackground.Parent = CurrentLoadout -CLBackground.Visible = false - -local BackgroundUp = Instance.new('ImageLabel') -BackgroundUp.Size = UDim2.new(1, 0, 0.025, 1) -BackgroundUp.Position = UDim2.new(0, 0, 0, 0) -BackgroundUp.Image = 'http://www.jarfeh.xyz/asset/?id=97662207' -BackgroundUp.BackgroundTransparency = 1.0 -BackgroundUp.Parent = CLBackground - -local Debounce = Instance.new("BoolValue") -Debounce.Name = "Debounce" -Debounce.RobloxLocked = true -Debounce.Parent = CurrentLoadout - -local BackpackButton = Instance.new("ImageButton") -BackpackButton.RobloxLocked = true -BackpackButton.Visible = false -BackpackButton.Name = "BackpackButton" -BackpackButton.BackgroundTransparency = 1 -BackpackButton.Image = "http://www.jarfeh.xyz/asset/?id=97617958" -BackpackButton.Position = UDim2.new(0.5, -60, 1, -108) -BackpackButton.Size = UDim2.new(0, 120, 0, 18) -waitForChild(gui,"ControlFrame") -BackpackButton.Parent = gui.ControlFrame - -local NumSlots = 9 - -if gui.AbsoluteSize.Y <= 320 then - NumSlots = 3 - CurrentLoadout.Size = UDim2.new(0, 180, 0, 54) - CurrentLoadout.Position = UDim2.new(0.5, -90, 1, -85) -end - - -for i = 0, NumSlots do - local slotFrame = Instance.new("Frame") - slotFrame.RobloxLocked = true - slotFrame.BackgroundColor3 = Color3.new(0,0,0) - slotFrame.BackgroundTransparency = 1 - slotFrame.BorderColor3 = Color3.new(1, 1, 1) - slotFrame.Name = "Slot" .. tostring(i) - slotFrame.ZIndex = 4.0 - if i == 0 then - slotFrame.Position = UDim2.new(0.9, 0, 0, 0) - else - slotFrame.Position = UDim2.new((i - 1) * 0.1, (i-1)* 6,0,0) - end - - - slotFrame.Size = UDim2.new(0, 54, 1, 0) - slotFrame.Parent = CurrentLoadout - - if gui.AbsoluteSize.Y <= 320 then - slotFrame.Position = UDim2.new(0, (i-1)* 60, 0, -50) - print('Well got here', slotFrame, slotFrame.Position.X.Scale, slotFrame.Position.X.Offset) - end - if gui.AbsoluteSize.Y <= 320 and i == 0 then - slotFrame:Destroy() - end -end - -local TempSlot = Instance.new("ImageButton") -TempSlot.Name = "TempSlot" -TempSlot.Active = true -TempSlot.Size = UDim2.new(1,0,1,0) -TempSlot.BackgroundTransparency = 1.0 -TempSlot.Style = 'Custom' -TempSlot.Visible = false -TempSlot.RobloxLocked = true -TempSlot.Parent = CurrentLoadout -TempSlot.ZIndex = 3.0 - - local slotBackground = Instance.new('ImageLabel') - slotBackground.Name = 'Background' - slotBackground.BackgroundTransparency = 1.0 - slotBackground.Image = 'http://www.jarfeh.xyz/asset/?id=97613075' - slotBackground.Size = UDim2.new(1, 0, 1, 0) - slotBackground.Parent = TempSlot - - local HighLight = Instance.new('ImageLabel') - HighLight.Name = 'Highlight' - HighLight.BackgroundTransparency = 1.0 - HighLight.Image = 'http://www.jarfeh.xyz/asset/?id=97643886' - HighLight.Size = UDim2.new(1, 0, 1, 0) - --HighLight.Parent = TempSlot - HighLight.Visible = false - - -- TempSlot Children - local GearReference = Instance.new("ObjectValue") - GearReference.Name = "GearReference" - GearReference.RobloxLocked = true - GearReference.Parent = TempSlot - - - local ToolTipLabel = Instance.new("TextLabel") - ToolTipLabel.Name = "ToolTipLabel" - ToolTipLabel.RobloxLocked = true - ToolTipLabel.Text = "" - ToolTipLabel.BackgroundTransparency = 0.5 - ToolTipLabel.BorderSizePixel = 0 - ToolTipLabel.Visible = false - ToolTipLabel.TextColor3 = Color3.new(1,1,1) - ToolTipLabel.BackgroundColor3 = Color3.new(0,0,0) - ToolTipLabel.TextStrokeTransparency = 0 - ToolTipLabel.Font = Enum.Font.ArialBold - ToolTipLabel.FontSize = Enum.FontSize.Size14 - --ToolTipLabel.TextWrap = true - ToolTipLabel.Size = UDim2.new(1,60,0,20) - ToolTipLabel.Position = UDim2.new(0,-30,0,-30) - ToolTipLabel.Parent = TempSlot - - - local Kill = Instance.new("BoolValue") - Kill.Name = "Kill" - Kill.RobloxLocked = true - Kill.Parent = TempSlot - - local GearImage = Instance.new("ImageLabel") - GearImage.Name = "GearImage" - GearImage.BackgroundTransparency = 1 - GearImage.Position = UDim2.new(0, 0, 0, 0) - GearImage.Size = UDim2.new(1, 0, 1, 0) - GearImage.ZIndex = 5.0 - GearImage.RobloxLocked = true - GearImage.Parent = TempSlot - - local SlotNumber = Instance.new("TextLabel") - SlotNumber.Name = "SlotNumber" - SlotNumber.BackgroundTransparency = 1 - SlotNumber.BorderSizePixel = 0 - SlotNumber.Font = Enum.Font.ArialBold - SlotNumber.FontSize = Enum.FontSize.Size18 - SlotNumber.Position = UDim2.new(0, 0, 0, 0) - SlotNumber.Size = UDim2.new(0,10,0,15) - SlotNumber.TextColor3 = Color3.new(1,1,1) - SlotNumber.TextTransparency = 0 - SlotNumber.TextXAlignment = Enum.TextXAlignment.Left - SlotNumber.TextYAlignment = Enum.TextYAlignment.Bottom - SlotNumber.RobloxLocked = true - SlotNumber.Parent = TempSlot - SlotNumber.ZIndex = 5 - - if IsTouchDevice() then - SlotNumber.Visible = false - end - - local SlotNumberDownShadow = SlotNumber:Clone() - SlotNumberDownShadow.Name = "SlotNumberDownShadow" - SlotNumberDownShadow.TextColor3 = Color3.new(0,0,0) - SlotNumberDownShadow.Position = UDim2.new(0, 1, 0, -1) - SlotNumberDownShadow.Parent = TempSlot - SlotNumberDownShadow.ZIndex = 2 - - local SlotNumberUpShadow = SlotNumberDownShadow:Clone() - SlotNumberUpShadow.Name = "SlotNumberUpShadow" - SlotNumberUpShadow.Position = UDim2.new(0, -1, 0, -1) - SlotNumberUpShadow.Parent = TempSlot - - local GearText = Instance.new("TextLabel") - GearText.RobloxLocked = true - GearText.Name = "GearText" - GearText.BackgroundTransparency = 1 - GearText.Font = Enum.Font.Arial - GearText.FontSize = Enum.FontSize.Size14 - GearText.Position = UDim2.new(0,-8,0,-8) - GearText.Size = UDim2.new(1,16,1,16) - GearText.Text = "" - GearText.TextColor3 = Color3.new(1,1,1) - GearText.TextWrap = true - GearText.Parent = TempSlot - ---- Great, now lets make the inventory! - -local Backpack = Instance.new("Frame") -Backpack.RobloxLocked = true -Backpack.Visible = false -Backpack.Name = "Backpack" -Backpack.Position = UDim2.new(0.5, 0, 0.5, 0) -Backpack.BackgroundColor3 = Color3.new(32/255, 32/255, 32/255) -Backpack.BackgroundTransparency = 0.0 -Backpack.BorderSizePixel = 0 -Backpack.Parent = gui -Backpack.Active = true - - -- Backpack Children - local SwapSlot = Instance.new("BoolValue") - SwapSlot.RobloxLocked = true - SwapSlot.Name = "SwapSlot" - SwapSlot.Parent = Backpack - - -- SwapSlot Children - local Slot = Instance.new("IntValue") - Slot.RobloxLocked = true - Slot.Name = "Slot" - Slot.Parent = SwapSlot - - local GearButton = Instance.new("ObjectValue") - GearButton.RobloxLocked = true - GearButton.Name = "GearButton" - GearButton.Parent = SwapSlot - - local Tabs = Instance.new("Frame") - Tabs.Name = "Tabs" - Tabs.Visible = false - Tabs.Active = false - Tabs.RobloxLocked = true - Tabs.BackgroundColor3 = Color3.new(0,0,0) - Tabs.BackgroundTransparency = 0.08 - Tabs.BorderSizePixel = 0 - Tabs.Position = UDim2.new(0,0,-0.1,-4) - Tabs.Size = UDim2.new(1,0,0.1,4) - Tabs.Parent = Backpack - - -- Tabs Children - - local tabLine = Instance.new("Frame") - tabLine.RobloxLocked = true - tabLine.Name = "TabLine" - tabLine.BackgroundColor3 = Color3.new(53/255, 53/255, 53/255) - tabLine.BorderSizePixel = 0 - tabLine.Position = UDim2.new(0,5,1,-4) - tabLine.Size = UDim2.new(1,-10,0,4) - tabLine.ZIndex = 2 - tabLine.Parent = Tabs - - local InventoryButton = Instance.new("TextButton") - InventoryButton.RobloxLocked = true - InventoryButton.Name = "InventoryButton" - InventoryButton.Size = UDim2.new(0,60,0,30) - InventoryButton.Position = UDim2.new(0,7,1,-31) - InventoryButton.BackgroundColor3 = Color3.new(1,1,1) - InventoryButton.BorderColor3 = Color3.new(1,1,1) - InventoryButton.Font = Enum.Font.ArialBold - InventoryButton.FontSize = Enum.FontSize.Size18 - InventoryButton.Text = "Gear" - InventoryButton.AutoButtonColor = false - InventoryButton.TextColor3 = Color3.new(0,0,0) - InventoryButton.Selected = true - InventoryButton.Active = true - InventoryButton.ZIndex = 3 - InventoryButton.Parent = Tabs - - if game.CoreGui.Version >= 8 then - local WardrobeButton = Instance.new("TextButton") - WardrobeButton.RobloxLocked = true - WardrobeButton.Name = "WardrobeButton" - WardrobeButton.Size = UDim2.new(0,90,0,30) - WardrobeButton.Position = UDim2.new(0,77,1,-31) - WardrobeButton.BackgroundColor3 = Color3.new(0,0,0) - WardrobeButton.BorderColor3 = Color3.new(1,1,1) - WardrobeButton.Font = Enum.Font.ArialBold - WardrobeButton.FontSize = Enum.FontSize.Size18 - WardrobeButton.Text = "Wardrobe" - WardrobeButton.AutoButtonColor = false - WardrobeButton.TextColor3 = Color3.new(1,1,1) - WardrobeButton.Selected = false - WardrobeButton.Active = true - WardrobeButton.Parent = Tabs - end - - local closeButton = Instance.new("TextButton") - closeButton.RobloxLocked = true - closeButton.Name = "CloseButton" - closeButton.Font = Enum.Font.ArialBold - closeButton.FontSize = Enum.FontSize.Size24 - closeButton.Position = UDim2.new(1,-33,0,4) - closeButton.Size = UDim2.new(0,30,0,30) - closeButton.Style = Enum.ButtonStyle.RobloxButton - closeButton.Text = "" - closeButton.TextColor3 = Color3.new(1,1,1) - closeButton.Parent = Tabs - closeButton.Modal = true - - --closeButton child - local XImage = Instance.new("ImageLabel") - XImage.RobloxLocked = true - XImage.Name = "XImage" - game:GetService("ContentProvider"):Preload("http://www.jarfeh.xyz/asset/?id=75547445") - XImage.Image = "http://www.jarfeh.xyz/asset/?id=75547445" --TODO: move to rbxasset - XImage.BackgroundTransparency = 1 - XImage.Position = UDim2.new(-.25,-1,-.25,-1) - XImage.Size = UDim2.new(1.5,2,1.5,2) - XImage.ZIndex = 2 - XImage.Parent = closeButton - - -- Generic Search gui used across backpack - local SearchFrame = Instance.new("Frame") - SearchFrame.RobloxLocked = true - SearchFrame.Name = "SearchFrame" - SearchFrame.BackgroundTransparency = 1 - SearchFrame.Position = UDim2.new(1,-220,0,2) - SearchFrame.Size = UDim2.new(0,220,0,24) - SearchFrame.Parent = Backpack - - -- SearchFrame Children - local SearchButton = Instance.new("ImageButton") - SearchButton.RobloxLocked = true - SearchButton.Name = "SearchButton" - SearchButton.Size = UDim2.new(0,25,0,25) - SearchButton.BackgroundTransparency = 1 - SearchButton.Image = "rbxasset://textures/ui/SearchIcon.png" - SearchButton.Parent = SearchFrame - - local SearchBoxFrame = Instance.new("TextButton") - SearchBoxFrame.RobloxLocked = true - SearchBoxFrame.Position = UDim2.new(0,25,0,0) - SearchBoxFrame.Size = UDim2.new(1,-28,0,26) - SearchBoxFrame.Name = "SearchBoxFrame" - SearchBoxFrame.Text = "" - SearchBoxFrame.Style = Enum.ButtonStyle.RobloxButton - SearchBoxFrame.Parent = SearchFrame - - -- SearchBoxFrame Children - local SearchBox = Instance.new("TextBox") - SearchBox.RobloxLocked = true - SearchBox.Name = "SearchBox" - SearchBox.BackgroundTransparency = 1 - SearchBox.Font = Enum.Font.ArialBold - SearchBox.FontSize = Enum.FontSize.Size12 - SearchBox.Position = UDim2.new(0,-5,0,-5) - SearchBox.Size = UDim2.new(1,10,1,10) - SearchBox.TextColor3 = Color3.new(1,1,1) - SearchBox.TextXAlignment = Enum.TextXAlignment.Left - SearchBox.ZIndex = 2 - SearchBox.TextWrap = true - SearchBox.Text = "Search..." - SearchBox.Parent = SearchBoxFrame - - - local ResetButton = Instance.new("TextButton") - ResetButton.RobloxLocked = true - ResetButton.Visible = false - ResetButton.Name = "ResetButton" - ResetButton.Position = UDim2.new(1,-26,0,3) - ResetButton.Size = UDim2.new(0,20,0,20) - ResetButton.Style = Enum.ButtonStyle.RobloxButtonDefault - ResetButton.Text = "X" - ResetButton.TextColor3 = Color3.new(1,1,1) - ResetButton.Font = Enum.Font.ArialBold - ResetButton.FontSize = Enum.FontSize.Size18 - ResetButton.ZIndex = 3 - ResetButton.Parent = SearchFrame - -------------------------------- GEAR ------------------------------------------------------- - local Gear = Instance.new("Frame") - Gear.Name = "Gear" - Gear.RobloxLocked = true - Gear.BackgroundTransparency = 1 - Gear.Size = UDim2.new(1,0,1,0) - Gear.Parent = Backpack - - -- Gear Children - local AssetsList = Instance.new("Frame") - AssetsList.RobloxLocked = true - AssetsList.Name = "AssetsList" - AssetsList.BackgroundTransparency = 1 - AssetsList.Size = UDim2.new(0.2,0,1,0) - AssetsList.Style = Enum.FrameStyle.RobloxSquare - AssetsList.Visible = false - AssetsList.Parent = Gear - - local GearGrid = Instance.new("Frame") - GearGrid.RobloxLocked = true - GearGrid.Name = "GearGrid" - GearGrid.Size = UDim2.new(0.95, 0, 1, 0) - GearGrid.BackgroundTransparency = 1 - GearGrid.Parent = Gear - - - local GearButton = Instance.new("ImageButton") - GearButton.RobloxLocked = true - GearButton.Visible = false - GearButton.Name = "GearButton" - GearButton.Size = UDim2.new(0, 54, 0, 54) - GearButton.Style = 'Custom' - GearButton.Parent = GearGrid - GearButton.BackgroundTransparency = 1.0 - - local slotBackground = Instance.new('ImageLabel') - slotBackground.Name = 'Background' - slotBackground.BackgroundTransparency = 1.0 - slotBackground.Image = 'http://www.jarfeh.xyz/asset/?id=97613075' - slotBackground.Size = UDim2.new(1, 0, 1, 0) - slotBackground.Parent = GearButton - - - -- GearButton Children - local GearReference = Instance.new("ObjectValue") - GearReference.RobloxLocked = true - GearReference.Name = "GearReference" - GearReference.Parent = GearButton - - local GreyOutButton = Instance.new("Frame") - GreyOutButton.RobloxLocked = true - GreyOutButton.Name = "GreyOutButton" - GreyOutButton.BackgroundTransparency = 0.5 - GreyOutButton.Size = UDim2.new(1,0,1,0) - GreyOutButton.Active = true - GreyOutButton.Visible = false - GreyOutButton.ZIndex = 3 - GreyOutButton.Parent = GearButton - - local GearText = Instance.new("TextLabel") - GearText.RobloxLocked = true - GearText.Name = "GearText" - GearText.BackgroundTransparency = 1 - GearText.Font = Enum.Font.Arial - GearText.FontSize = Enum.FontSize.Size14 - GearText.Position = UDim2.new(0,-8,0,-8) - GearText.Size = UDim2.new(1,16,1,16) - GearText.Text = "" - GearText.ZIndex = 2 - GearText.TextColor3 = Color3.new(1,1,1) - GearText.TextWrap = true - GearText.Parent = GearButton - - local GearGridScrollingArea = Instance.new("Frame") - GearGridScrollingArea.RobloxLocked = true - GearGridScrollingArea.Name = "GearGridScrollingArea" - GearGridScrollingArea.Position = UDim2.new(1, -19, 0, 35) - GearGridScrollingArea.Size = UDim2.new(0, 17, 1, -45) - GearGridScrollingArea.BackgroundTransparency = 1 - GearGridScrollingArea.Parent = Gear - - local GearLoadouts = Instance.new("Frame") - GearLoadouts.RobloxLocked = true - GearLoadouts.Name = "GearLoadouts" - GearLoadouts.BackgroundTransparency = 1 - GearLoadouts.Position = UDim2.new(0.7,23,0.5,1) - GearLoadouts.Size = UDim2.new(0.3,-23,0.5,-1) - GearLoadouts.Parent = Gear - GearLoadouts.Visible = false - - -- GearLoadouts Children - local GearLoadoutsHeader = Instance.new("Frame") - GearLoadoutsHeader.RobloxLocked = true - GearLoadoutsHeader.Name = "GearLoadoutsHeader" - GearLoadoutsHeader.BackgroundColor3 = Color3.new(0,0,0) - GearLoadoutsHeader.BackgroundTransparency = 0.2 - GearLoadoutsHeader.BorderColor3 = Color3.new(1,0,0) - GearLoadoutsHeader.Size = UDim2.new(1,2,0.15,-1) - GearLoadoutsHeader.Parent = GearLoadouts - - -- GearLoadoutsHeader Children - local LoadoutsHeaderText = Instance.new("TextLabel") - LoadoutsHeaderText.RobloxLocked = true - LoadoutsHeaderText.Name = "LoadoutsHeaderText" - LoadoutsHeaderText.BackgroundTransparency = 1 - LoadoutsHeaderText.Font = Enum.Font.ArialBold - LoadoutsHeaderText.FontSize = Enum.FontSize.Size18 - LoadoutsHeaderText.Size = UDim2.new(1,0,1,0) - LoadoutsHeaderText.Text = "Loadouts" - LoadoutsHeaderText.TextColor3 = Color3.new(1,1,1) - LoadoutsHeaderText.Parent = GearLoadoutsHeader - - local GearLoadoutsScrollingArea = GearGridScrollingArea:clone() - GearLoadoutsScrollingArea.RobloxLocked = true - GearLoadoutsScrollingArea.Name = "GearLoadoutsScrollingArea" - GearLoadoutsScrollingArea.Position = UDim2.new(1,-15,0.15,2) - GearLoadoutsScrollingArea.Size = UDim2.new(0,17,0.85,-2) - GearLoadoutsScrollingArea.Parent = GearLoadouts - - local LoadoutsList = Instance.new("Frame") - LoadoutsList.RobloxLocked = true - LoadoutsList.Name = "LoadoutsList" - LoadoutsList.Position = UDim2.new(0,0,0.15,2) - LoadoutsList.Size = UDim2.new(1,-17,0.85,-2) - LoadoutsList.Style = Enum.FrameStyle.RobloxSquare - LoadoutsList.Parent = GearLoadouts - - local GearPreview = Instance.new("Frame") - GearPreview.RobloxLocked = true - GearPreview.Name = "GearPreview" - GearPreview.Position = UDim2.new(0.7,23,0,0) - GearPreview.Size = UDim2.new(0.3,-28,0.5,-1) - GearPreview.BackgroundTransparency = 1 - GearPreview.ZIndex = 7 - GearPreview.Parent = Gear - - -- GearPreview Children - local GearStats = Instance.new("Frame") - GearStats.RobloxLocked = true - GearStats.Name = "GearStats" - GearStats.BackgroundTransparency = 1 - GearStats.Position = UDim2.new(0,0,0.75,0) - GearStats.Size = UDim2.new(1,0,0.25,0) - GearStats.ZIndex = 8 - GearStats.Parent = GearPreview - - -- GearStats Children - local GearName = Instance.new("TextLabel") - GearName.RobloxLocked = true - GearName.Name = "GearName" - GearName.BackgroundTransparency = 1 - GearName.Font = Enum.Font.ArialBold - GearName.FontSize = Enum.FontSize.Size18 - GearName.Position = UDim2.new(0,-3,0,0) - GearName.Size = UDim2.new(1,6,1,5) - GearName.Text = "" - GearName.TextColor3 = Color3.new(1,1,1) - GearName.TextWrap = true - GearName.ZIndex = 9 - GearName.Parent = GearStats - - local GearImage = Instance.new("ImageLabel") - GearImage.RobloxLocked = true - GearImage.Name = "GearImage" - GearImage.Image = "" - GearImage.BackgroundTransparency = 1 - GearImage.Position = UDim2.new(0.125,0,0,0) - GearImage.Size = UDim2.new(0.75,0,0.75,0) - GearImage.ZIndex = 8 - GearImage.Parent = GearPreview - - --GearImage Children - local GearIcons = Instance.new("Frame") - GearIcons.BackgroundColor3 = Color3.new(0,0,0) - GearIcons.BackgroundTransparency = 0.5 - GearIcons.BorderSizePixel = 0 - GearIcons.RobloxLocked = true - GearIcons.Name = "GearIcons" - GearIcons.Position = UDim2.new(0.4,2,0.85,-2) - GearIcons.Size = UDim2.new(0.6,0,0.15,0) - GearIcons.Visible = false - GearIcons.ZIndex = 9 - GearIcons.Parent = GearImage - - -- GearIcons Children - local GenreImage = Instance.new("ImageLabel") - GenreImage.RobloxLocked = true - GenreImage.Name = "GenreImage" - GenreImage.BackgroundColor3 = Color3.new(102/255,153/255,1) - GenreImage.BackgroundTransparency = 0.5 - GenreImage.BorderSizePixel = 0 - GenreImage.Size = UDim2.new(0.25,0,1,0) - GenreImage.Parent = GearIcons - - local AttributeOneImage = GenreImage:clone() - AttributeOneImage.RobloxLocked = true - AttributeOneImage.Name = "AttributeOneImage" - AttributeOneImage.BackgroundColor3 = Color3.new(1,51/255,0) - AttributeOneImage.Position = UDim2.new(0.25,0,0,0) - AttributeOneImage.Parent = GearIcons - - local AttributeTwoImage = GenreImage:clone() - AttributeTwoImage.RobloxLocked = true - AttributeTwoImage.Name = "AttributeTwoImage" - AttributeTwoImage.BackgroundColor3 = Color3.new(153/255,1,153/255) - AttributeTwoImage.Position = UDim2.new(0.5,0,0,0) - AttributeTwoImage.Parent = GearIcons - - local AttributeThreeImage = GenreImage:clone() - AttributeThreeImage.RobloxLocked = true - AttributeThreeImage.Name = "AttributeThreeImage" - AttributeThreeImage.BackgroundColor3 = Color3.new(0,0.5,0.5) - AttributeThreeImage.Position = UDim2.new(0.75,0,0,0) - AttributeThreeImage.Parent = GearIcons - -------------------------------- WARDROBE ------------------------------------------------------- - if game.CoreGui.Version < 8 then - -- no need for this to stick around, we aren't ready for wardrobe - script:remove() - return - end - - local function makeCharFrame(frameName, parent) - local frame = Instance.new("Frame") - frame.RobloxLocked = true - frame.Size = UDim2.new(1,0,1,-70) - frame.Position = UDim2.new(0,0,0,20) - frame.Name = frameName - frame.BackgroundTransparency = 1 - frame.Parent = parent - frame.Visible = false - return frame - end - local function makeZone( zoneName, image, size, position, parent ) - local zone = Instance.new("ImageLabel") - zone.RobloxLocked = true - zone.Name = zoneName - zone.Image = image - zone.Size = size - zone.BackgroundTransparency = 1 - zone.Position = position - zone.Parent = parent - return zone - end - local function makeStyledButton( buttonName, size, position, parent, buttonStyle ) - local button = Instance.new("ImageButton") - button.RobloxLocked = true - button.Name = buttonName - button.Size = size - button.Position = position - if buttonStyle then - button.Style = buttonStyle - else - button.BackgroundColor3 = Color3.new(0,0,0) - button.BorderColor3 = Color3.new(1,1,1) - end - button.Parent = parent - return button - end - local function makeTextLabel( TextLabelName,text,position,parent ) - local label = Instance.new("TextLabel") - label.RobloxLocked = true - label.BackgroundTransparency = 1 - label.Size = UDim2.new(0,32,0,14) - label.Name = TextLabelName - label.Font = Enum.Font.Arial - label.TextColor3 = Color3.new(1,1,1) - label.FontSize = Enum.FontSize.Size14 - label.Text = text - label.Position = position - label.Parent = parent - end - - - local Wardrobe = Instance.new("Frame") - Wardrobe.Name = "Wardrobe" - Wardrobe.RobloxLocked = true - Wardrobe.BackgroundTransparency = 1 - Wardrobe.Visible = false - Wardrobe.Size = UDim2.new(1,0,1,0) - Wardrobe.Parent = Backpack - - local AssetList = Instance.new("Frame") - AssetList.RobloxLocked = true - AssetList.Name = "AssetList" - AssetList.Position = UDim2.new(0,4,0,5) - AssetList.Size = UDim2.new(0,85,1,-5) - AssetList.BackgroundTransparency = 1 - AssetList.Visible = true - AssetList.Parent = Wardrobe - - local PreviewAssetFrame = Instance.new("Frame") - PreviewAssetFrame.RobloxLocked = true - PreviewAssetFrame.Name = "PreviewAssetFrame" - PreviewAssetFrame.BackgroundTransparency = 1 - PreviewAssetFrame.Position = UDim2.new(1,-240,0,30) - PreviewAssetFrame.Size = UDim2.new(0,250,0,250) - PreviewAssetFrame.Parent = Wardrobe - - local PreviewAssetBacking = Instance.new("TextButton") - PreviewAssetBacking.RobloxLocked = true - PreviewAssetBacking.Name = "PreviewAssetBacking" - PreviewAssetBacking.Active = false - PreviewAssetBacking.Text = "" - PreviewAssetBacking.AutoButtonColor = false - PreviewAssetBacking.Size = UDim2.new(1,0,1,0) - PreviewAssetBacking.Style = Enum.ButtonStyle.RobloxButton - PreviewAssetBacking.Visible = false - PreviewAssetBacking.ZIndex = 9 - PreviewAssetBacking.Parent = PreviewAssetFrame - - local PreviewAssetImage = Instance.new("ImageLabel") - PreviewAssetImage.RobloxLocked = true - PreviewAssetImage.Name = "PreviewAssetImage" - PreviewAssetImage.BackgroundTransparency = 0.8 - PreviewAssetImage.Position = UDim2.new(0.5,-100,0,0) - PreviewAssetImage.Size = UDim2.new(0,200,0,200) - PreviewAssetImage.BorderSizePixel = 0 - PreviewAssetImage.ZIndex = 10 - PreviewAssetImage.Parent = PreviewAssetBacking - - local AssetNameLabel = Instance.new("TextLabel") - AssetNameLabel.Name = "AssetNameLabel" - AssetNameLabel.RobloxLocked = true - AssetNameLabel.BackgroundTransparency = 1 - AssetNameLabel.Position = UDim2.new(0,0,1,-20) - AssetNameLabel.Size = UDim2.new(0.5,0,0,24) - AssetNameLabel.ZIndex = 10 - AssetNameLabel.Font = Enum.Font.Arial - AssetNameLabel.Text = "" - AssetNameLabel.TextColor3 = Color3.new(1,1,1) - AssetNameLabel.TextScaled = true - AssetNameLabel.Parent = PreviewAssetBacking - - local AssetTypeLabel = AssetNameLabel:clone() - AssetTypeLabel.RobloxLocked = true - AssetTypeLabel.Name = "AssetTypeLabel" - AssetTypeLabel.TextScaled = false - AssetTypeLabel.FontSize = Enum.FontSize.Size18 - AssetTypeLabel.Position = UDim2.new(0.5,3,1,-20) - AssetTypeLabel.Parent = PreviewAssetBacking - - - - local PreviewButton = Instance.new("TextButton") - PreviewButton.RobloxLocked = true - PreviewButton.Name = "PreviewButton" - PreviewButton.Text = "Rotate" - PreviewButton.BackgroundColor3 = Color3.new(0,0,0) - PreviewButton.BackgroundTransparency = 0.5 - PreviewButton.BorderColor3 = Color3.new(1,1,1) - PreviewButton.Position = UDim2.new(1.2,-62,1,-50) - PreviewButton.Size = UDim2.new(0,125,0,50) - PreviewButton.Font = Enum.Font.ArialBold - PreviewButton.FontSize = Enum.FontSize.Size24 - PreviewButton.TextColor3 = Color3.new(1,1,1) - PreviewButton.TextWrapped = true - PreviewButton.TextStrokeTransparency = 0 - PreviewButton.Parent = Wardrobe - - local CharacterPane = Instance.new("Frame") - CharacterPane.RobloxLocked = true - CharacterPane.Name = "CharacterPane" - CharacterPane.Position = UDim2.new(1,-220,0,32) - CharacterPane.Size = UDim2.new(0,220,1,-40) - CharacterPane.BackgroundTransparency = 1 - CharacterPane.Visible = true - CharacterPane.Parent = Wardrobe - - --CharacterPane Children - local FaceFrame = makeCharFrame("FacesFrame", CharacterPane) - game:GetService("ContentProvider"):Preload("http://www.jarfeh.xyz/asset/?id=75460621") - makeZone("FaceZone","http://www.jarfeh.xyz/asset/?id=75460621",UDim2.new(0,157,0,137),UDim2.new(0.5,-78,0.5,-68),FaceFrame) - makeStyledButton("Face",UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-135),FaceFrame) - - local HeadFrame = makeCharFrame("HeadsFrame", CharacterPane) - makeZone("FaceZone","http://www.jarfeh.xyz/asset/?id=75460621",UDim2.new(0,157,0,137),UDim2.new(0.5,-78,0.5,-68),HeadFrame) - makeStyledButton("Head",UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-135),HeadFrame) - - local HatsFrame = makeCharFrame("HatsFrame", CharacterPane) - game:GetService("ContentProvider"):Preload("http://www.jarfeh.xyz/asset/?id=75457888") - local HatsZone = makeZone("HatsZone","http://www.jarfeh.xyz/asset/?id=75457888",UDim2.new(0,186,0,184),UDim2.new(0.5,-93,0.5,-100), HatsFrame) - makeStyledButton("Hat1Button",UDim2.new(0,64,0,64),UDim2.new(0,-1,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) - makeStyledButton("Hat2Button",UDim2.new(0,64,0,64),UDim2.new(0,63,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) - makeStyledButton("Hat3Button",UDim2.new(0,64,0,64),UDim2.new(0,127,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) - - local PantsFrame = makeCharFrame("PantsFrame", CharacterPane) - game:GetService("ContentProvider"):Preload("http://www.jarfeh.xyz/asset/?id=75457920") - makeZone("PantsZone","http://www.jarfeh.xyz/asset/?id=75457920",UDim2.new(0,121,0,99),UDim2.new(0.5,-60,0.5,-100),PantsFrame) - - local pantFrame = Instance.new("Frame") - pantFrame.RobloxLocked = true - pantFrame.Size = UDim2.new(0,25,0,56) - pantFrame.Position = UDim2.new(0.5,-26,0.5,0) - pantFrame.BackgroundColor3 = Color3.new(0,0,0) - pantFrame.BorderColor3 = Color3.new(1,1,1) - pantFrame.Name = "PantFrame" - pantFrame.Parent = PantsFrame - - local otherPantFrame = pantFrame:clone() - otherPantFrame.Position = UDim2.new(0.5,3,0.5,0) - otherPantFrame.RobloxLocked = true - otherPantFrame.Parent = PantsFrame - - local CurrentPants = Instance.new("ImageButton") - CurrentPants.RobloxLocked = true - CurrentPants.BackgroundTransparency = 1 - CurrentPants.ZIndex = 2 - CurrentPants.Name = "CurrentPants" - CurrentPants.Position = UDim2.new(0.5,-31,0.5,-4) - CurrentPants.Size = UDim2.new(0,54,0,59) - CurrentPants.Parent = PantsFrame - - local MeshFrame = makeCharFrame("PackagesFrame", CharacterPane) - local torsoButton = makeStyledButton("TorsoMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) - makeTextLabel("TorsoLabel","Torso",UDim2.new(0.5,-16,0,-25),torsoButton) - local leftLegButton = makeStyledButton("LeftLegMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,0,0.5,-25),MeshFrame,Enum.ButtonStyle.RobloxButton) - makeTextLabel("LeftLegLabel","Left Leg",UDim2.new(0.5,-16,0,-25),leftLegButton) - local rightLegButton = makeStyledButton("RightLegMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-64,0.5,-25),MeshFrame,Enum.ButtonStyle.RobloxButton) - makeTextLabel("RightLegLabel","Right Leg",UDim2.new(0.5,-16,0,-25),rightLegButton) - local rightArmButton = makeStyledButton("RightArmMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-96,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) - makeTextLabel("RightArmLabel","Right Arm",UDim2.new(0.5,-16,0,-25),rightArmButton) - local leftArmButton = makeStyledButton("LeftArmMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,32,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) - makeTextLabel("LeftArmLabel","Left Arm",UDim2.new(0.5,-16,0,-25),leftArmButton) - - local TShirtFrame = makeCharFrame("T-ShirtsFrame",CharacterPane) - game:GetService("ContentProvider"):Preload("http://www.jarfeh.xyz/asset/?id=75460642") - makeZone("TShirtZone","http://www.jarfeh.xyz/asset/?id=75460642",UDim2.new(0,121,0,154),UDim2.new(0.5,-60,0.5,-100),TShirtFrame) - makeStyledButton("TShirtButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-64),TShirtFrame) - - - local ShirtFrame = makeCharFrame("ShirtsFrame", CharacterPane) - makeZone("ShirtZone","http://www.jarfeh.xyz/asset/?id=75460642",UDim2.new(0,121,0,154),UDim2.new(0.5,-60,0.5,-100),ShirtFrame) - makeStyledButton("ShirtButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-64),ShirtFrame) - - - local ColorFrame = makeCharFrame("ColorFrame", CharacterPane) - game:GetService("ContentProvider"):Preload("http://www.jarfeh.xyz/asset/?id=76049888") - local ColorZone = makeZone("ColorZone","http://www.jarfeh.xyz/asset/?id=76049888", UDim2.new(0,120,0,150),UDim2.new(0.5,-60,0.5,-100),ColorFrame) - makeStyledButton("Head",UDim2.new(0.26,0,0.19,0),UDim2.new(0.37,0,0.02,0),ColorZone).AutoButtonColor = false - makeStyledButton("LeftArm",UDim2.new(0.19,0,0.36,0),UDim2.new(0.78,0,0.26,0),ColorZone).AutoButtonColor = false - makeStyledButton("RightArm",UDim2.new(0.19,0,0.36,0),UDim2.new(0.025,0,0.26,0),ColorZone).AutoButtonColor = false - makeStyledButton("Torso",UDim2.new(0.43,0,0.36,0),UDim2.new(0.28,0,0.26,0),ColorZone).AutoButtonColor = false - makeStyledButton("RightLeg",UDim2.new(0.19,0,0.31,0),UDim2.new(0.275,0,0.67,0),ColorZone).AutoButtonColor = false - makeStyledButton("LeftLeg",UDim2.new(0.19,0,0.31,0),UDim2.new(0.525,0,0.67,0),ColorZone).AutoButtonColor = false - - -- Character Panel label (shows what category we are currently browsing) - local CategoryLabel = Instance.new("TextLabel") - CategoryLabel.RobloxLocked = true - CategoryLabel.Name = "CategoryLabel" - CategoryLabel.BackgroundTransparency = 1 - CategoryLabel.Font = Enum.Font.ArialBold - CategoryLabel.FontSize = Enum.FontSize.Size18 - CategoryLabel.Position = UDim2.new(0,0,0,-7) - CategoryLabel.Size = UDim2.new(1,0,0,20) - CategoryLabel.TextXAlignment = Enum.TextXAlignment.Center - CategoryLabel.Text = "All" - CategoryLabel.TextColor3 = Color3.new(1,1,1) - CategoryLabel.Parent = CharacterPane - - --Save Button - local SaveButton = Instance.new("TextButton") - SaveButton.RobloxLocked = true - SaveButton.Name = "SaveButton" - SaveButton.Size = UDim2.new(0.6,0,0,50) - SaveButton.Position = UDim2.new(0.2,0,1,-50) - SaveButton.Style = Enum.ButtonStyle.RobloxButton - SaveButton.Selected = false - SaveButton.Font = Enum.Font.ArialBold - SaveButton.FontSize = Enum.FontSize.Size18 - SaveButton.Text = "Save" - SaveButton.TextColor3 = Color3.new(1,1,1) - SaveButton.Parent = CharacterPane - --- no need for this to stick around - -script:Destroy() \ No newline at end of file diff --git a/maintenance/asset/13 b/maintenance/asset/13 deleted file mode 100644 index 528f392..0000000 --- a/maintenance/asset/13 +++ /dev/null @@ -1,416 +0,0 @@ -%13% --- This script manages context switches in the backpack (Gear to Wardrobe, etc.) and player state changes. Also manages global functions across different tabs (currently only search) -if game.CoreGui.Version < 7 then return end -- peace out if we aren't using the right client - --- basic functions -local function waitForChild(instance, name) - while not instance:FindFirstChild(name) do - instance.ChildAdded:wait() - end - return instance:FindFirstChild(name) -end -local function waitForProperty(instance, property) - while not instance[property] do - instance.Changed:wait() - end -end - --- don't do anything if we are in an empty game -waitForChild(game,"Players") -if #game.Players:GetChildren() < 1 then - game.Players.ChildAdded:wait() -end --- make sure everything is loaded in before we do anything --- get our local player -waitForProperty(game.Players,"LocalPlayer") -local player = game.Players.LocalPlayer - - - ------------------------- Locals ------------------------------ -local backpack = script.Parent -waitForChild(backpack,"Gear") - -local screen = script.Parent.Parent -assert(screen:IsA("ScreenGui")) - -waitForChild(backpack, "Tabs") -waitForChild(backpack.Tabs, "CloseButton") -local closeButton = backpack.Tabs.CloseButton - -waitForChild(backpack.Tabs, "InventoryButton") -local inventoryButton = backpack.Tabs.InventoryButton -if game.CoreGui.Version >= 8 then - waitForChild(backpack.Tabs, "WardrobeButton") - local wardrobeButton = backpack.Tabs.WardrobeButton -end -waitForChild(backpack.Parent,"ControlFrame") -local backpackButton = waitForChild(backpack.Parent.ControlFrame,"BackpackButton") -local currentTab = "gear" - -local searchFrame = waitForChild(backpack,"SearchFrame") -waitForChild(backpack.SearchFrame,"SearchBoxFrame") -local searchBox = waitForChild(backpack.SearchFrame.SearchBoxFrame,"SearchBox") -local searchButton = waitForChild(backpack.SearchFrame,"SearchButton") -local resetButton = waitForChild(backpack.SearchFrame,"ResetButton") - -local robloxGui = waitForChild(Game.CoreGui, 'RobloxGui') -local currentLoadout = waitForChild(robloxGui, 'CurrentLoadout') -local loadoutBackground = waitForChild(currentLoadout, 'Background') - -local canToggle = true -local readyForNextEvent = true -local backpackIsOpen = false -local active = true - -local humanoidDiedCon = nil - -local backpackButtonPos - -local guiTweenSpeed = 0.25 -- how quickly we open/close the backpack - -local searchDefaultText = "Search..." -local tilde = "~" -local backquote = "`" - -local backpackSize = UDim2.new(0, 600, 0, 400) - -if robloxGui.AbsoluteSize.Y <= 320 then - backpackSize = UDim2.new(0, 200, 0, 140) -end - ------------------------- End Locals --------------------------- - - ----------------------------------------- Public Event Setup ---------------------------------------- - -function createPublicEvent(eventName) - assert(eventName, "eventName is nil") - assert(tostring(eventName),"eventName is not a string") - - local newEvent = Instance.new("BindableEvent") - newEvent.Name = tostring(eventName) - newEvent.Parent = script - - return newEvent -end - -function createPublicFunction(funcName, invokeFunc) - assert(funcName, "funcName is nil") - assert(tostring(funcName), "funcName is not a string") - assert(invokeFunc, "invokeFunc is nil") - assert(type(invokeFunc) == "function", "invokeFunc should be of type 'function'") - - local newFunction = Instance.new("BindableFunction") - newFunction.Name = tostring(funcName) - newFunction.OnInvoke = invokeFunc - newFunction.Parent = script - - return newFunction -end - --- Events -local resizeEvent = createPublicEvent("ResizeEvent") -local backpackOpenEvent = createPublicEvent("BackpackOpenEvent") -local backpackCloseEvent = createPublicEvent("BackpackCloseEvent") -local tabClickedEvent = createPublicEvent("TabClickedEvent") -local searchRequestedEvent = createPublicEvent("SearchRequestedEvent") ----------------------------------------- End Public Event Setup ---------------------------------------- - - - ---------------------------- Internal Functions ---------------------------------------- - -function deactivateBackpack() - backpack.Visible = false - active = false -end - -function activateBackpack() - initHumanoidDiedConnections() - active = true - backpack.Visible = backpackIsOpen - if backpackIsOpen then - toggleBackpack() - end -end - -function initHumanoidDiedConnections() - if humanoidDiedCon then - humanoidDiedCon:disconnect() - end - waitForProperty(game.Players.LocalPlayer,"Character") - waitForChild(game.Players.LocalPlayer.Character,"Humanoid") - humanoidDiedCon = game.Players.LocalPlayer.Character.Humanoid.Died:connect(deactivateBackpack) -end - -local hideBackpack = function() - backpackIsOpen = false - readyForNextEvent = false - backpackButton.Selected = false - resetSearch() - backpackCloseEvent:Fire(currentTab) - backpack.Tabs.Visible = false - searchFrame.Visible = false - backpack:TweenSizeAndPosition(UDim2.new(0, backpackSize.X.Offset,0, 0), UDim2.new(0.5, -backpackSize.X.Offset/2, 1, -85), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed, true, - function() - game.GuiService:RemoveCenterDialog(backpack) - backpack.Visible = false - backpackButton.Selected = false - end) - delay(guiTweenSpeed,function() - game.GuiService:RemoveCenterDialog(backpack) - backpack.Visible = false - backpackButton.Selected = false - readyForNextEvent = true - canToggle = true - end) -end - -function showBackpack() - game.GuiService:AddCenterDialog(backpack, Enum.CenterDialogType.PlayerInitiatedDialog, - function() - backpack.Visible = true - backpackButton.Selected = true - end, - function() - backpack.Visible = false - backpackButton.Selected = false - end) - backpack.Visible = true - backpackButton.Selected = true - backpack:TweenSizeAndPosition(backpackSize, UDim2.new(0.5, -backpackSize.X.Offset/2, 1, -backpackSize.Y.Offset - 88), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed, true) - delay(guiTweenSpeed,function() - backpack.Tabs.Visible = false - searchFrame.Visible = true - backpackOpenEvent:Fire(currentTab) - canToggle = true - readyForNextEvent = true - backpackButton.Image = 'http://www.jarfeh.xyz/asset/?id=97644093' - backpackButton.Position = UDim2.new(0.5, -60, 1, -backpackSize.Y.Offset - 103) - end) -end - -function toggleBackpack() - if not game.Players.LocalPlayer then return end - if not game.Players.LocalPlayer["Character"] then return end - if not canToggle then return end - if not readyForNextEvent then return end - readyForNextEvent = false - canToggle = false - - backpackIsOpen = not backpackIsOpen - - if backpackIsOpen then - loadoutBackground.Image = 'http://www.jarfeh.xyz/asset/?id=97623721' - loadoutBackground.Position = UDim2.new(-0.03, 0, -0.17, 0) - loadoutBackground.Size = UDim2.new(1.05, 0, 1.25, 0) - loadoutBackground.ZIndex = 2.0 - loadoutBackground.Visible = true - --backpackButton.Position = UDim2.new(0.5, -60, 1, -503) - showBackpack() - else - backpackButton.Position = UDim2.new(0.5, -60, 1, -44) - loadoutBackground.Visible = false - backpackButton.Selected = false - backpackButton.Image = "http://www.jarfeh.xyz/asset/?id=97617958" - loadoutBackground.Image = 'http://www.jarfeh.xyz/asset/?id=96536002' - loadoutBackground.Position = UDim2.new(-0.1, 0, -0.1, 0) - loadoutBackground.Size = UDim2.new(1.2, 0, 1.2, 0) - hideBackpack() - - - local clChildren = currentLoadout:GetChildren() - for i = 1, #clChildren do - if clChildren[i] and clChildren[i]:IsA('Frame') then - local frame = clChildren[i] - if #frame:GetChildren() > 0 then - backpackButton.Position = UDim2.new(0.5, -60, 1, -108) - backpackButton.Visible = true - loadoutBackground.Visible = true - if frame:GetChildren()[1]:IsA('ImageButton') then - local imgButton = frame:GetChildren()[1] - imgButton.Active = true - imgButton.Draggable = false - end - end - end - end - - end -end - -function closeBackpack() - if backpackIsOpen then - toggleBackpack() - end -end - -function setSelected(tab) - assert(tab) - assert(tab:IsA("TextButton")) - - tab.BackgroundColor3 = Color3.new(1,1,1) - tab.TextColor3 = Color3.new(0,0,0) - tab.Selected = true - tab.ZIndex = 3 -end - -function setUnselected(tab) - assert(tab) - assert(tab:IsA("TextButton")) - - tab.BackgroundColor3 = Color3.new(0,0,0) - tab.TextColor3 = Color3.new(1,1,1) - tab.Selected = false - tab.ZIndex = 1 -end - -function updateTabGui(selectedTab) - assert(selectedTab) - - if selectedTab == "gear" then - setSelected(inventoryButton) - setUnselected(wardrobeButton) - elseif selectedTab == "wardrobe" then - setSelected(wardrobeButton) - setUnselected(inventoryButton) - end -end - -function mouseLeaveTab(button) - assert(button) - assert(button:IsA("TextButton")) - - if button.Selected then return end - - button.BackgroundColor3 = Color3.new(0,0,0) -end - -function mouseOverTab(button) - assert(button) - assert(button:IsA("TextButton")) - - if button.Selected then return end - - button.BackgroundColor3 = Color3.new(39/255,39/255,39/255) -end - -function newTabClicked(tabName) - assert(tabName) - tabName = string.lower(tabName) - currentTab = tabName - - updateTabGui(tabName) - tabClickedEvent:Fire(tabName) - resetSearch() -end - -function trim(s) - return (s:gsub("^%s*(.-)%s*$", "%1")) -end - -function splitByWhitespace(text) - if type(text) ~= "string" then return nil end - - local terms = {} - for token in string.gmatch(text, "[^%s]+") do - if string.len(token) > 0 then - table.insert(terms,token) - end - end - return terms -end - -function resetSearchBoxGui() - resetButton.Visible = false - searchBox.Text = searchDefaultText -end - -function doSearch() - local searchText = searchBox.Text - if searchText == "" then - resetSearch() - return - end - searchText = trim(searchText) - resetButton.Visible = true - termTable = splitByWhitespace(searchText) - searchRequestedEvent:Fire(searchText) -- todo: replace this with termtable when table passing is possible -end - -function resetSearch() - resetSearchBoxGui() - searchRequestedEvent:Fire() -end - -local backpackReady = function() - readyForNextEvent = true -end - ---------------------------- End Internal Functions ------------------------------------- - - ------------------------------- Public Functions Setup ------------------------------------- -createPublicFunction("CloseBackpack", hideBackpack) -createPublicFunction("BackpackReady", backpackReady) ------------------------------- End Public Functions Setup --------------------------------- - - ------------------------- Connections/Script Main ------------------------------------------- - -inventoryButton.MouseButton1Click:connect(function() newTabClicked("gear") end) -inventoryButton.MouseEnter:connect(function() mouseOverTab(inventoryButton) end) -inventoryButton.MouseLeave:connect(function() mouseLeaveTab(inventoryButton) end) - -if game.CoreGui.Version >= 8 then - wardrobeButton.MouseButton1Click:connect(function() newTabClicked("wardrobe") end) - wardrobeButton.MouseEnter:connect(function() mouseOverTab(wardrobeButton) end) - wardrobeButton.MouseLeave:connect(function() mouseLeaveTab(wardrobeButton) end) -end - -closeButton.MouseButton1Click:connect(closeBackpack) - -screen.Changed:connect(function(prop) - if prop == "AbsoluteSize" then - resizeEvent:Fire(screen.AbsoluteSize) - end -end) - --- GuiService key setup -game:GetService("GuiService"):AddKey(tilde) -game:GetService("GuiService"):AddKey(backquote) -game:GetService("GuiService").KeyPressed:connect(function(key) - if not active then return end - if key == tilde or key == backquote then - toggleBackpack() - end -end) -backpackButton.MouseButton1Click:connect(function() - if not active then return end - toggleBackpack() -end) - -if game.Players.LocalPlayer["Character"] then - activateBackpack() -end - -game.Players.LocalPlayer.CharacterAdded:connect(activateBackpack) - --- search functions -searchBox.FocusLost:connect(function(enterPressed) - if enterPressed or searchBox.Text ~= "" then - doSearch() - elseif searchBox.Text == "" then - resetSearch() - end -end) -searchButton.MouseButton1Click:connect(doSearch) -resetButton.MouseButton1Click:connect(resetSearch) - -if searchFrame and robloxGui.AbsoluteSize.Y <= 320 then - searchFrame.RobloxLocked = false - searchFrame:Destroy() -end - ---backpackButton.Visible = true \ No newline at end of file diff --git a/maintenance/asset/14 b/maintenance/asset/14 deleted file mode 100644 index 117cf43..0000000 --- a/maintenance/asset/14 +++ /dev/null @@ -1,863 +0,0 @@ -%14% --- A couple of necessary functions -local function waitForChild(instance, name) - assert(instance) - assert(name) - while not instance:FindFirstChild(name) do - print('Waiting for ...', instance, name) - instance.ChildAdded:wait() - end - return instance:FindFirstChild(name) -end -local function waitForProperty(instance, property) - assert(instance) - assert(property) - while not instance[property] do - instance.Changed:wait() - end -end - -local function IsTouchDevice() - local touchEnabled = false - pcall(function() touchEnabled = Game:GetService('UserInputService').TouchEnabled end) - return touchEnabled -end - - -waitForChild(game,"Players") -waitForProperty(game.Players,"LocalPlayer") -local player = game.Players.LocalPlayer - -local RbxGui, msg = LoadLibrary("RbxGui") -if not RbxGui then print("could not find RbxGui!") return end - ---- Begin Locals -local StaticTabName = "gear" - -local backpack = script.Parent -local screen = script.Parent.Parent - -local backpackItems = {} -local buttons = {} - -local debounce = false -local browsingMenu = false - -local mouseEnterCons = {} -local mouseClickCons = {} - -local characterChildAddedCon = nil -local characterChildRemovedCon = nil -local backpackAddCon = nil - -local playerBackpack = waitForChild(player,"Backpack") - -waitForChild(backpack,"Tabs") - -waitForChild(backpack,"Gear") -local gearPreview = waitForChild(backpack.Gear,"GearPreview") - -local scroller = waitForChild(backpack.Gear,"GearGridScrollingArea") - -local currentLoadout = waitForChild(backpack.Parent,"CurrentLoadout") - -local grid = waitForChild(backpack.Gear,"GearGrid") -local gearButton = waitForChild(grid,"GearButton") - -local swapSlot = waitForChild(script.Parent,"SwapSlot") - -local backpackManager = waitForChild(script.Parent,"CoreScripts/BackpackScripts/BackpackManager") -local backpackOpenEvent = waitForChild(backpackManager,"BackpackOpenEvent") -local backpackCloseEvent = waitForChild(backpackManager,"BackpackCloseEvent") -local tabClickedEvent = waitForChild(backpackManager,"TabClickedEvent") -local resizeEvent = waitForChild(backpackManager,"ResizeEvent") -local searchRequestedEvent = waitForChild(backpackManager,"SearchRequestedEvent") -local tellBackpackReadyFunc = waitForChild(backpackManager,"BackpackReady") - --- creating scroll bar early as to make sure items get placed correctly -local scrollFrame, scrollUp, scrollDown, recalculateScroll = RbxGui.CreateScrollingFrame(nil, "grid", Vector2.new(6, 6)) - -scrollFrame.Position = UDim2.new(0,0,0,30) -scrollFrame.Size = UDim2.new(1,0,1,-30) -scrollFrame.Parent = backpack.Gear.GearGrid - -local scrollBar = Instance.new("Frame") -scrollBar.Name = "ScrollBar" -scrollBar.BackgroundTransparency = 0.9 -scrollBar.BackgroundColor3 = Color3.new(1,1,1) -scrollBar.BorderSizePixel = 0 -scrollBar.Size = UDim2.new(0, 17, 1, -36) -scrollBar.Position = UDim2.new(0,0,0,18) -scrollBar.Parent = scroller - -scrollDown.Position = UDim2.new(0,0,1,-17) - -scrollUp.Parent = scroller -scrollDown.Parent = scroller - -local scrollFrameLoadout, scrollUpLoadout, scrollDownLoadout, recalculateScrollLoadout = RbxGui.CreateScrollingFrame() - -scrollFrameLoadout.Position = UDim2.new(0,0,0,0) -scrollFrameLoadout.Size = UDim2.new(1,0,1,0) -scrollFrameLoadout.Parent = backpack.Gear.GearLoadouts.LoadoutsList - -local LoadoutButton = Instance.new("TextButton") -LoadoutButton.RobloxLocked = true -LoadoutButton.Name = "LoadoutButton" -LoadoutButton.Font = Enum.Font.ArialBold -LoadoutButton.FontSize = Enum.FontSize.Size14 -LoadoutButton.Position = UDim2.new(0,0,0,0) -LoadoutButton.Size = UDim2.new(1,0,0,32) -LoadoutButton.Style = Enum.ButtonStyle.RobloxButton -LoadoutButton.Text = "Loadout #1" -LoadoutButton.TextColor3 = Color3.new(1,1,1) -LoadoutButton.Parent = scrollFrameLoadout - -local LoadoutButtonTwo = LoadoutButton:clone() -LoadoutButtonTwo.Text = "Loadout #2" -LoadoutButtonTwo.Parent = scrollFrameLoadout - -local LoadoutButtonThree = LoadoutButton:clone() -LoadoutButtonThree.Text = "Loadout #3" -LoadoutButtonThree.Parent = scrollFrameLoadout - -local LoadoutButtonFour = LoadoutButton:clone() -LoadoutButtonFour.Text = "Loadout #4" -LoadoutButtonFour.Parent = scrollFrameLoadout - -local scrollBarLoadout = Instance.new("Frame") -scrollBarLoadout.Name = "ScrollBarLoadout" -scrollBarLoadout.BackgroundTransparency = 0.9 -scrollBarLoadout.BackgroundColor3 = Color3.new(1,1,1) -scrollBarLoadout.BorderSizePixel = 0 -scrollBarLoadout.Size = UDim2.new(0, 17, 1, -36) -scrollBarLoadout.Position = UDim2.new(0,0,0,18) -scrollBarLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea - -scrollDownLoadout.Position = UDim2.new(0,0,1,-17) - -scrollUpLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea -scrollDownLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea - - --- Begin Functions -function removeFromMap(map,object) - for i = 1, #map do - if map[i] == object then - table.remove(map,i) - break - end - end -end - -function robloxLock(instance) - instance.RobloxLocked = true - children = instance:GetChildren() - if children then - for i, child in ipairs(children) do - robloxLock(child) - end - end -end - -function resize() - local size = 0 - if gearPreview.AbsoluteSize.Y > gearPreview.AbsoluteSize.X then - size = gearPreview.AbsoluteSize.X * 0.75 - else - size = gearPreview.AbsoluteSize.Y * 0.75 - end - - waitForChild(gearPreview,"GearImage") - gearPreview.GearImage.Size = UDim2.new(0,size,0,size) - gearPreview.GearImage.Position = UDim2.new(0,gearPreview.AbsoluteSize.X/2 - size/2,0.75,-size) - - resizeGrid() -end - -function addToGrid(child) - if not child:IsA("Tool") then - if not child:IsA("HopperBin") then - return - end - end - if child:FindFirstChild("RobloxBuildTool") then return end - - for i,v in pairs(backpackItems) do -- check to see if we already have this gear registered - if v == child then return end - end - - table.insert(backpackItems,child) - - local changeCon = child.Changed:connect(function(prop) - if prop == "Name" then - if buttons[child] then - if buttons[child].Image == "" then - buttons[child].GearText.Text = child.Name - end - end - end - end) - local ancestryCon = nil - ancestryCon = child.AncestryChanged:connect(function(theChild,theParent) - local thisObject = nil - for k,v in pairs(backpackItems) do - if v == child then - thisObject = v - break - end - end - - waitForProperty(player,"Character") - waitForChild(player,"Backpack") - if (child.Parent ~= player.Backpack and child.Parent ~= player.Character) then - if ancestryCon then ancestryCon:disconnect() end - if changeCon then changeCon:disconnect() end - - for k,v in pairs(backpackItems) do - if v == thisObject then - if mouseEnterCons[buttons[v]] then mouseEnterCons[buttons[v]]:disconnect() end - if mouseClickCons[buttons[v]] then mouseClickCons[buttons[v]]:disconnect() end - buttons[v].Parent = nil - buttons[v] = nil - break - end - end - - removeFromMap(backpackItems,thisObject) - - resizeGrid() - else - resizeGrid() - end - updateGridActive() - end) - resizeGrid() -end - -function buttonClick(button) - if button:FindFirstChild("UnequipContextMenu") and not button.Active then - button.UnequipContextMenu.Visible = true - browsingMenu = true - end -end - -function previewGear(button) - if not browsingMenu then - gearPreview.Visible = false - gearPreview.GearImage.Image = button.Image - gearPreview.GearStats.GearName.Text = button.GearReference.Value.Name - end -end - -function findEmptySlot() - local smallestNum = nil - local loadout = currentLoadout:GetChildren() - for i = 1, #loadout do - if loadout[i]:IsA("Frame") and #loadout[i]:GetChildren() <= 0 then - local frameNum = tonumber(string.sub(loadout[i].Name,5)) - if frameNum == 0 then frameNum = 10 end - if not smallestNum or (smallestNum > frameNum) then - smallestNum = frameNum - end - end - end - if smallestNum == 10 then smallestNum = 0 end - return smallestNum -end - -function checkForSwap(button,x,y) - local loadoutChildren = currentLoadout:GetChildren() - for i = 1, #loadoutChildren do - if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then - if x >= loadoutChildren[i].AbsolutePosition.x and x <= (loadoutChildren[i].AbsolutePosition.x + loadoutChildren[i].AbsoluteSize.x) then - if y >= loadoutChildren[i].AbsolutePosition.y and y <= (loadoutChildren[i].AbsolutePosition.y + loadoutChildren[i].AbsoluteSize.y) then - local slot = tonumber(string.sub(loadoutChildren[i].Name,5)) - swapGearSlot(slot,button) - return true - end - end - end - end - return false -end - -function resizeGrid() - for k,v in pairs(backpackItems) do - if not v:FindFirstChild("RobloxBuildTool") then - if not buttons[v] then - local buttonClone = gearButton:clone() - buttonClone.Parent = grid.ScrollingFrame - buttonClone.Visible = true - buttonClone.Image = v.TextureId - if buttonClone.Image == "" then - buttonClone.GearText.Text = v.Name - end - - buttonClone.GearReference.Value = v - buttonClone.Draggable = true - buttons[v] = buttonClone - - - if not IsTouchDevice() then - local unequipMenu = getGearContextMenu() - - - unequipMenu.Visible = false - unequipMenu.Parent = buttonClone - end - - local beginPos = nil - buttonClone.DragBegin:connect(function(value) - waitForChild(buttonClone, 'Background') - buttonClone['Background'].ZIndex = 10 - buttonClone.ZIndex = 10 - beginPos = value - end) - buttonClone.DragStopped:connect(function(x,y) - waitForChild(buttonClone, 'Background') - buttonClone['Background'].ZIndex = 1.0 - buttonClone.ZIndex = 2 - if beginPos ~= buttonClone.Position then - if not checkForSwap(buttonClone,x,y) then - buttonClone:TweenPosition(beginPos,Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.5, true) - buttonClone.Draggable = false - delay(0.5,function() - buttonClone.Draggable = true - end) - else - buttonClone.Position = beginPos - end - end - end) - local clickTime = tick() - mouseEnterCons[buttonClone] = buttonClone.MouseEnter:connect(function() previewGear(buttonClone) end) - mouseClickCons[buttonClone] = buttonClone.MouseButton1Click:connect(function() - local newClickTime = tick() - if buttonClone.Active and (newClickTime - clickTime) < 0.5 then - local slot = findEmptySlot() - if slot then - buttonClone.ZIndex = 1 - swapGearSlot(slot,buttonClone) - end - else - buttonClick(buttonClone) - end - clickTime = newClickTime - end) - end - end - end - recalculateScroll() -end - -function showPartialGrid(subset) - for k,v in pairs(buttons) do - v.Parent = nil - end - if subset then - for k,v in pairs(subset) do - v.Parent = grid.ScrollingFrame - end - end - recalculateScroll() -end - -function showEntireGrid() - for k,v in pairs(buttons) do - v.Parent = grid.ScrollingFrame - end - recalculateScroll() -end - -function inLoadout(gear) - local children = currentLoadout:GetChildren() - for i = 1, #children do - if children[i]:IsA("Frame") then - local button = children[i]:GetChildren() - if #button > 0 then - if button[1].GearReference.Value and button[1].GearReference.Value == gear then - return true - end - end - end - end - return false -end - -function updateGridActive() - for k,v in pairs(backpackItems) do - if buttons[v] then - local gear = nil - local gearRef = buttons[v]:FindFirstChild("GearReference") - - if gearRef then gear = gearRef.Value end - - if not gear then - buttons[v].Active = false - elseif inLoadout(gear) then - buttons[v].Active = false - else - buttons[v].Active = true - end - end - end -end - -function centerGear(loadoutChildren) - local gearButtons = {} - local lastSlotAdd = nil - for i = 1, #loadoutChildren do - if loadoutChildren[i]:IsA("Frame") and #loadoutChildren[i]:GetChildren() > 0 then - if loadoutChildren[i].Name == "Slot0" then - lastSlotAdd = loadoutChildren[i] - else - table.insert(gearButtons, loadoutChildren[i]) - end - end - end - if lastSlotAdd then table.insert(gearButtons,lastSlotAdd) end - - local startPos = ( 1 - (#gearButtons * 0.1) ) / 2 - for i = 1, #gearButtons do - gearButtons[i]:TweenPosition(UDim2.new(startPos + ((i - 1) * 0.1),0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) - end -end - -function tabClickHandler(tabName) - if tabName == StaticTabName then - backpackOpenHandler(tabName) - else - backpackCloseHandler(tabName) - end -end - -function backpackOpenHandler(currentTab) - if currentTab and currentTab ~= StaticTabName then - backpack.Gear.Visible = false - return - end - - backpack.Gear.Visible = true - updateGridActive() - - resizeGrid() - resize() - tellBackpackReadyFunc:Invoke() -end - -function backpackCloseHandler(currentTab) - if currentTab and currentTab ~= StaticTabName then - backpack.Gear.Visible = false - return - end - - backpack.Gear.Visible = false - - resizeGrid() - resize() - tellBackpackReadyFunc:Invoke() -end - -function loadoutCheck(child, selectState) - if not child:IsA("ImageButton") then return end - for k,v in pairs(backpackItems) do - if buttons[v] then - if child:FindFirstChild("GearReference") and buttons[v]:FindFirstChild("GearReference") then - if buttons[v].GearReference.Value == child.GearReference.Value then - buttons[v].Active = selectState - break - end - end - end - end -end - -function clearPreview() - gearPreview.GearImage.Image = "" - gearPreview.GearStats.GearName.Text = "" -end - -function removeAllEquippedGear(physGear) - local stuff = player.Character:GetChildren() - for i = 1, #stuff do - if ( stuff[i]:IsA("Tool") or stuff[i]:IsA("HopperBin") ) and stuff[i] ~= physGear then - stuff[i].Parent = playerBackpack - end - end -end - -function equipGear(physGear) - removeAllEquippedGear(physGear) - physGear.Parent = player.Character - updateGridActive() -end - -function unequipGear(physGear) - physGear.Parent = playerBackpack - updateGridActive() -end - -function highlight(button) - button.TextColor3 = Color3.new(0,0,0) - button.BackgroundColor3 = Color3.new(0.8,0.8,0.8) -end -function clearHighlight(button) - button.TextColor3 = Color3.new(1,1,1) - button.BackgroundColor3 = Color3.new(0,0,0) -end - -function swapGearSlot(slot,gearButton) - if not swapSlot.Value then -- signal loadout to swap a gear out - swapSlot.Slot.Value = slot - swapSlot.GearButton.Value = gearButton - swapSlot.Value = true - updateGridActive() - end -end - - -local UnequipGearMenuClick = function(element, menu) - if type(element.Action) ~= "number" then return end - local num = element.Action - if num == 1 then -- remove from loadout - unequipGear(menu.Parent.GearReference.Value) - local inventoryButton = menu.Parent - local gearToUnequip = inventoryButton.GearReference.Value - local loadoutChildren = currentLoadout:GetChildren() - local slot = -1 - for i = 1, #loadoutChildren do - if loadoutChildren[i]:IsA("Frame") then - local button = loadoutChildren[i]:GetChildren() - if button[1] and button[1].GearReference.Value == gearToUnequip then - slot = button[1].SlotNumber.Text - break - end - end - end - swapGearSlot(slot,nil) - end -end - -function setupCharacterConnections() - - if backpackAddCon then backpackAddCon:disconnect() end - backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) - - -- make sure we get all the children - local backpackChildren = game.Players.LocalPlayer.Backpack:GetChildren() - for i = 1, #backpackChildren do - addToGrid(backpackChildren[i]) - end - - if characterChildAddedCon then characterChildAddedCon:disconnect() end - characterChildAddedCon = - game.Players.LocalPlayer.Character.ChildAdded:connect(function(child) - addToGrid(child) - updateGridActive() - end) - - if characterChildRemovedCon then characterChildRemovedCon:disconnect() end - characterChildRemovedCon = - game.Players.LocalPlayer.Character.ChildRemoved:connect(function(child) - updateGridActive() - end) - - wait() - centerGear(currentLoadout:GetChildren()) -end - -function removeCharacterConnections() - if characterChildAddedCon then characterChildAddedCon:disconnect() end - if characterChildRemovedCon then characterChildRemovedCon:disconnect() end - if backpackAddCon then backpackAddCon:disconnect() end -end - -function trim(s) - return (s:gsub("^%s*(.-)%s*$", "%1")) -end - -function filterGear(terms) - local filteredGear = {} - for k,v in pairs(backpackItems) do - if buttons[v] then - local gearString = string.lower(buttons[v].GearReference.Value.Name) - gearString = trim(gearString) - for i = 1, #terms do - if string.match(gearString,terms[i]) then - table.insert(filteredGear,buttons[v]) - break - end - end - end - end - - return filteredGear -end -function splitByWhitespace(text) - if type(text) ~= "string" then return nil end - - local terms = {} - for token in string.gmatch(text, "[^%s]+") do - if string.len(token) > 0 then - table.insert(terms,token) - end - end - return terms -end -function showSearchGear(searchTerms) - if not backpack.Gear.Visible then return end -- currently not active tab - - local searchTermTable = splitByWhitespace(searchTerms) - if searchTermTable and (#searchTermTable > 0) then - currSearchTerms = searchTermTable - else - currSearchTerms = nil - end - - if searchTermTable == nil then - showEntireGrid() - return - end - - local filteredButtons = filterGear(currSearchTerms) - showPartialGrid(filteredButtons) -end - -function nukeBackpack() - while #buttons > 0 do - table.remove(buttons) - end - buttons = {} - while #backpackItems > 0 do - table.remove(backpackItems) - end - backpackItems = {} - local scrollingFrameChildren = grid.ScrollingFrame:GetChildren() - for i = 1, #scrollingFrameChildren do - scrollingFrameChildren[i]:remove() - end -end - -function getGearContextMenu() - local gearContextMenu = Instance.new("Frame") - gearContextMenu.Active = true - gearContextMenu.Name = "UnequipContextMenu" - gearContextMenu.Size = UDim2.new(0,115,0,70) - gearContextMenu.Position = UDim2.new(0,-16,0,-16) - gearContextMenu.BackgroundTransparency = 1 - gearContextMenu.Visible = false - - local gearContextMenuButton = Instance.new("TextButton") - gearContextMenuButton.Name = "UnequipContextMenuButton" - gearContextMenuButton.Text = "" - gearContextMenuButton.Style = Enum.ButtonStyle.RobloxButtonDefault - gearContextMenuButton.ZIndex = 8 - gearContextMenuButton.Size = UDim2.new(1, 0, 1, -20) - gearContextMenuButton.Visible = true - gearContextMenuButton.Parent = gearContextMenu - - local elementHeight = 12 - - local contextMenuElements = {} - local contextMenuElementsName = {"Remove Hotkey"} - - for i = 1, #contextMenuElementsName do - local element = {} - element.Type = "Button" - element.Text = contextMenuElementsName[i] - element.Action = i - element.DoIt = UnequipGearMenuClick - table.insert(contextMenuElements,element) - end - - for i, contextElement in ipairs(contextMenuElements) do - local element = contextElement - if element.Type == "Button" then - local button = Instance.new("TextButton") - button.Name = "UnequipContextButton" .. i - button.BackgroundColor3 = Color3.new(0,0,0) - button.BorderSizePixel = 0 - button.TextXAlignment = Enum.TextXAlignment.Left - button.Text = " " .. contextElement.Text - button.Font = Enum.Font.Arial - button.FontSize = Enum.FontSize.Size14 - button.Size = UDim2.new(1, 8, 0, elementHeight) - button.Position = UDim2.new(0,0,0,elementHeight * i) - button.TextColor3 = Color3.new(1,1,1) - button.ZIndex = 9 - button.Parent = gearContextMenuButton - - if not IsTouchDevice() then - - button.MouseButton1Click:connect(function() - if button.Active and not gearContextMenu.Parent.Active then - local success, result = pcall(function() element.DoIt(element, gearContextMenu) end) - browsingMenu = false - gearContextMenu.Visible = false - clearHighlight(button) - clearPreview() - end - end) - - button.MouseEnter:connect(function() - if button.Active and gearContextMenu.Parent.Active then - highlight(button) - end - end) - button.MouseLeave:connect(function() - if button.Active and gearContextMenu.Parent.Active then - clearHighlight(button) - end - end) - end - - contextElement.Button = button - contextElement.Element = button - elseif element.Type == "Label" then - local frame = Instance.new("Frame") - frame.Name = "ContextLabel" .. i - frame.BackgroundTransparency = 1 - frame.Size = UDim2.new(1, 8, 0, elementHeight) - - local label = Instance.new("TextLabel") - label.Name = "Text1" - label.BackgroundTransparency = 1 - label.BackgroundColor3 = Color3.new(1,1,1) - label.BorderSizePixel = 0 - label.TextXAlignment = Enum.TextXAlignment.Left - label.Font = Enum.Font.ArialBold - label.FontSize = Enum.FontSize.Size14 - label.Position = UDim2.new(0.0, 0, 0, 0) - label.Size = UDim2.new(0.5, 0, 1, 0) - label.TextColor3 = Color3.new(1,1,1) - label.ZIndex = 9 - label.Parent = frame - element.Label1 = label - - if element.GetText2 then - label = Instance.new("TextLabel") - label.Name = "Text2" - label.BackgroundTransparency = 1 - label.BackgroundColor3 = Color3.new(1,1,1) - label.BorderSizePixel = 0 - label.TextXAlignment = Enum.TextXAlignment.Right - label.Font = Enum.Font.Arial - label.FontSize = Enum.FontSize.Size14 - label.Position = UDim2.new(0.5, 0, 0, 0) - label.Size = UDim2.new(0.5, 0, 1, 0) - label.TextColor3 = Color3.new(1,1,1) - label.ZIndex = 9 - label.Parent = frame - element.Label2 = label - end - frame.Parent = gearContextMenuButton - element.Label = frame - element.Element = frame - end - end - - gearContextMenu.ZIndex = 4 - gearContextMenu.MouseLeave:connect(function() - browsingMenu = false - gearContextMenu.Visible = false - clearPreview() - end) - robloxLock(gearContextMenu) - - return gearContextMenu -end - -local backpackChildren = player.Backpack:GetChildren() -for i = 1, #backpackChildren do - addToGrid(backpackChildren[i]) -end - -------------------------- Start Lifelong Connections ----------------------- - - -resizeEvent.Event:connect(function(absSize) - if debounce then return end - - debounce = true - wait() - resize() - resizeGrid() - debounce = false -end) - -currentLoadout.ChildAdded:connect(function(child) loadoutCheck(child, false) end) -currentLoadout.ChildRemoved:connect(function(child) loadoutCheck(child, true) end) - -currentLoadout.DescendantAdded:connect(function(descendant) - if not backpack.Visible and ( descendant:IsA("ImageButton") or descendant:IsA("TextButton") ) then - centerGear(currentLoadout:GetChildren()) - end -end) -currentLoadout.DescendantRemoving:connect(function(descendant) - if not backpack.Visible and ( descendant:IsA("ImageButton") or descendant:IsA("TextButton") ) then - wait() - centerGear(currentLoadout:GetChildren()) - end -end) - -grid.MouseEnter:connect(function() clearPreview() end) -grid.MouseLeave:connect(function() clearPreview() end) - -player.CharacterRemoving:connect(function() - removeCharacterConnections() - nukeBackpack() -end) -player.CharacterAdded:connect(function() setupCharacterConnections() end) - -player.ChildAdded:connect(function(child) - if child:IsA("Backpack") then - playerBackpack = child - if backpackAddCon then backpackAddCon:disconnect() end - backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) - end -end) - -swapSlot.Changed:connect(function() - if not swapSlot.Value then - updateGridActive() - end -end) - -local loadoutChildren = currentLoadout:GetChildren() -for i = 1, #loadoutChildren do - if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then - loadoutChildren[i].ChildRemoved:connect(function() - updateGridActive() - end) - loadoutChildren[i].ChildAdded:connect(function() - updateGridActive() - end) - end -end -------------------------- End Lifelong Connections ----------------------- - -resize() -resizeGrid() - --- make sure any items in the loadout are accounted for in inventory -local loadoutChildren = currentLoadout:GetChildren() -for i = 1, #loadoutChildren do - loadoutCheck(loadoutChildren[i], false) -end -if not backpack.Visible then centerGear(currentLoadout:GetChildren()) end - --- make sure that inventory is listening to gear reparenting -if characterChildAddedCon == nil and game.Players.LocalPlayer["Character"] then - setupCharacterConnections() -end -if not backpackAddCon then - backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) -end - -backpackOpenEvent.Event:connect(backpackOpenHandler) -backpackCloseEvent.Event:connect(backpackCloseHandler) -tabClickedEvent.Event:connect(tabClickHandler) -searchRequestedEvent.Event:connect(showSearchGear) - -recalculateScrollLoadout() \ No newline at end of file diff --git a/maintenance/asset/15 b/maintenance/asset/15 deleted file mode 100644 index 8d6883f..0000000 --- a/maintenance/asset/15 +++ /dev/null @@ -1,1034 +0,0 @@ -%15% -if game.CoreGui.Version < 3 then return end -- peace out if we aren't using the right client - --- A couple of necessary functions -local function waitForChild(instance, name) - while not instance:FindFirstChild(name) do - instance.ChildAdded:wait() - end - return instance:FindFirstChild(name) -end -local function waitForProperty(instance, property) - while not instance[property] do - instance.Changed:wait() - end -end - -local currentLoadout = script.Parent -local StaticTabName = "gear" - -local robloxGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") -assert(robloxGui) -local controlFrame = waitForChild(robloxGui, 'ControlFrame') -local backpackButton = waitForChild(controlFrame, 'BackpackButton') -local backpack = waitForChild(robloxGui, 'Backpack') -waitForChild(robloxGui,"CurrentLoadout") -waitForChild(robloxGui.CurrentLoadout,"TempSlot") -waitForChild(robloxGui.CurrentLoadout.TempSlot,"SlotNumber") - -waitForChild(currentLoadout, 'Background') -local clBackground = currentLoadout.Background - -local function IsTouchDevice() - local touchEnabled = false - pcall(function() touchEnabled = Game:GetService('UserInputService').TouchEnabled end) - return touchEnabled -end - -local function moveHealthBar(pGui) - waitForChild(pGui, 'HealthGUI') - waitForChild(pGui['HealthGUI'], 'tray') - local tray = pGui['HealthGUI']['tray'] - tray.Position = UDim2.new(0.5, -85, 1, -26) -end - - - ---- Begin Locals -waitForChild(game,"Players") -waitForProperty(game.Players,"LocalPlayer") -local player = game.Players.LocalPlayer - -waitForChild(player, 'PlayerGui') -Spawn(function() - moveHealthBar(player.PlayerGui) -end) - -while player.Character == nil do wait(0.03) end -local humanoid = waitForChild(player.Character, 'Humanoid') -humanoid.Died:connect(function() - backpackButton.Visible = false -end) - -waitForChild(game, "LocalBackpack") -game.LocalBackpack:SetOldSchoolBackpack(false) - -waitForChild(currentLoadout.Parent,"Backpack") -local guiBackpack = currentLoadout.Parent.Backpack - -local backpackManager = waitForChild(guiBackpack,"CoreScripts/BackpackScripts/BackpackManager") -local backpackOpenEvent = waitForChild(backpackManager,"BackpackOpenEvent") -local backpackCloseEvent = waitForChild(backpackManager,"BackpackCloseEvent") -local tabClickedEvent = waitForChild(backpackManager,"TabClickedEvent") -local resizeEvent = waitForChild(backpackManager,"ResizeEvent") - -local inGearTab = true - -local maxNumLoadoutItems = 10 -if robloxGui.AbsoluteSize.Y <= 320 then - maxNumLoadoutItems = 4 -end - - -local characterChildAddedCon = nil -local backpackChildCon = nil - -local debounce = false - -local enlargeFactor = 1.18 -local buttonSizeEnlarge = UDim2.new(1 * enlargeFactor,0,1 * enlargeFactor,0) -local buttonSizeNormal = UDim2.new(1,0,1,0) -local enlargeOverride = true -local guiTweenSpeed = 0.5 - -local firstInstanceOfLoadout = false - -local inventory = {} - -for i = 0, 9 do - game:GetService("GuiService"):AddKey(tostring(i)) -- register our keys -end - -local gearSlots = {} -for i = 1, maxNumLoadoutItems do - gearSlots[i] = "empty" -end - -local backpackWasOpened = false ---- End Locals - - - - - - --- Begin Functions -local function backpackIsOpen() - if guiBackpack then - return guiBackpack.Visible - end - return false -end - - -local function kill(prop,con,gear) - if con then con:disconnect() end - if prop == true and gear then - reorganizeLoadout(gear,false) - end -end - -function characterInWorkspace() - if game.Players["LocalPlayer"] then - if game.Players.LocalPlayer["Character"] then - if game.Players.LocalPlayer.Character ~= nil then - if game.Players.LocalPlayer.Character.Parent ~= nil then - return true - end - end - end - end - - return false -end - -function removeGear(gear) - local emptySlot = nil - for i = 1, #gearSlots do - if gearSlots[i] == gear and gear.Parent ~= nil then - emptySlot = i - break - end - end - if emptySlot then - if gearSlots[emptySlot].GearReference.Value then - if gearSlots[emptySlot].GearReference.Value.Parent == game.Players.LocalPlayer.Character then -- if we currently have this equipped, unequip it - gearSlots[emptySlot].GearReference.Value.Parent = game.Players.LocalPlayer.Backpack - end - - if gearSlots[emptySlot].GearReference.Value:IsA("HopperBin") and gearSlots[emptySlot].GearReference.Value.Active then -- this is an active hopperbin - gearSlots[emptySlot].GearReference.Value:Disable() - gearSlots[emptySlot].GearReference.Value.Active = false - end - end - - gearSlots[emptySlot] = "empty" - - local centerizeX = gear.Size.X.Scale/2 - local centerizeY = gear.Size.Y.Scale/2 - --[[gear:TweenSizeAndPosition(UDim2.new(0,0,0,0), - UDim2.new(gear.Position.X.Scale + centerizeX,gear.Position.X.Offset,gear.Position.Y.Scale + centerizeY,gear.Position.Y.Offset), - Enum.EasingDirection.Out, Enum.EasingStyle.Quad,guiTweenSpeed/4,true)]] - delay(0, - function() - gear:remove() - end) - - Spawn(function() - while backpackIsOpen() do wait(0.03) end - waitForChild(player, 'Backpack') - local allEmpty = true - for i = 1, #gearSlots do - if gearSlots[i] ~= 'empty' then - allEmpty = false - end - end - - if allEmpty then - if #player.Backpack:GetChildren() < 1 then - backpackButton.Visible = false - else - backpackButton.Position = UDim2.new(0.5, -60, 1, -44) - end - clBackground.Visible = false - end - end) - end -end - -function insertGear(gear, addToSlot) - local pos = nil - if not addToSlot then - for i = 1, #gearSlots do - if gearSlots[i] == "empty" then - pos = i - break - end - end - - if pos == 1 and gearSlots[1] ~= "empty" then gear:remove() return end -- we are currently full, can't add in - else - pos = addToSlot - -- push all gear down one slot - local start = 1 - for i = 1, #gearSlots do - if gearSlots[i] == "empty" then - start = i - break - end - end - for i = start, pos + 1, -1 do - gearSlots[i] = gearSlots[i - 1] - if i == 10 then - gearSlots[i].SlotNumber.Text = "0" - gearSlots[i].SlotNumberDownShadow.Text = "0" - gearSlots[i].SlotNumberUpShadow.Text = "0" - else - gearSlots[i].SlotNumber.Text = i - gearSlots[i].SlotNumberDownShadow.Text = i - gearSlots[i].SlotNumberUpShadow.Text = i - end - end - end - - gearSlots[pos] = gear - if pos ~= maxNumLoadoutItems then - if(type(tostring(pos)) == "string") then - local posString = tostring(pos) - gear.SlotNumber.Text = posString - gear.SlotNumberDownShadow.Text = posString - gear.SlotNumberUpShadow.Text = posString - end - else -- tenth gear doesn't follow mathematical pattern :( - gear.SlotNumber.Text = "0" - gear.SlotNumberDownShadow.Text = "0" - gear.SlotNumberUpShadow.Text = "0" - end - gear.Visible = true - - local con = nil - con = gear.Kill.Changed:connect(function(prop) kill(prop,con,gear) end) -end - - -function reorganizeLoadout(gear, inserting, equipped, addToSlot) - if inserting then -- add in gear - insertGear(gear, addToSlot) - else - removeGear(gear) - end - if gear ~= "empty" then gear.ZIndex = 1 end -end - -function checkToolAncestry(child,parent) - if child:FindFirstChild("RobloxBuildTool") then return end -- don't show roblox build tools - if child:IsA("Tool") or child:IsA("HopperBin") then - for i = 1, #gearSlots do - if gearSlots[i] ~= "empty" and gearSlots[i].GearReference.Value == child then - if parent == nil then - gearSlots[i].Kill.Value = true - return false - elseif child.Parent == player.Character then - gearSlots[i].Selected = true - return true - elseif child.Parent == player.Backpack then - if child:IsA("Tool") or child:IsA("HopperBin") then gearSlots[i].Selected = false end - return true - else - gearSlots[i].Kill.Value = true - return false - end - return true - end - end - end -end - -function removeAllEquippedGear(physGear) - local stuff = player.Character:GetChildren() - 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") then stuff[i].Parent = player.Backpack end - if stuff[i]:IsA("HopperBin") then - stuff[i]:Disable() - end - end - end -end - -function hopperBinSwitcher(numKey, physGear) - if not physGear then return end - - physGear:ToggleSelect() - - if gearSlots[numKey] == "empty" then return end - - if not physGear.Active then - gearSlots[numKey].Selected = false - normalizeButton(gearSlots[numKey]) - else - gearSlots[numKey].Selected = true - enlargeButton(gearSlots[numKey]) - end -end - -function toolSwitcher(numKey) - - if not gearSlots[numKey] then return end - local physGear = gearSlots[numKey].GearReference.Value - if physGear == nil then return end - - removeAllEquippedGear(physGear) -- we don't remove this gear, as then we get a double switcheroo - - local key = numKey - if numKey == 0 then key = 10 end - - for i = 1, #gearSlots do - if gearSlots[i] and gearSlots[i] ~= "empty" and i ~= key then - normalizeButton(gearSlots[i]) - gearSlots[i].Selected = false - if gearSlots[i].GearReference and gearSlots[i].GearReference.Value and gearSlots[i].GearReference.Value:IsA("HopperBin") and gearSlots[i].GearReference.Value.Active then - gearSlots[i].GearReference.Value:ToggleSelect() - end - end - end - - if physGear:IsA("HopperBin") then - hopperBinSwitcher(numKey,physGear) - else - if physGear.Parent == player.Character then - physGear.Parent = player.Backpack - - if gearSlots[numKey] ~= "empty" then - gearSlots[numKey].Selected = false - normalizeButton(gearSlots[numKey]) - end - else - --player.Character.Humanoid:EquipTool(physGear) - - physGear.Parent = player.Character - gearSlots[numKey].Selected = true - - enlargeButton(gearSlots[numKey]) - end - end -end - - -function activateGear(num) - local numKey = nil - if num == "0" then - numKey = 10 -- why do lua indexes have to start at 1? :( - else - numKey = tonumber(num) - end - - if(numKey == nil) then return end - - if gearSlots[numKey] ~= "empty" then - toolSwitcher(numKey) - end -end - - -enlargeButton = function(button) - if button.Size.Y.Scale > 1 then return end - if not button.Parent then return end - if not button.Selected then return end - - for i = 1, #gearSlots do - if gearSlots[i] == "empty" then break end - if gearSlots[i] ~= button then - normalizeButton(gearSlots[i]) - end - end - - if not enlargeOverride then - return - end - - if button:FindFirstChild('Highlight') then - button.Highlight.Visible = true - end - - if button:IsA("ImageButton") or button:IsA("TextButton") then - button.ZIndex = 5 - local centerizeX = -(buttonSizeEnlarge.X.Scale - button.Size.X.Scale)/2 - local centerizeY = -(buttonSizeEnlarge.Y.Scale - button.Size.Y.Scale)/2 - button:TweenSizeAndPosition(buttonSizeEnlarge, - UDim2.new(button.Position.X.Scale + centerizeX,button.Position.X.Offset,button.Position.Y.Scale + centerizeY,button.Position.Y.Offset), - Enum.EasingDirection.Out, Enum.EasingStyle.Quad,guiTweenSpeed/5,enlargeOverride) - end -end - -normalizeAllButtons = function() - for i = 1, #gearSlots do - if gearSlots[i] == "empty" then break end - if gearSlots[i] ~= button then - normalizeButton(gearSlots[i],0.1) - end - end -end - - -normalizeButton = function(button, speed) - if not button then return end - if button.Size.Y.Scale <= 1 then return end - if button.Selected then return end - if not button.Parent then return end - - local moveSpeed = speed - if moveSpeed == nil or type(moveSpeed) ~= "number" then moveSpeed = guiTweenSpeed/5 end - - if button:FindFirstChild('Highlight') then - button.Highlight.Visible = false - end - - if button:IsA("ImageButton") or button:IsA("TextButton") then - button.ZIndex = 1 - local inverseEnlarge = 1/enlargeFactor - local centerizeX = -(buttonSizeNormal.X.Scale - button.Size.X.Scale)/2 - local centerizeY = -(buttonSizeNormal.Y.Scale - button.Size.Y.Scale)/2 - button:TweenSizeAndPosition(buttonSizeNormal, - UDim2.new(button.Position.X.Scale + centerizeX,button.Position.X.Offset,button.Position.Y.Scale + centerizeY,button.Position.Y.Offset), - Enum.EasingDirection.Out, Enum.EasingStyle.Quad,moveSpeed,enlargeOverride) - end -end - -local waitForDebounce = function() - while debounce do - wait() - end -end - -function pointInRectangle(point,rectTopLeft,rectSize) - if point.x > rectTopLeft.x and point.x < (rectTopLeft.x + rectSize.x) then - if point.y > rectTopLeft.y and point.y < (rectTopLeft.y + rectSize.y) then - return true - end - end - return false -end - -function swapGear(gearClone,toFrame) - local toFrameChildren = toFrame:GetChildren() - if #toFrameChildren == 1 then - if toFrameChildren[1]:FindFirstChild("SlotNumber") then - - local toSlot = tonumber(toFrameChildren[1].SlotNumber.Text) - local gearCloneSlot = tonumber(gearClone.SlotNumber.Text) - if toSlot == 0 then toSlot = 10 end - if gearCloneSlot == 0 then gearCloneSlot = 10 end - - gearSlots[toSlot] = gearClone - gearSlots[gearCloneSlot] = toFrameChildren[1] - - toFrameChildren[1].SlotNumber.Text = gearClone.SlotNumber.Text - toFrameChildren[1].SlotNumberDownShadow.Text = gearClone.SlotNumber.Text - toFrameChildren[1].SlotNumberUpShadow.Text = gearClone.SlotNumber.Text - - local subString = string.sub(toFrame.Name,5) - gearClone.SlotNumber.Text = subString - gearClone.SlotNumberDownShadow.Text = subString - gearClone.SlotNumberUpShadow.Text = subString - - gearClone.Position = UDim2.new(gearClone.Position.X.Scale,0,gearClone.Position.Y.Scale,0) - toFrameChildren[1].Position = UDim2.new(toFrameChildren[1].Position.X.Scale,0,toFrameChildren[1].Position.Y.Scale,0) - - toFrameChildren[1].Parent = gearClone.Parent - gearClone.Parent = toFrame - end - else - local slotNum = tonumber(gearClone.SlotNumber.Text) - if slotNum == 0 then slotNum = 10 end - gearSlots[slotNum] = "empty" -- reset this gear slot - - local subString = string.sub(toFrame.Name,5) - gearClone.SlotNumber.Text = subString - gearClone.SlotNumberDownShadow.Text = subString - gearClone.SlotNumberUpShadow.Text = subString - - local toSlotNum = tonumber(gearClone.SlotNumber.Text) - if toSlotNum == 0 then toSlotNum = 10 end - gearSlots[toSlotNum] = gearClone - gearClone.Position = UDim2.new(gearClone.Position.X.Scale,0,gearClone.Position.Y.Scale,0) - gearClone.Parent = toFrame - end -end - -function resolveDrag(gearClone,x,y) - local mousePoint = Vector2.new(x,y) - - local frame = gearClone.Parent - local frames = frame.Parent:GetChildren() - - for i = 1, #frames do - if frames[i]:IsA("Frame") then - if pointInRectangle(mousePoint, frames[i].AbsolutePosition,frames[i].AbsoluteSize) then - swapGear(gearClone,frames[i]) - return true - end - end - end - - if x < frame.AbsolutePosition.x or x > ( frame.AbsolutePosition.x + frame.AbsoluteSize.x ) then - reorganizeLoadout(gearClone,false) - return false - elseif y < frame.AbsolutePosition.y or y > ( frame.AbsolutePosition.y + frame.AbsoluteSize.y ) then - reorganizeLoadout(gearClone,false) - return false - else - if dragBeginPos then gearClone.Position = dragBeginPos end - return -1 - end -end - -function unequipAllItems(dontEquipThis) - for i = 1, #gearSlots do - if gearSlots[i] == "empty" then break end - if gearSlots[i].GearReference.Value and gearSlots[i].GearReference.Value ~= dontEquipThis then - if gearSlots[i].GearReference.Value:IsA("HopperBin") then - gearSlots[i].GearReference.Value:Disable() - elseif gearSlots[i].GearReference.Value:IsA("Tool") then - gearSlots[i].GearReference.Value.Parent = game.Players.LocalPlayer.Backpack - end - gearSlots[i].Selected = false - end - end -end - -function showToolTip(button, tip) - if button and button:FindFirstChild("ToolTipLabel") and button.ToolTipLabel:IsA("TextLabel") and not IsTouchDevice() then - button.ToolTipLabel.Text = tostring(tip) - local xSize = button.ToolTipLabel.TextBounds.X + 6 - button.ToolTipLabel.Size = UDim2.new(0,xSize,0,20) - button.ToolTipLabel.Position = UDim2.new(0.5,-xSize/2,0,-30) - button.ToolTipLabel.Visible = true - end -end - -function hideToolTip(button, tip) - if button and button:FindFirstChild("ToolTipLabel") and button.ToolTipLabel:IsA("TextLabel") then - button.ToolTipLabel.Visible = false - end -end - -local addingPlayerChild = function(child, equipped, addToSlot, inventoryGearButton) - waitForDebounce() - debounce = true - - if child:FindFirstChild("RobloxBuildTool") then debounce = false return end -- don't show roblox build tools - if not child:IsA("Tool") then - if not child:IsA("HopperBin") then - debounce = false - return -- we don't care about anything besides tools (sigh...) - end - end - - if not addToSlot then - for i = 1, #gearSlots do - if gearSlots[i] ~= "empty" and gearSlots[i].GearReference.Value == child then -- we already have gear, do nothing - debounce = false - return - end - end - end - - local gearClone = currentLoadout.TempSlot:clone() - gearClone.Name = child.Name - gearClone.GearImage.Image = child.TextureId - if gearClone.GearImage.Image == "" then - gearClone.GearText.Text = child.Name - end - gearClone.GearReference.Value = child - - gearClone.MouseEnter:connect(function() - if gearClone.GearReference and gearClone.GearReference.Value["ToolTip"] and gearClone.GearReference.Value.ToolTip ~= "" then - showToolTip(gearClone, gearClone.GearReference.Value.ToolTip) - end - end) - - gearClone.MouseLeave:connect(function() - if gearClone.GearReference and gearClone.GearReference.Value["ToolTip"] and gearClone.GearReference.Value.ToolTip ~= "" then - hideToolTip(gearClone, gearClone.GearReference.Value.ToolTip) - end - end) - - gearClone.RobloxLocked = true - - local slotToMod = -1 - - if not addToSlot then - for i = 1, #gearSlots do - if gearSlots[i] == "empty" then - slotToMod = i - break - end - end - else - slotToMod = addToSlot - end - - if slotToMod == - 1 then -- No available slot to add in! - debounce = false - return - end - - local slotNum = slotToMod % 10 - local parent = currentLoadout:FindFirstChild("Slot"..tostring(slotNum)) - gearClone.Parent = parent - - if inventoryGearButton then - local absolutePositionFinal = inventoryGearButton.AbsolutePosition - local currentAbsolutePosition = gearClone.AbsolutePosition - local diff = absolutePositionFinal - currentAbsolutePosition - gearClone.Position = UDim2.new(gearClone.Position.X.Scale,diff.x,gearClone.Position.Y.Scale,diff.y) - gearClone.ZIndex = 4 - end - - if addToSlot then - reorganizeLoadout(gearClone, true, equipped, addToSlot) - else - reorganizeLoadout(gearClone, true) - end - - if gearClone.Parent == nil then debounce = false return end -- couldn't fit in (hopper is full!) - - if equipped then - gearClone.Selected = true - unequipAllItems(child) - delay(guiTweenSpeed + 0.01,function() -- if our gear is equipped, we will want to enlarge it when done moving - if gearClone:FindFirstChild("GearReference") and ( (gearClone.GearReference.Value:IsA("Tool") and gearClone.GearReference.Value.Parent == player.Character) or - (gearClone.GearReference.Value:IsA("HopperBin") and gearClone.GearReference.Value.Active == true) ) then - enlargeButton(gearClone) - end - end) - end - - local dragBeginPos = nil - local clickCon, buttonDeleteCon, mouseEnterCon, mouseLeaveCon, dragStop, dragBegin = nil - clickCon = gearClone.MouseButton1Click:connect(function() - if characterInWorkspace() then - if not gearClone.Draggable then - activateGear(gearClone.SlotNumber.Text) - end - end - end) - mouseEnterCon = gearClone.MouseEnter:connect(function() - if guiBackpack.Visible then - gearClone.Draggable = true - end - end) - dragBegin = gearClone.DragBegin:connect(function(pos) - dragBeginPos = pos - gearClone.ZIndex = 7 - local children = gearClone:GetChildren() - for i = 1, #children do - if children[i]:IsA("TextLabel") then - if string.find(children[i].Name,"Shadow") then - children[i].ZIndex = 8 - else - children[i].ZIndex = 9 - end - elseif children[i]:IsA("Frame") or children[i]:IsA("ImageLabel") then - children[i].ZIndex = 7 - end - end - end) - dragStop = gearClone.DragStopped:connect(function(x,y) - if gearClone.Selected then - gearClone.ZIndex = 4 - else - gearClone.ZIndex = 3 - end - local children = gearClone:GetChildren() - for i = 1, #children do - if children[i]:IsA("TextLabel") then - if string.find(children[i].Name,"Shadow") then - children[i].ZIndex = 3 - else - children[i].ZIndex = 4 - end - elseif children[i]:IsA("Frame") or children[i]:IsA("ImageLabel") then - children[i].ZIndex = 2 - end - end - resolveDrag(gearClone,x,y) - end) - mouseLeaveCon = gearClone.MouseLeave:connect(function() - gearClone.Draggable = false - end) - buttonDeleteCon = gearClone.AncestryChanged:connect(function() - if gearClone.Parent and gearClone.Parent.Parent == currentLoadout then return end - if clickCon then clickCon:disconnect() end - if buttonDeleteCon then buttonDeleteCon:disconnect() end - if mouseEnterCon then mouseEnterCon:disconnect() end - if mouseLeaveCon then mouseLeaveCon:disconnect() end - if dragStop then dragStop:disconnect() end - if dragBegin then dragBegin:disconnect() end - end) -- this probably isn't necessary since objects are being deleted (probably), but this might still leak just in case - - local childCon = nil - local childChangeCon = nil - childCon = child.AncestryChanged:connect(function(newChild,parent) - if not checkToolAncestry(newChild,parent) then - if childCon then childCon:disconnect() end - if childChangeCon then childChangeCon:disconnect() end - removeFromInventory(child) - elseif parent == game.Players.LocalPlayer.Backpack then - normalizeButton(gearClone) - end - end) - - childChangeCon = child.Changed:connect(function(prop) - if prop == "Name" then - if gearClone and gearClone.GearImage.Image == "" then - gearClone.GearText.Text = child.Name - end - elseif prop == "Active" then - if child and child:IsA("HopperBin") then - if not child.Active then - gearClone.Selected = false - normalizeButton(gearClone) - end - end - elseif prop == "TextureId" then - gearClone.GearImage.Image = child.TextureId - end - end) - - debounce = false - - Spawn(function() - while backpackIsOpen() do wait(0.03) end - for i = 1, #gearSlots do - if gearSlots[i] ~= 'empty' then - backpackButton.Position = UDim2.new(0.5, -60, 1, -108) - backpackButton.Visible = true - clBackground.Visible = true - end - end - end) -end - -function addToInventory(child) - if not child:IsA("Tool") or not child:IsA("HopperBin") then return end - - local slot = nil - for i = 1, #inventory do - if inventory[i] and inventory[i] == child then return end - if not inventory[i] then slot = i end - end - if slot then - inventory[slot] = child - elseif #inventory < 1 then - inventory[1] = child - else - inventory[#inventory + 1] = child - end -end - -function removeFromInventory(child) - for i = 1, #inventory do - if inventory[i] == child then - table.remove(inventory,i) - inventory[i] = nil - end - end -end - -local spreadOutGear = function() - loadoutChildren = currentLoadout:GetChildren() - - for i = 1, #loadoutChildren do - if loadoutChildren[i]:IsA("Frame") then - loadoutChildren[i].BackgroundTransparency = 0.5 - local slot = tonumber(string.sub(loadoutChildren[i].Name,5)) - if slot == 0 then slot = 10 end - if robloxGui.AbsoluteSize.Y <= 320 then - loadoutChildren[i]:TweenPosition(UDim2.new(0,(slot-1) * 60,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) - else - loadoutChildren[i]:TweenPosition(UDim2.new((slot - 1)/10,0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) - end - end - end -end - -local centerGear = function() - loadoutChildren = currentLoadout:GetChildren() - local gearButtons = {} - local lastSlotAdd = nil - - for i = 1, #loadoutChildren do - if loadoutChildren[i]:IsA("Frame") then - if #loadoutChildren[i]:GetChildren() > 0 then - if loadoutChildren[i].Name == "Slot0" then - lastSlotAdd = loadoutChildren[i] - else - table.insert(gearButtons, loadoutChildren[i]) - end - end - loadoutChildren[i].BackgroundTransparency = 1 - end - end - if lastSlotAdd then table.insert(gearButtons,lastSlotAdd) end - - local startPos = ( 1 - (#gearButtons * 0.1) ) / 2 - for i = 1, #gearButtons do - if robloxGui.AbsoluteSize.Y <= 320 then - startPos = ( 0.5 - (#gearButtons * 0.333)/2 ) - gearButtons[i]:TweenPosition(UDim2.new(startPos + (i-1) * 0.33, 0, 0, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) - else - gearButtons[i]:TweenPosition(UDim2.new(startPos + ((i - 1) * 0.1),0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) - end - end -end - -function editLoadout() - backpackWasOpened = true - if inGearTab then - spreadOutGear() - end -end - -function readonlyLoadout() - if not inGearTab then - centerGear() - end -end - -function setupBackpackListener() - if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end - backpackChildCon = player.Backpack.ChildAdded:connect(function(child) - if not firstInstanceOfLoadout then - firstInstanceOfLoadout = true - backpackButton.Visible = true - clBackground.Visible = true - end - addingPlayerChild(child) - addToInventory(child) - end) -end - -function playerCharacterChildAdded(child) - addingPlayerChild(child,true) - addToInventory(child) -end - -function activateLoadout() - currentLoadout.Visible = true -end - -function deactivateLoadout() - currentLoadout.Visible = false -end - -function tabHandler(inFocus) - inGearTab = inFocus - if inFocus then - editLoadout() - else - readonlyLoadout() - end -end --- End Functions - - - - - - --- Begin Script -wait() -- let stuff initialize incase this is first heartbeat... - -waitForChild(player,"Backpack") -waitForProperty(player,"Character") - --- not sure why this had no delay but the player.CharacterAdded one had one... this type of error would be easier to avoid with function reusage -delay(1,function() - local backpackChildren = player.Backpack:GetChildren() - local size = math.min(10,#backpackChildren) - for i = 1, size do - backpackButton.Visible = true - clBackground.Visible = true - addingPlayerChild(backpackChildren[i],false) - end - setupBackpackListener() -end) - -delay(0, function() - for i = 1, 30 do - if not backpackWasOpened then - if robloxGui.AbsoluteSize.Y <= 320 then - local cChildren = currentLoadout:GetChildren() - for i = 1, #cChildren do - local slotNum = tonumber(string.sub(cChildren[i].Name, 5, string.len(cChildren[i].Name))) - if type(slotNum) == 'number' then - cChildren[i].Position = UDim2.new(0, (slotNum-1) * 60, 0, 0) - end - end - end - end - wait(0.25) - end -end) - -player.ChildAdded:connect(function(child) - if child:IsA('PlayerGui') then - moveHealthBar(child) - end -end) - -waitForProperty(player,"Character") -for i,v in ipairs(player.Character:GetChildren()) do - playerCharacterChildAdded(v) -end -characterChildAddedCon = player.Character.ChildAdded:connect(function(child) playerCharacterChildAdded(child) end) - -waitForChild(player.Character,"Humanoid") -humanoidDiedCon = player.Character.Humanoid.Died:connect(function() - if humanoidDiedCon then humanoidDiedCon:disconnect() humanoidDiedCon = nil end - deactivateLoadout() - if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end - backpackWasOpened = false -end) - -player.CharacterRemoving:connect(function() - for i = 1, #gearSlots do - if gearSlots[i] ~= "empty" then - gearSlots[i].Parent = nil - gearSlots[i] = "empty" - end - end -end) - -player.CharacterAdded:connect(function() - waitForProperty(game.Players,"LocalPlayer") - player = game.Players.LocalPlayer -- make sure we are still looking at the correct character - waitForChild(player,"Backpack") - - - delay(1,function() - local backpackChildren = player.Backpack:GetChildren() - local size = math.min(10,#backpackChildren) - for i = 1, size do - backpackButton.Visible = true - clBackground.Visible = true - addingPlayerChild(backpackChildren[i],false) - end - setupBackpackListener() - end) - - activateLoadout() - - if characterChildAddedCon then - characterChildAddedCon:disconnect() - characterChildAddedCon = nil - end - - characterChildAddedCon = - player.Character.ChildAdded:connect(function(child) - addingPlayerChild(child,true) - end) - - waitForChild(player.Character,"Humanoid") - if backpack.Visible then - backpackOpenEvent:Fire() - end - humanoidDiedCon = - player.Character.Humanoid.Died:connect(function() - backpackButton.Visible = false - clBackground.Visible = false - firstInstanceOfLoadout = false - deactivateLoadout() - - if humanoidDiedCon then humanoidDiedCon:disconnect() humanoidDiedCon = nil end - if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end - end) - waitForChild(player, 'PlayerGui') - moveHealthBar(player.PlayerGui) - delay(0, function() - for i = 1, 30 do - if not backpackWasOpened then - if robloxGui.AbsoluteSize.Y <= 320 then - local cChildren = currentLoadout:GetChildren() - for i = 1, #cChildren do - local slotNum = tonumber(string.sub(cChildren[i].Name, 5, string.len(cChildren[i].Name))) - if type(slotNum) == 'number' then - cChildren[i].Position = UDim2.new(0, (slotNum-1) * 60, 0, 0) - end - end - end - end - wait(0.25) - end - end) -end) - -waitForChild(guiBackpack,"SwapSlot") -guiBackpack.SwapSlot.Changed:connect(function() - if guiBackpack.SwapSlot.Value then - local swapSlot = guiBackpack.SwapSlot - local pos = swapSlot.Slot.Value - if pos == 0 then pos = 10 end - if gearSlots[pos] then - reorganizeLoadout(gearSlots[pos],false) - end - if swapSlot.GearButton.Value then - addingPlayerChild(swapSlot.GearButton.Value.GearReference.Value,false,pos) - end - guiBackpack.SwapSlot.Value = false - end -end) - -game:GetService("GuiService").KeyPressed:connect(function(key) - if characterInWorkspace() then - activateGear(key) - end -end) - -backpackOpenEvent.Event:connect(editLoadout) -backpackCloseEvent.Event:connect(centerGear) -tabClickedEvent.Event:connect(function ( tabName ) - tabHandler(tabName == StaticTabName) -end) \ No newline at end of file diff --git a/maintenance/asset/16 b/maintenance/asset/16 deleted file mode 100644 index 85406f6..0000000 --- a/maintenance/asset/16 +++ /dev/null @@ -1,147 +0,0 @@ -%16% --- Responsible for giving out tools in personal servers - --- first, lets see if buildTools have already been created --- create the object in lighting (TODO: move to some sort of "container" object when we have one) -local toolsArray = game.Lighting:FindFirstChild("BuildToolsModel") -local ownerArray = game.Lighting:FindFirstChild("OwnerToolsModel") -local hasBuildTools = false - -function getIds(idTable, assetTable) - for i = 1, #idTable do - local model = game:GetService("InsertService"):LoadAsset(idTable[i]) - if model then - local children = model:GetChildren() - for i = 1, #children do - if children[i]:IsA("Tool") then - table.insert(assetTable,children[i]) - end - end - end - end -end - -function storeInLighting(modelName, assetTable) - local model = Instance.new("Model") - model.Archivable = false - model.Name = modelName - - for i = 1, #assetTable do - assetTable[i].Parent = model - end - - if not game.Lighting:FindFirstChild(modelName) then -- no one beat us to it, we get to insert - model.Parent = game.Lighting - end -end - -if not toolsArray then -- no one has made build tools yet, we get to! - local buildToolIds = {} - local ownerToolIds = {} - - table.insert(buildToolIds,73089166) -- PartSelectionTool - table.insert(buildToolIds,73089190) -- DeleteTool - table.insert(buildToolIds,73089204) -- CloneTool - table.insert(buildToolIds,73089214) -- RotateTool - table.insert(buildToolIds,73089239) -- ConfigTool - table.insert(buildToolIds,73089259) -- WiringTool - table.insert(buildToolIds,58921588) -- ClassicTool - - table.insert(ownerToolIds, 65347268) - - -- next, create array of our tools - local buildTools = {} - local ownerTools = {} - - getIds(buildToolIds, buildTools) - getIds(ownerToolIds, ownerTools) - - storeInLighting("BuildToolsModel",buildTools) - storeInLighting("OwnerToolsModel",ownerTools) - - toolsArray = game.Lighting:FindFirstChild("BuildToolsModel") - ownerArray = game.Lighting:FindFirstChild("OwnerToolsModel") -end - -local localBuildTools = {} - -function giveBuildTools() - if not hasBuildTools then - hasBuildTools = true - local theTools = toolsArray:GetChildren() - for i = 1, #theTools do - local toolClone = theTools[i]:clone() - if toolClone then - toolClone.Parent = game.Players.LocalPlayer.Backpack - table.insert(localBuildTools,toolClone) - end - end - end -end - -function giveOwnerTools() - local theOwnerTools = ownerArray:GetChildren() - for i = 1, #theOwnerTools do - local ownerToolClone = theOwnerTools[i]:clone() - if ownerToolClone then - ownerToolClone.Parent = game.Players.LocalPlayer.Backpack - table.insert(localBuildTools,ownerToolClone) - end - end -end - -function removeBuildTools() - if hasBuildTools then - hasBuildTools = false - for i = 1, #localBuildTools do - localBuildTools[i].Parent = nil - end - localBuildTools = {} - end -end - -if game.Players.LocalPlayer.HasBuildTools then - giveBuildTools() -end -if game.Players.LocalPlayer.PersonalServerRank >= 255 then - giveOwnerTools() -end - -local debounce = false -game.Players.LocalPlayer.Changed:connect(function(prop) - if prop == "HasBuildTools" then - while debounce do - wait(0.5) - end - - debounce = true - - if game.Players.LocalPlayer.HasBuildTools then - giveBuildTools() - else - removeBuildTools() - end - - if game.Players.LocalPlayer.PersonalServerRank >= 255 then - giveOwnerTools() - end - - debounce = false - elseif prop == "PersonalServerRank" then - if game.Players.LocalPlayer.PersonalServerRank >= 255 then - giveOwnerTools() - elseif game.Players.LocalPlayer.PersonalServerRank <= 0 then - game.Players.LocalPlayer:Remove() -- you're banned, goodbye! - end - end -end) - -game.Players.LocalPlayer.CharacterAdded:connect(function() - hasBuildTools = false - if game.Players.LocalPlayer.HasBuildTools then - giveBuildTools() - end - if game.Players.LocalPlayer.PersonalServerRank >= 255 then - giveOwnerTools() - end -end) diff --git a/maintenance/asset/17 b/maintenance/asset/17 deleted file mode 100644 index 56545a3..0000000 --- a/maintenance/asset/17 +++ /dev/null @@ -1,3845 +0,0 @@ -%17% -local t = {} - -local function ScopedConnect(parentInstance, instance, event, signalFunc, syncFunc, removeFunc) - local eventConnection = nil - - --Connection on parentInstance is scoped by parentInstance (when destroyed, it goes away) - local tryConnect = function() - if game:IsAncestorOf(parentInstance) then - --Entering the world, make sure we are connected/synced - if not eventConnection then - eventConnection = instance[event]:connect(signalFunc) - if syncFunc then syncFunc() end - end - else - --Probably leaving the world, so disconnect for now - if eventConnection then - eventConnection:disconnect() - if removeFunc then removeFunc() end - end - end - end - - --Hook it up to ancestryChanged signal - local connection = parentInstance.AncestryChanged:connect(tryConnect) - - --Now connect us if we're already in the world - tryConnect() - - return connection -end - -local function getScreenGuiAncestor(instance) - local localInstance = instance - while localInstance and not localInstance:IsA("ScreenGui") do - localInstance = localInstance.Parent - end - return localInstance -end - -local function CreateButtons(frame, buttons, yPos, ySize) - local buttonNum = 1 - local buttonObjs = {} - for i, obj in ipairs(buttons) do - local button = Instance.new("TextButton") - button.Name = "Button" .. buttonNum - button.Font = Enum.Font.Arial - button.FontSize = Enum.FontSize.Size18 - button.AutoButtonColor = true - button.Modal = true - if obj["Style"] then - button.Style = obj.Style - else - button.Style = Enum.ButtonStyle.RobloxButton - end - button.Text = obj.Text - button.TextColor3 = Color3.new(1,1,1) - button.MouseButton1Click:connect(obj.Function) - button.Parent = frame - buttonObjs[buttonNum] = button - - buttonNum = buttonNum + 1 - end - local numButtons = buttonNum-1 - - if numButtons == 1 then - frame.Button1.Position = UDim2.new(0.35, 0, yPos.Scale, yPos.Offset) - frame.Button1.Size = UDim2.new(.4,0,ySize.Scale, ySize.Offset) - elseif numButtons == 2 then - frame.Button1.Position = UDim2.new(0.1, 0, yPos.Scale, yPos.Offset) - frame.Button1.Size = UDim2.new(.8/3,0, ySize.Scale, ySize.Offset) - - frame.Button2.Position = UDim2.new(0.55, 0, yPos.Scale, yPos.Offset) - frame.Button2.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) - elseif numButtons >= 3 then - local spacing = .1 / numButtons - local buttonSize = .9 / numButtons - - buttonNum = 1 - while buttonNum <= numButtons do - buttonObjs[buttonNum].Position = UDim2.new(spacing*buttonNum + (buttonNum-1) * buttonSize, 0, yPos.Scale, yPos.Offset) - buttonObjs[buttonNum].Size = UDim2.new(buttonSize, 0, ySize.Scale, ySize.Offset) - buttonNum = buttonNum + 1 - end - end -end - -local function setSliderPos(newAbsPosX,slider,sliderPosition,bar,steps) - - local newStep = steps - 1 --otherwise we really get one more step than we want - local relativePosX = math.min(1, math.max(0, (newAbsPosX - bar.AbsolutePosition.X) / bar.AbsoluteSize.X )) - local wholeNum, remainder = math.modf(relativePosX * newStep) - if remainder > 0.5 then - wholeNum = wholeNum + 1 - end - relativePosX = wholeNum/newStep - - local result = math.ceil(relativePosX * newStep) - if sliderPosition.Value ~= (result + 1) then --only update if we moved a step - sliderPosition.Value = result + 1 - slider.Position = UDim2.new(relativePosX,-slider.AbsoluteSize.X/2,slider.Position.Y.Scale,slider.Position.Y.Offset) - end - -end - -local function cancelSlide(areaSoak) - areaSoak.Visible = false - if areaSoakMouseMoveCon then areaSoakMouseMoveCon:disconnect() end -end - -t.CreateStyledMessageDialog = function(title, message, style, buttons) - local frame = Instance.new("Frame") - frame.Size = UDim2.new(0.5, 0, 0, 165) - frame.Position = UDim2.new(0.25, 0, 0.5, -72.5) - frame.Name = "MessageDialog" - frame.Active = true - frame.Style = Enum.FrameStyle.RobloxRound - - local styleImage = Instance.new("ImageLabel") - styleImage.Name = "StyleImage" - styleImage.BackgroundTransparency = 1 - styleImage.Position = UDim2.new(0,5,0,15) - if style == "error" or style == "Error" then - styleImage.Size = UDim2.new(0, 71, 0, 71) - styleImage.Image = "http://www.jarfeh.xyz/asset?id=42565285" - elseif style == "notify" or style == "Notify" then - styleImage.Size = UDim2.new(0, 71, 0, 71) - styleImage.Image = "http://www.jarfeh.xyz/asset?id=42604978" - elseif style == "confirm" or style == "Confirm" then - styleImage.Size = UDim2.new(0, 74, 0, 76) - styleImage.Image = "http://www.jarfeh.xyz/asset?id=42557901" - else - return t.CreateMessageDialog(title,message,buttons) - end - styleImage.Parent = frame - - local titleLabel = Instance.new("TextLabel") - titleLabel.Name = "Title" - titleLabel.Text = title - titleLabel.TextStrokeTransparency = 0 - titleLabel.BackgroundTransparency = 1 - titleLabel.TextColor3 = Color3.new(221/255,221/255,221/255) - titleLabel.Position = UDim2.new(0, 80, 0, 0) - titleLabel.Size = UDim2.new(1, -80, 0, 40) - titleLabel.Font = Enum.Font.ArialBold - titleLabel.FontSize = Enum.FontSize.Size36 - titleLabel.TextXAlignment = Enum.TextXAlignment.Center - titleLabel.TextYAlignment = Enum.TextYAlignment.Center - titleLabel.Parent = frame - - local messageLabel = Instance.new("TextLabel") - messageLabel.Name = "Message" - messageLabel.Text = message - messageLabel.TextStrokeTransparency = 0 - messageLabel.TextColor3 = Color3.new(221/255,221/255,221/255) - messageLabel.Position = UDim2.new(0.025, 80, 0, 45) - messageLabel.Size = UDim2.new(0.95, -80, 0, 55) - messageLabel.BackgroundTransparency = 1 - messageLabel.Font = Enum.Font.Arial - messageLabel.FontSize = Enum.FontSize.Size18 - messageLabel.TextWrap = true - messageLabel.TextXAlignment = Enum.TextXAlignment.Left - messageLabel.TextYAlignment = Enum.TextYAlignment.Top - messageLabel.Parent = frame - - CreateButtons(frame, buttons, UDim.new(0, 105), UDim.new(0, 40) ) - - return frame -end - -t.CreateMessageDialog = function(title, message, buttons) - local frame = Instance.new("Frame") - frame.Size = UDim2.new(0.5, 0, 0.5, 0) - frame.Position = UDim2.new(0.25, 0, 0.25, 0) - frame.Name = "MessageDialog" - frame.Active = true - frame.Style = Enum.FrameStyle.RobloxRound - - local titleLabel = Instance.new("TextLabel") - titleLabel.Name = "Title" - titleLabel.Text = title - titleLabel.BackgroundTransparency = 1 - titleLabel.TextColor3 = Color3.new(221/255,221/255,221/255) - titleLabel.Position = UDim2.new(0, 0, 0, 0) - titleLabel.Size = UDim2.new(1, 0, 0.15, 0) - titleLabel.Font = Enum.Font.ArialBold - titleLabel.FontSize = Enum.FontSize.Size36 - titleLabel.TextXAlignment = Enum.TextXAlignment.Center - titleLabel.TextYAlignment = Enum.TextYAlignment.Center - titleLabel.Parent = frame - - local messageLabel = Instance.new("TextLabel") - messageLabel.Name = "Message" - messageLabel.Text = message - messageLabel.TextColor3 = Color3.new(221/255,221/255,221/255) - messageLabel.Position = UDim2.new(0.025, 0, 0.175, 0) - messageLabel.Size = UDim2.new(0.95, 0, .55, 0) - messageLabel.BackgroundTransparency = 1 - messageLabel.Font = Enum.Font.Arial - messageLabel.FontSize = Enum.FontSize.Size18 - messageLabel.TextWrap = true - messageLabel.TextXAlignment = Enum.TextXAlignment.Left - messageLabel.TextYAlignment = Enum.TextYAlignment.Top - messageLabel.Parent = frame - - CreateButtons(frame, buttons, UDim.new(0.8,0), UDim.new(0.15, 0)) - - return frame -end - -t.CreateDropDownMenu = function(items, onSelect, forRoblox) - local width = UDim.new(0, 100) - local height = UDim.new(0, 32) - - local xPos = 0.055 - local frame = Instance.new("Frame") - frame.Name = "DropDownMenu" - frame.BackgroundTransparency = 1 - frame.Size = UDim2.new(width, height) - - local dropDownMenu = Instance.new("TextButton") - dropDownMenu.Name = "DropDownMenuButton" - dropDownMenu.TextWrap = true - dropDownMenu.TextColor3 = Color3.new(1,1,1) - dropDownMenu.Text = "Choose One" - dropDownMenu.Font = Enum.Font.ArialBold - dropDownMenu.FontSize = Enum.FontSize.Size18 - dropDownMenu.TextXAlignment = Enum.TextXAlignment.Left - dropDownMenu.TextYAlignment = Enum.TextYAlignment.Center - dropDownMenu.BackgroundTransparency = 1 - dropDownMenu.AutoButtonColor = true - dropDownMenu.Style = Enum.ButtonStyle.RobloxButton - dropDownMenu.Size = UDim2.new(1,0,1,0) - dropDownMenu.Parent = frame - dropDownMenu.ZIndex = 2 - - local dropDownIcon = Instance.new("ImageLabel") - dropDownIcon.Name = "Icon" - dropDownIcon.Active = false - dropDownIcon.Image = "http://www.jarfeh.xyz/asset/?id=45732894" - dropDownIcon.BackgroundTransparency = 1 - dropDownIcon.Size = UDim2.new(0,11,0,6) - dropDownIcon.Position = UDim2.new(1,-11,0.5, -2) - dropDownIcon.Parent = dropDownMenu - dropDownIcon.ZIndex = 2 - - local itemCount = #items - local dropDownItemCount = #items - local useScrollButtons = false - if dropDownItemCount > 6 then - useScrollButtons = true - dropDownItemCount = 6 - end - - local droppedDownMenu = Instance.new("TextButton") - droppedDownMenu.Name = "List" - droppedDownMenu.Text = "" - droppedDownMenu.BackgroundTransparency = 1 - --droppedDownMenu.AutoButtonColor = true - droppedDownMenu.Style = Enum.ButtonStyle.RobloxButton - droppedDownMenu.Visible = false - droppedDownMenu.Active = true --Blocks clicks - droppedDownMenu.Position = UDim2.new(0,0,0,0) - droppedDownMenu.Size = UDim2.new(1,0, (1 + dropDownItemCount)*.8, 0) - droppedDownMenu.Parent = frame - droppedDownMenu.ZIndex = 2 - - local choiceButton = Instance.new("TextButton") - choiceButton.Name = "ChoiceButton" - choiceButton.BackgroundTransparency = 1 - choiceButton.BorderSizePixel = 0 - choiceButton.Text = "ReplaceMe" - choiceButton.TextColor3 = Color3.new(1,1,1) - choiceButton.TextXAlignment = Enum.TextXAlignment.Left - choiceButton.TextYAlignment = Enum.TextYAlignment.Center - choiceButton.BackgroundColor3 = Color3.new(1, 1, 1) - choiceButton.Font = Enum.Font.Arial - choiceButton.FontSize = Enum.FontSize.Size18 - if useScrollButtons then - choiceButton.Size = UDim2.new(1,-13, .8/((dropDownItemCount + 1)*.8),0) - else - choiceButton.Size = UDim2.new(1, 0, .8/((dropDownItemCount + 1)*.8),0) - end - choiceButton.TextWrap = true - choiceButton.ZIndex = 2 - - local areaSoak = Instance.new("TextButton") - areaSoak.Name = "AreaSoak" - areaSoak.Text = "" - areaSoak.BackgroundTransparency = 1 - areaSoak.Active = true - areaSoak.Size = UDim2.new(1,0,1,0) - areaSoak.Visible = false - areaSoak.ZIndex = 3 - - local dropDownSelected = false - - local scrollUpButton - local scrollDownButton - local scrollMouseCount = 0 - - local setZIndex = function(baseZIndex) - droppedDownMenu.ZIndex = baseZIndex +1 - if scrollUpButton then - scrollUpButton.ZIndex = baseZIndex + 3 - end - if scrollDownButton then - scrollDownButton.ZIndex = baseZIndex + 3 - end - - local children = droppedDownMenu:GetChildren() - if children then - for i, child in ipairs(children) do - if child.Name == "ChoiceButton" then - child.ZIndex = baseZIndex + 2 - elseif child.Name == "ClickCaptureButton" then - child.ZIndex = baseZIndex - end - end - end - end - - local scrollBarPosition = 1 - local updateScroll = function() - if scrollUpButton then - scrollUpButton.Active = scrollBarPosition > 1 - end - if scrollDownButton then - scrollDownButton.Active = scrollBarPosition + dropDownItemCount <= itemCount - end - - local children = droppedDownMenu:GetChildren() - if not children then return end - - local childNum = 1 - for i, obj in ipairs(children) do - if obj.Name == "ChoiceButton" then - if childNum < scrollBarPosition or childNum >= scrollBarPosition + dropDownItemCount then - obj.Visible = false - else - obj.Position = UDim2.new(0,0,((childNum-scrollBarPosition+1)*.8)/((dropDownItemCount+1)*.8),0) - obj.Visible = true - end - obj.TextColor3 = Color3.new(1,1,1) - obj.BackgroundTransparency = 1 - - childNum = childNum + 1 - end - end - end - local toggleVisibility = function() - dropDownSelected = not dropDownSelected - - areaSoak.Visible = not areaSoak.Visible - dropDownMenu.Visible = not dropDownSelected - droppedDownMenu.Visible = dropDownSelected - if dropDownSelected then - setZIndex(4) - else - setZIndex(2) - end - if useScrollButtons then - updateScroll() - end - end - droppedDownMenu.MouseButton1Click:connect(toggleVisibility) - - local updateSelection = function(text) - local foundItem = false - local children = droppedDownMenu:GetChildren() - local childNum = 1 - if children then - for i, obj in ipairs(children) do - if obj.Name == "ChoiceButton" then - if obj.Text == text then - obj.Font = Enum.Font.ArialBold - foundItem = true - scrollBarPosition = childNum - else - obj.Font = Enum.Font.Arial - end - childNum = childNum + 1 - end - end - end - if not text then - dropDownMenu.Text = "Choose One" - scrollBarPosition = 1 - else - if not foundItem then - error("Invalid Selection Update -- " .. text) - end - - if scrollBarPosition + dropDownItemCount > itemCount + 1 then - scrollBarPosition = itemCount - dropDownItemCount + 1 - end - - dropDownMenu.Text = text - end - end - - local function scrollDown() - if scrollBarPosition + dropDownItemCount <= itemCount then - scrollBarPosition = scrollBarPosition + 1 - updateScroll() - return true - end - return false - end - local function scrollUp() - if scrollBarPosition > 1 then - scrollBarPosition = scrollBarPosition - 1 - updateScroll() - return true - end - return false - end - - if useScrollButtons then - --Make some scroll buttons - scrollUpButton = Instance.new("ImageButton") - scrollUpButton.Name = "ScrollUpButton" - scrollUpButton.BackgroundTransparency = 1 - scrollUpButton.Image = "rbxasset://textures/ui/scrollbuttonUp.png" - scrollUpButton.Size = UDim2.new(0,17,0,17) - scrollUpButton.Position = UDim2.new(1,-11,(1*.8)/((dropDownItemCount+1)*.8),0) - scrollUpButton.MouseButton1Click:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - end) - scrollUpButton.MouseLeave:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - end) - scrollUpButton.MouseButton1Down:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - - scrollUp() - local val = scrollMouseCount - wait(0.5) - while val == scrollMouseCount do - if scrollUp() == false then - break - end - wait(0.1) - end - end) - - scrollUpButton.Parent = droppedDownMenu - - scrollDownButton = Instance.new("ImageButton") - scrollDownButton.Name = "ScrollDownButton" - scrollDownButton.BackgroundTransparency = 1 - scrollDownButton.Image = "rbxasset://textures/ui/scrollbuttonDown.png" - scrollDownButton.Size = UDim2.new(0,17,0,17) - scrollDownButton.Position = UDim2.new(1,-11,1,-11) - scrollDownButton.Parent = droppedDownMenu - scrollDownButton.MouseButton1Click:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - end) - scrollDownButton.MouseLeave:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - end) - scrollDownButton.MouseButton1Down:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - - scrollDown() - local val = scrollMouseCount - wait(0.5) - while val == scrollMouseCount do - if scrollDown() == false then - break - end - wait(0.1) - end - end) - - local scrollbar = Instance.new("ImageLabel") - scrollbar.Name = "ScrollBar" - scrollbar.Image = "rbxasset://textures/ui/scrollbar.png" - scrollbar.BackgroundTransparency = 1 - scrollbar.Size = UDim2.new(0, 18, (dropDownItemCount*.8)/((dropDownItemCount+1)*.8), -(17) - 11 - 4) - scrollbar.Position = UDim2.new(1,-11,(1*.8)/((dropDownItemCount+1)*.8),17+2) - scrollbar.Parent = droppedDownMenu - end - - for i,item in ipairs(items) do - -- needed to maintain local scope for items in event listeners below - local button = choiceButton:clone() - if forRoblox then - button.RobloxLocked = true - end - button.Text = item - button.Parent = droppedDownMenu - button.MouseButton1Click:connect(function() - --Remove Highlight - button.TextColor3 = Color3.new(1,1,1) - button.BackgroundTransparency = 1 - - updateSelection(item) - onSelect(item) - - toggleVisibility() - end) - button.MouseEnter:connect(function() - --Add Highlight - button.TextColor3 = Color3.new(0,0,0) - button.BackgroundTransparency = 0 - end) - - button.MouseLeave:connect(function() - --Remove Highlight - button.TextColor3 = Color3.new(1,1,1) - button.BackgroundTransparency = 1 - end) - end - - --This does the initial layout of the buttons - updateScroll() - - frame.AncestryChanged:connect(function(child,parent) - if parent == nil then - areaSoak.Parent = nil - else - areaSoak.Parent = getScreenGuiAncestor(frame) - end - end) - - dropDownMenu.MouseButton1Click:connect(toggleVisibility) - areaSoak.MouseButton1Click:connect(toggleVisibility) - return frame, updateSelection -end - -t.CreatePropertyDropDownMenu = function(instance, property, enum) - - local items = enum:GetEnumItems() - local names = {} - local nameToItem = {} - for i,obj in ipairs(items) do - names[i] = obj.Name - nameToItem[obj.Name] = obj - end - - local frame - local updateSelection - frame, updateSelection = t.CreateDropDownMenu(names, function(text) instance[property] = nameToItem[text] end) - - ScopedConnect(frame, instance, "Changed", - function(prop) - if prop == property then - updateSelection(instance[property].Name) - end - end, - function() - updateSelection(instance[property].Name) - end) - - return frame -end - -t.GetFontHeight = function(font, fontSize) - if font == nil or fontSize == nil then - error("Font and FontSize must be non-nil") - end - - if font == Enum.Font.Legacy then - if fontSize == Enum.FontSize.Size8 then - return 12 - elseif fontSize == Enum.FontSize.Size9 then - return 14 - elseif fontSize == Enum.FontSize.Size10 then - return 15 - elseif fontSize == Enum.FontSize.Size11 then - return 17 - elseif fontSize == Enum.FontSize.Size12 then - return 18 - elseif fontSize == Enum.FontSize.Size14 then - return 21 - elseif fontSize == Enum.FontSize.Size18 then - return 27 - elseif fontSize == Enum.FontSize.Size24 then - return 36 - elseif fontSize == Enum.FontSize.Size36 then - return 54 - elseif fontSize == Enum.FontSize.Size48 then - return 72 - else - error("Unknown FontSize") - end - elseif font == Enum.Font.Arial or font == Enum.Font.ArialBold then - if fontSize == Enum.FontSize.Size8 then - return 8 - elseif fontSize == Enum.FontSize.Size9 then - return 9 - elseif fontSize == Enum.FontSize.Size10 then - return 10 - elseif fontSize == Enum.FontSize.Size11 then - return 11 - elseif fontSize == Enum.FontSize.Size12 then - return 12 - elseif fontSize == Enum.FontSize.Size14 then - return 14 - elseif fontSize == Enum.FontSize.Size18 then - return 18 - elseif fontSize == Enum.FontSize.Size24 then - return 24 - elseif fontSize == Enum.FontSize.Size36 then - return 36 - elseif fontSize == Enum.FontSize.Size48 then - return 48 - else - error("Unknown FontSize") - end - else - error("Unknown Font " .. font) - end -end - -local function layoutGuiObjectsHelper(frame, guiObjects, settingsTable) - local totalPixels = frame.AbsoluteSize.Y - local pixelsRemaining = frame.AbsoluteSize.Y - for i, child in ipairs(guiObjects) do - if child:IsA("TextLabel") or child:IsA("TextButton") then - local isLabel = child:IsA("TextLabel") - if isLabel then - pixelsRemaining = pixelsRemaining - settingsTable["TextLabelPositionPadY"] - else - pixelsRemaining = pixelsRemaining - settingsTable["TextButtonPositionPadY"] - end - child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) - child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, pixelsRemaining) - - if child.TextFits and child.TextBounds.Y < pixelsRemaining then - child.Visible = true - if isLabel then - child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.TextBounds.Y + settingsTable["TextLabelSizePadY"]) - else - child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.TextBounds.Y + settingsTable["TextButtonSizePadY"]) - end - - while not child.TextFits do - child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.AbsoluteSize.Y + 1) - end - pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y - - if isLabel then - pixelsRemaining = pixelsRemaining - settingsTable["TextLabelPositionPadY"] - else - pixelsRemaining = pixelsRemaining - settingsTable["TextButtonPositionPadY"] - end - else - child.Visible = false - pixelsRemaining = -1 - end - - else - --GuiObject - child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) - pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y - child.Visible = (pixelsRemaining >= 0) - end - end -end - -t.LayoutGuiObjects = function(frame, guiObjects, settingsTable) - if not frame:IsA("GuiObject") then - error("Frame must be a GuiObject") - end - for i, child in ipairs(guiObjects) do - if not child:IsA("GuiObject") then - error("All elements that are layed out must be of type GuiObject") - end - end - - if not settingsTable then - settingsTable = {} - end - - if not settingsTable["TextLabelSizePadY"] then - settingsTable["TextLabelSizePadY"] = 0 - end - if not settingsTable["TextLabelPositionPadY"] then - settingsTable["TextLabelPositionPadY"] = 0 - end - if not settingsTable["TextButtonSizePadY"] then - settingsTable["TextButtonSizePadY"] = 12 - end - if not settingsTable["TextButtonPositionPadY"] then - settingsTable["TextButtonPositionPadY"] = 2 - end - - --Wrapper frame takes care of styled objects - local wrapperFrame = Instance.new("Frame") - wrapperFrame.Name = "WrapperFrame" - wrapperFrame.BackgroundTransparency = 1 - wrapperFrame.Size = UDim2.new(1,0,1,0) - wrapperFrame.Parent = frame - - for i, child in ipairs(guiObjects) do - child.Parent = wrapperFrame - end - - local recalculate = function() - wait() - layoutGuiObjectsHelper(wrapperFrame, guiObjects, settingsTable) - end - - frame.Changed:connect( - function(prop) - if prop == "AbsoluteSize" then - --Wait a heartbeat for it to sync in - recalculate(nil) - end - end) - frame.AncestryChanged:connect(recalculate) - - layoutGuiObjectsHelper(wrapperFrame, guiObjects, settingsTable) -end - - -t.CreateSlider = function(steps,width,position) - local sliderGui = Instance.new("Frame") - sliderGui.Size = UDim2.new(1,0,1,0) - sliderGui.BackgroundTransparency = 1 - sliderGui.Name = "SliderGui" - - local sliderSteps = Instance.new("IntValue") - sliderSteps.Name = "SliderSteps" - sliderSteps.Value = steps - sliderSteps.Parent = sliderGui - - local areaSoak = Instance.new("TextButton") - areaSoak.Name = "AreaSoak" - areaSoak.Text = "" - areaSoak.BackgroundTransparency = 1 - areaSoak.Active = false - areaSoak.Size = UDim2.new(1,0,1,0) - areaSoak.Visible = false - areaSoak.ZIndex = 4 - - sliderGui.AncestryChanged:connect(function(child,parent) - if parent == nil then - areaSoak.Parent = nil - else - areaSoak.Parent = getScreenGuiAncestor(sliderGui) - end - end) - - local sliderPosition = Instance.new("IntValue") - sliderPosition.Name = "SliderPosition" - sliderPosition.Value = 0 - sliderPosition.Parent = sliderGui - - local id = math.random(1,100) - - local bar = Instance.new("TextButton") - bar.Text = "" - bar.AutoButtonColor = false - bar.Name = "Bar" - bar.BackgroundColor3 = Color3.new(0,0,0) - if type(width) == "number" then - bar.Size = UDim2.new(0,width,0,5) - else - bar.Size = UDim2.new(0,200,0,5) - end - bar.BorderColor3 = Color3.new(95/255,95/255,95/255) - bar.ZIndex = 2 - bar.Parent = sliderGui - - if position["X"] and position["X"]["Scale"] and position["X"]["Offset"] and position["Y"] and position["Y"]["Scale"] and position["Y"]["Offset"] then - bar.Position = position - end - - local slider = Instance.new("ImageButton") - slider.Name = "Slider" - slider.BackgroundTransparency = 1 - slider.Image = "rbxasset://textures/ui/Slider.png" - slider.Position = UDim2.new(0,0,0.5,-10) - slider.Size = UDim2.new(0,20,0,20) - slider.ZIndex = 3 - slider.Parent = bar - - local areaSoakMouseMoveCon = nil - - areaSoak.MouseLeave:connect(function() - if areaSoak.Visible then - cancelSlide(areaSoak) - end - end) - areaSoak.MouseButton1Up:connect(function() - if areaSoak.Visible then - cancelSlide(areaSoak) - end - end) - - slider.MouseButton1Down:connect(function() - areaSoak.Visible = true - if areaSoakMouseMoveCon then areaSoakMouseMoveCon:disconnect() end - areaSoakMouseMoveCon = areaSoak.MouseMoved:connect(function(x,y) - setSliderPos(x,slider,sliderPosition,bar,steps) - end) - end) - - slider.MouseButton1Up:connect(function() cancelSlide(areaSoak) end) - - sliderPosition.Changed:connect(function(prop) - sliderPosition.Value = math.min(steps, math.max(1,sliderPosition.Value)) - local relativePosX = (sliderPosition.Value - 1) / (steps - 1) - slider.Position = UDim2.new(relativePosX,-slider.AbsoluteSize.X/2,slider.Position.Y.Scale,slider.Position.Y.Offset) - end) - - bar.MouseButton1Down:connect(function(x,y) - setSliderPos(x,slider,sliderPosition,bar,steps) - end) - - return sliderGui, sliderPosition, sliderSteps - -end - -t.CreateTrueScrollingFrame = function() - local lowY = nil - local highY = nil - - local dragCon = nil - local upCon = nil - - local internalChange = false - - local descendantsChangeConMap = {} - - local scrollingFrame = Instance.new("Frame") - scrollingFrame.Name = "ScrollingFrame" - scrollingFrame.Active = true - scrollingFrame.Size = UDim2.new(1,0,1,0) - scrollingFrame.ClipsDescendants = true - - local controlFrame = Instance.new("Frame") - controlFrame.Name = "ControlFrame" - controlFrame.BackgroundTransparency = 1 - controlFrame.Size = UDim2.new(0,18,1,0) - controlFrame.Position = UDim2.new(1,-20,0,0) - controlFrame.Parent = scrollingFrame - - local scrollBottom = Instance.new("BoolValue") - scrollBottom.Value = false - scrollBottom.Name = "ScrollBottom" - scrollBottom.Parent = controlFrame - - local scrollUp = Instance.new("BoolValue") - scrollUp.Value = false - scrollUp.Name = "scrollUp" - scrollUp.Parent = controlFrame - - local scrollUpButton = Instance.new("TextButton") - scrollUpButton.Name = "ScrollUpButton" - scrollUpButton.Text = "" - scrollUpButton.AutoButtonColor = false - scrollUpButton.BackgroundColor3 = Color3.new(0,0,0) - scrollUpButton.BorderColor3 = Color3.new(1,1,1) - scrollUpButton.BackgroundTransparency = 0.5 - scrollUpButton.Size = UDim2.new(0,18,0,18) - scrollUpButton.ZIndex = 2 - scrollUpButton.Parent = controlFrame - for i = 1, 6 do - local triFrame = Instance.new("Frame") - triFrame.BorderColor3 = Color3.new(1,1,1) - triFrame.Name = "tri" .. tostring(i) - triFrame.ZIndex = 3 - triFrame.BackgroundTransparency = 0.5 - triFrame.Size = UDim2.new(0,12 - ((i -1) * 2),0,0) - triFrame.Position = UDim2.new(0,3 + (i -1),0.5,2 - (i -1)) - triFrame.Parent = scrollUpButton - end - scrollUpButton.MouseEnter:connect(function() - scrollUpButton.BackgroundTransparency = 0.1 - local upChildren = scrollUpButton:GetChildren() - for i = 1, #upChildren do - upChildren[i].BackgroundTransparency = 0.1 - end - end) - scrollUpButton.MouseLeave:connect(function() - scrollUpButton.BackgroundTransparency = 0.5 - local upChildren = scrollUpButton:GetChildren() - for i = 1, #upChildren do - upChildren[i].BackgroundTransparency = 0.5 - end - end) - - local scrollDownButton = scrollUpButton:clone() - scrollDownButton.Name = "ScrollDownButton" - scrollDownButton.Position = UDim2.new(0,0,1,-18) - local downChildren = scrollDownButton:GetChildren() - for i = 1, #downChildren do - downChildren[i].Position = UDim2.new(0,3 + (i -1),0.5,-2 + (i - 1)) - end - scrollDownButton.MouseEnter:connect(function() - scrollDownButton.BackgroundTransparency = 0.1 - local downChildren = scrollDownButton:GetChildren() - for i = 1, #downChildren do - downChildren[i].BackgroundTransparency = 0.1 - end - end) - scrollDownButton.MouseLeave:connect(function() - scrollDownButton.BackgroundTransparency = 0.5 - local downChildren = scrollDownButton:GetChildren() - for i = 1, #downChildren do - downChildren[i].BackgroundTransparency = 0.5 - end - end) - scrollDownButton.Parent = controlFrame - - local scrollTrack = Instance.new("Frame") - scrollTrack.Name = "ScrollTrack" - scrollTrack.BackgroundTransparency = 1 - scrollTrack.Size = UDim2.new(0,18,1,-38) - scrollTrack.Position = UDim2.new(0,0,0,19) - scrollTrack.Parent = controlFrame - - local scrollbar = Instance.new("TextButton") - scrollbar.BackgroundColor3 = Color3.new(0,0,0) - scrollbar.BorderColor3 = Color3.new(1,1,1) - scrollbar.BackgroundTransparency = 0.5 - scrollbar.AutoButtonColor = false - scrollbar.Text = "" - scrollbar.Active = true - scrollbar.Name = "ScrollBar" - scrollbar.ZIndex = 2 - scrollbar.BackgroundTransparency = 0.5 - scrollbar.Size = UDim2.new(0, 18, 0.1, 0) - scrollbar.Position = UDim2.new(0,0,0,0) - scrollbar.Parent = scrollTrack - - local scrollNub = Instance.new("Frame") - scrollNub.Name = "ScrollNub" - scrollNub.BorderColor3 = Color3.new(1,1,1) - scrollNub.Size = UDim2.new(0,10,0,0) - scrollNub.Position = UDim2.new(0.5,-5,0.5,0) - scrollNub.ZIndex = 2 - scrollNub.BackgroundTransparency = 0.5 - scrollNub.Parent = scrollbar - - local newNub = scrollNub:clone() - newNub.Position = UDim2.new(0.5,-5,0.5,-2) - newNub.Parent = scrollbar - - local lastNub = scrollNub:clone() - lastNub.Position = UDim2.new(0.5,-5,0.5,2) - lastNub.Parent = scrollbar - - scrollbar.MouseEnter:connect(function() - scrollbar.BackgroundTransparency = 0.1 - scrollNub.BackgroundTransparency = 0.1 - newNub.BackgroundTransparency = 0.1 - lastNub.BackgroundTransparency = 0.1 - end) - scrollbar.MouseLeave:connect(function() - scrollbar.BackgroundTransparency = 0.5 - scrollNub.BackgroundTransparency = 0.5 - newNub.BackgroundTransparency = 0.5 - lastNub.BackgroundTransparency = 0.5 - end) - - local mouseDrag = Instance.new("ImageButton") - mouseDrag.Active = false - mouseDrag.Size = UDim2.new(1.5, 0, 1.5, 0) - mouseDrag.AutoButtonColor = false - mouseDrag.BackgroundTransparency = 1 - mouseDrag.Name = "mouseDrag" - mouseDrag.Position = UDim2.new(-0.25, 0, -0.25, 0) - mouseDrag.ZIndex = 10 - - local function positionScrollBar(x,y,offset) - local oldPos = scrollbar.Position - - if y < scrollTrack.AbsolutePosition.y then - scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,0,0) - return (oldPos ~= scrollbar.Position) - end - - local relativeSize = scrollbar.AbsoluteSize.Y/scrollTrack.AbsoluteSize.Y - - if y > (scrollTrack.AbsolutePosition.y + scrollTrack.AbsoluteSize.y) then - scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,1 - relativeSize,0) - return (oldPos ~= scrollbar.Position) - end - local newScaleYPos = (y - scrollTrack.AbsolutePosition.y - offset)/scrollTrack.AbsoluteSize.y - if newScaleYPos + relativeSize > 1 then - newScaleYPos = 1 - relativeSize - scrollBottom.Value = true - scrollUp.Value = false - elseif newScaleYPos <= 0 then - newScaleYPos = 0 - scrollUp.Value = true - scrollBottom.Value = false - else - scrollUp.Value = false - scrollBottom.Value = false - end - scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,newScaleYPos,0) - - return (oldPos ~= scrollbar.Position) - end - - local function drillDownSetHighLow(instance) - if not instance or not instance:IsA("GuiObject") then return end - if instance == controlFrame then return end - if instance:IsDescendantOf(controlFrame) then return end - if not instance.Visible then return end - - if lowY and lowY > instance.AbsolutePosition.Y then - lowY = instance.AbsolutePosition.Y - elseif not lowY then - lowY = instance.AbsolutePosition.Y - end - if highY and highY < (instance.AbsolutePosition.Y + instance.AbsoluteSize.Y) then - highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y - elseif not highY then - highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y - end - local children = instance:GetChildren() - for i = 1, #children do - drillDownSetHighLow(children[i]) - end - end - - local function resetHighLow() - local firstChildren = scrollingFrame:GetChildren() - - for i = 1, #firstChildren do - drillDownSetHighLow(firstChildren[i]) - end - end - - local function recalculate() - internalChange = true - - local percentFrame = 0 - if scrollbar.Position.Y.Scale > 0 then - if scrollbar.Visible then - percentFrame = scrollbar.Position.Y.Scale/((scrollTrack.AbsoluteSize.Y - scrollbar.AbsoluteSize.Y)/scrollTrack.AbsoluteSize.Y) - else - percentFrame = 0 - end - end - if percentFrame > 0.99 then percentFrame = 1 end - - local hiddenYAmount = (scrollingFrame.AbsoluteSize.Y - (highY - lowY)) * percentFrame - - local guiChildren = scrollingFrame:GetChildren() - for i = 1, #guiChildren do - if guiChildren[i] ~= controlFrame then - guiChildren[i].Position = UDim2.new(guiChildren[i].Position.X.Scale,guiChildren[i].Position.X.Offset, - 0, math.ceil(guiChildren[i].AbsolutePosition.Y) - math.ceil(lowY) + hiddenYAmount) - end - end - - lowY = nil - highY = nil - resetHighLow() - internalChange = false - end - - local function setSliderSizeAndPosition() - if not highY or not lowY then return end - - local totalYSpan = math.abs(highY - lowY) - if totalYSpan == 0 then - scrollbar.Visible = false - scrollDownButton.Visible = false - scrollUpButton.Visible = false - - if dragCon then dragCon:disconnect() dragCon = nil end - if upCon then upCon:disconnect() upCon = nil end - return - end - - local percentShown = scrollingFrame.AbsoluteSize.Y/totalYSpan - if percentShown >= 1 then - scrollbar.Visible = false - scrollDownButton.Visible = false - scrollUpButton.Visible = false - recalculate() - else - scrollbar.Visible = true - scrollDownButton.Visible = true - scrollUpButton.Visible = true - - scrollbar.Size = UDim2.new(scrollbar.Size.X.Scale,scrollbar.Size.X.Offset,percentShown,0) - end - - local percentPosition = (scrollingFrame.AbsolutePosition.Y - lowY)/totalYSpan - scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,percentPosition,-scrollbar.AbsoluteSize.X/2) - - if scrollbar.AbsolutePosition.y < scrollTrack.AbsolutePosition.y then - scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,0,0) - end - - if (scrollbar.AbsolutePosition.y + scrollbar.AbsoluteSize.Y) > (scrollTrack.AbsolutePosition.y + scrollTrack.AbsoluteSize.y) then - local relativeSize = scrollbar.AbsoluteSize.Y/scrollTrack.AbsoluteSize.Y - scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,1 - relativeSize,0) - end - end - - local buttonScrollAmountPixels = 7 - local reentrancyGuardScrollUp = false - local function doScrollUp() - if reentrancyGuardScrollUp then return end - - reentrancyGuardScrollUp = true - if positionScrollBar(0,scrollbar.AbsolutePosition.Y - buttonScrollAmountPixels,0) then - recalculate() - end - reentrancyGuardScrollUp = false - end - - local reentrancyGuardScrollDown = false - local function doScrollDown() - if reentrancyGuardScrollDown then return end - - reentrancyGuardScrollDown = true - if positionScrollBar(0,scrollbar.AbsolutePosition.Y + buttonScrollAmountPixels,0) then - recalculate() - end - reentrancyGuardScrollDown = false - end - - local function scrollUp(mouseYPos) - if scrollUpButton.Active then - scrollStamp = tick() - local current = scrollStamp - local upCon - upCon = mouseDrag.MouseButton1Up:connect(function() - scrollStamp = tick() - mouseDrag.Parent = nil - upCon:disconnect() - end) - mouseDrag.Parent = getScreenGuiAncestor(scrollbar) - doScrollUp() - wait(0.2) - local t = tick() - local w = 0.1 - while scrollStamp == current do - doScrollUp() - if mouseYPos and mouseYPos > scrollbar.AbsolutePosition.y then - break - end - if not scrollUpButton.Active then break end - if tick()-t > 5 then - w = 0 - elseif tick()-t > 2 then - w = 0.06 - end - wait(w) - end - end - end - - local function scrollDown(mouseYPos) - if scrollDownButton.Active then - scrollStamp = tick() - local current = scrollStamp - local downCon - downCon = mouseDrag.MouseButton1Up:connect(function() - scrollStamp = tick() - mouseDrag.Parent = nil - downCon:disconnect() - end) - mouseDrag.Parent = getScreenGuiAncestor(scrollbar) - doScrollDown() - wait(0.2) - local t = tick() - local w = 0.1 - while scrollStamp == current do - doScrollDown() - if mouseYPos and mouseYPos < (scrollbar.AbsolutePosition.y + scrollbar.AbsoluteSize.x) then - break - end - if not scrollDownButton.Active then break end - if tick()-t > 5 then - w = 0 - elseif tick()-t > 2 then - w = 0.06 - end - wait(w) - end - end - end - - scrollbar.MouseButton1Down:connect(function(x,y) - if scrollbar.Active then - scrollStamp = tick() - local mouseOffset = y - scrollbar.AbsolutePosition.y - if dragCon then dragCon:disconnect() dragCon = nil end - if upCon then upCon:disconnect() upCon = nil end - local prevY = y - local reentrancyGuardMouseScroll = false - dragCon = mouseDrag.MouseMoved:connect(function(x,y) - if reentrancyGuardMouseScroll then return end - - reentrancyGuardMouseScroll = true - if positionScrollBar(x,y,mouseOffset) then - recalculate() - end - reentrancyGuardMouseScroll = false - - end) - upCon = mouseDrag.MouseButton1Up:connect(function() - scrollStamp = tick() - mouseDrag.Parent = nil - dragCon:disconnect(); dragCon = nil - upCon:disconnect(); drag = nil - end) - mouseDrag.Parent = getScreenGuiAncestor(scrollbar) - end - end) - - local scrollMouseCount = 0 - - scrollUpButton.MouseButton1Down:connect(function() - scrollUp() - end) - scrollUpButton.MouseButton1Up:connect(function() - scrollStamp = tick() - end) - - scrollDownButton.MouseButton1Up:connect(function() - scrollStamp = tick() - end) - scrollDownButton.MouseButton1Down:connect(function() - scrollDown() - end) - - scrollbar.MouseButton1Up:connect(function() - scrollStamp = tick() - end) - - local function heightCheck(instance) - if highY and (instance.AbsolutePosition.Y + instance.AbsoluteSize.Y) > highY then - highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y - elseif not highY then - highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y - end - setSliderSizeAndPosition() - end - - local function highLowRecheck() - local oldLowY = lowY - local oldHighY = highY - lowY = nil - highY = nil - resetHighLow() - - if (lowY ~= oldLowY) or (highY ~= oldHighY) then - setSliderSizeAndPosition() - end - end - - local function descendantChanged(this, prop) - if internalChange then return end - if not this.Visible then return end - - if prop == "Size" or prop == "Position" then - wait() - highLowRecheck() - end - end - - scrollingFrame.DescendantAdded:connect(function(instance) - if not instance:IsA("GuiObject") then return end - - if instance.Visible then - wait() -- wait a heartbeat for sizes to reconfig - highLowRecheck() - end - - descendantsChangeConMap[instance] = instance.Changed:connect(function(prop) descendantChanged(instance, prop) end) - end) - - scrollingFrame.DescendantRemoving:connect(function(instance) - if not instance:IsA("GuiObject") then return end - if descendantsChangeConMap[instance] then - descendantsChangeConMap[instance]:disconnect() - descendantsChangeConMap[instance] = nil - end - wait() -- wait a heartbeat for sizes to reconfig - highLowRecheck() - end) - - scrollingFrame.Changed:connect(function(prop) - if prop == "AbsoluteSize" then - if not highY or not lowY then return end - - highLowRecheck() - setSliderSizeAndPosition() - end - end) - - return scrollingFrame, controlFrame -end - -t.CreateScrollingFrame = function(orderList,scrollStyle) - local frame = Instance.new("Frame") - frame.Name = "ScrollingFrame" - frame.BackgroundTransparency = 1 - frame.Size = UDim2.new(1,0,1,0) - - local scrollUpButton = Instance.new("ImageButton") - scrollUpButton.Name = "ScrollUpButton" - scrollUpButton.BackgroundTransparency = 1 - scrollUpButton.Image = "rbxasset://textures/ui/scrollbuttonUp.png" - scrollUpButton.Size = UDim2.new(0,17,0,17) - - - local scrollDownButton = Instance.new("ImageButton") - scrollDownButton.Name = "ScrollDownButton" - scrollDownButton.BackgroundTransparency = 1 - scrollDownButton.Image = "rbxasset://textures/ui/scrollbuttonDown.png" - scrollDownButton.Size = UDim2.new(0,17,0,17) - - local scrollbar = Instance.new("ImageButton") - scrollbar.Name = "ScrollBar" - scrollbar.Image = "rbxasset://textures/ui/scrollbar.png" - scrollbar.BackgroundTransparency = 1 - scrollbar.Size = UDim2.new(0, 18, 0, 150) - - local scrollStamp = 0 - - local scrollDrag = Instance.new("ImageButton") - scrollDrag.Image = "http://www.jarfeh.xyz/asset/?id=61367186" - scrollDrag.Size = UDim2.new(1, 0, 0, 16) - scrollDrag.BackgroundTransparency = 1 - scrollDrag.Name = "ScrollDrag" - scrollDrag.Active = true - scrollDrag.Parent = scrollbar - - local mouseDrag = Instance.new("ImageButton") - mouseDrag.Active = false - mouseDrag.Size = UDim2.new(1.5, 0, 1.5, 0) - mouseDrag.AutoButtonColor = false - mouseDrag.BackgroundTransparency = 1 - mouseDrag.Name = "mouseDrag" - mouseDrag.Position = UDim2.new(-0.25, 0, -0.25, 0) - mouseDrag.ZIndex = 10 - - local style = "simple" - if scrollStyle and tostring(scrollStyle) then - style = scrollStyle - end - - local scrollPosition = 1 - local rowSize = 0 - local howManyDisplayed = 0 - - local layoutGridScrollBar = function() - howManyDisplayed = 0 - local guiObjects = {} - if orderList then - for i, child in ipairs(orderList) do - if child.Parent == frame then - table.insert(guiObjects, child) - end - end - else - local children = frame:GetChildren() - if children then - for i, child in ipairs(children) do - if child:IsA("GuiObject") then - table.insert(guiObjects, child) - end - end - end - end - if #guiObjects == 0 then - scrollUpButton.Active = false - scrollDownButton.Active = false - scrollDrag.Active = false - scrollPosition = 1 - return - end - - if scrollPosition > #guiObjects then - scrollPosition = #guiObjects - end - - if scrollPosition < 1 then scrollPosition = 1 end - - local totalPixelsY = frame.AbsoluteSize.Y - local pixelsRemainingY = frame.AbsoluteSize.Y - - local totalPixelsX = frame.AbsoluteSize.X - - local xCounter = 0 - local rowSizeCounter = 0 - local setRowSize = true - - local pixelsBelowScrollbar = 0 - local pos = #guiObjects - - local currentRowY = 0 - - pos = scrollPosition - --count up from current scroll position to fill out grid - while pos <= #guiObjects and pixelsBelowScrollbar < totalPixelsY do - xCounter = xCounter + guiObjects[pos].AbsoluteSize.X - --previous pos was the end of a row - if xCounter >= totalPixelsX then - pixelsBelowScrollbar = pixelsBelowScrollbar + currentRowY - currentRowY = 0 - xCounter = guiObjects[pos].AbsoluteSize.X - end - if guiObjects[pos].AbsoluteSize.Y > currentRowY then - currentRowY = guiObjects[pos].AbsoluteSize.Y - end - pos = pos + 1 - end - --Count wherever current row left off - pixelsBelowScrollbar = pixelsBelowScrollbar + currentRowY - currentRowY = 0 - - pos = scrollPosition - 1 - xCounter = 0 - - --objects with varying X,Y dimensions can rarely cause minor errors - --rechecking every new scrollPosition is necessary to avoid 100% of errors - - --count backwards from current scrollPosition to see if we can add more rows - while pixelsBelowScrollbar + currentRowY < totalPixelsY and pos >= 1 do - xCounter = xCounter + guiObjects[pos].AbsoluteSize.X - rowSizeCounter = rowSizeCounter + 1 - if xCounter >= totalPixelsX then - rowSize = rowSizeCounter - 1 - rowSizeCounter = 0 - xCounter = guiObjects[pos].AbsoluteSize.X - if pixelsBelowScrollbar + currentRowY <= totalPixelsY then - --It fits, so back up our scroll position - pixelsBelowScrollbar = pixelsBelowScrollbar + currentRowY - if scrollPosition <= rowSize then - scrollPosition = 1 - break - else - scrollPosition = scrollPosition - rowSize - end - currentRowY = 0 - else - break - end - end - - if guiObjects[pos].AbsoluteSize.Y > currentRowY then - currentRowY = guiObjects[pos].AbsoluteSize.Y - end - - pos = pos - 1 - end - - --Do check last time if pos = 0 - if (pos == 0) and (pixelsBelowScrollbar + currentRowY <= totalPixelsY) then - scrollPosition = 1 - end - - xCounter = 0 - --pos = scrollPosition - rowSizeCounter = 0 - setRowSize = true - local lastChildSize = 0 - - local xOffset,yOffset = 0 - if guiObjects[1] then - yOffset = math.ceil(math.floor(math.fmod(totalPixelsY,guiObjects[1].AbsoluteSize.X))/2) - xOffset = math.ceil(math.floor(math.fmod(totalPixelsX,guiObjects[1].AbsoluteSize.Y))/2) - end - - for i, child in ipairs(guiObjects) do - if i < scrollPosition then - --print("Hiding " .. child.Name) - child.Visible = false - else - if pixelsRemainingY < 0 then - --print("Out of Space " .. child.Name) - child.Visible = false - else - --print("Laying out " .. child.Name) - --GuiObject - if setRowSize then rowSizeCounter = rowSizeCounter + 1 end - if xCounter + child.AbsoluteSize.X >= totalPixelsX then - if setRowSize then - rowSize = rowSizeCounter - 1 - setRowSize = false - end - xCounter = 0 - pixelsRemainingY = pixelsRemainingY - child.AbsoluteSize.Y - end - child.Position = UDim2.new(child.Position.X.Scale,xCounter + xOffset, 0, totalPixelsY - pixelsRemainingY + yOffset) - xCounter = xCounter + child.AbsoluteSize.X - child.Visible = ((pixelsRemainingY - child.AbsoluteSize.Y) >= 0) - if child.Visible then - howManyDisplayed = howManyDisplayed + 1 - end - lastChildSize = child.AbsoluteSize - end - end - end - - scrollUpButton.Active = (scrollPosition > 1) - if lastChildSize == 0 then - scrollDownButton.Active = false - else - scrollDownButton.Active = ((pixelsRemainingY - lastChildSize.Y) < 0) - end - scrollDrag.Active = #guiObjects > howManyDisplayed - scrollDrag.Visible = scrollDrag.Active - end - - - - local layoutSimpleScrollBar = function() - local guiObjects = {} - howManyDisplayed = 0 - - if orderList then - for i, child in ipairs(orderList) do - if child.Parent == frame then - table.insert(guiObjects, child) - end - end - else - local children = frame:GetChildren() - if children then - for i, child in ipairs(children) do - if child:IsA("GuiObject") then - table.insert(guiObjects, child) - end - end - end - end - if #guiObjects == 0 then - scrollUpButton.Active = false - scrollDownButton.Active = false - scrollDrag.Active = false - scrollPosition = 1 - return - end - - if scrollPosition > #guiObjects then - scrollPosition = #guiObjects - end - - local totalPixels = frame.AbsoluteSize.Y - local pixelsRemaining = frame.AbsoluteSize.Y - - local pixelsBelowScrollbar = 0 - local pos = #guiObjects - while pixelsBelowScrollbar < totalPixels and pos >= 1 do - if pos >= scrollPosition then - pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y - else - if pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y <= totalPixels then - --It fits, so back up our scroll position - pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y - if scrollPosition <= 1 then - scrollPosition = 1 - break - else - --local ("Backing up ScrollPosition from -- " ..scrollPosition) - scrollPosition = scrollPosition - 1 - end - else - break - end - end - pos = pos - 1 - end - - pos = scrollPosition - for i, child in ipairs(guiObjects) do - if i < scrollPosition then - --print("Hiding " .. child.Name) - child.Visible = false - else - if pixelsRemaining < 0 then - --print("Out of Space " .. child.Name) - child.Visible = false - else - --print("Laying out " .. child.Name) - --GuiObject - child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) - pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y - if (pixelsRemaining >= 0) then - child.Visible = true - howManyDisplayed = howManyDisplayed + 1 - else - child.Visible = false - end - end - end - end - scrollUpButton.Active = (scrollPosition > 1) - scrollDownButton.Active = (pixelsRemaining < 0) - scrollDrag.Active = #guiObjects > howManyDisplayed - scrollDrag.Visible = scrollDrag.Active - end - - - local moveDragger = function() - local guiObjects = 0 - local children = frame:GetChildren() - if children then - for i, child in ipairs(children) do - if child:IsA("GuiObject") then - guiObjects = guiObjects + 1 - end - end - end - - if not scrollDrag.Parent then return end - - local dragSizeY = scrollDrag.Parent.AbsoluteSize.y * (1/(guiObjects - howManyDisplayed + 1)) - if dragSizeY < 16 then dragSizeY = 16 end - scrollDrag.Size = UDim2.new(scrollDrag.Size.X.Scale,scrollDrag.Size.X.Offset,scrollDrag.Size.Y.Scale,dragSizeY) - - local relativeYPos = (scrollPosition - 1)/(guiObjects - (howManyDisplayed)) - if relativeYPos > 1 then relativeYPos = 1 - elseif relativeYPos < 0 then relativeYPos = 0 end - local absYPos = 0 - - if relativeYPos ~= 0 then - absYPos = (relativeYPos * scrollbar.AbsoluteSize.y) - (relativeYPos * scrollDrag.AbsoluteSize.y) - end - - scrollDrag.Position = UDim2.new(scrollDrag.Position.X.Scale,scrollDrag.Position.X.Offset,scrollDrag.Position.Y.Scale,absYPos) - end - - local reentrancyGuard = false - local recalculate = function() - if reentrancyGuard then - return - end - reentrancyGuard = true - wait() - local success, err = nil - if style == "grid" then - success, err = pcall(function() layoutGridScrollBar() end) - elseif style == "simple" then - success, err = pcall(function() layoutSimpleScrollBar() end) - end - if not success then print(err) end - moveDragger() - reentrancyGuard = false - end - - local doScrollUp = function() - scrollPosition = (scrollPosition) - rowSize - if scrollPosition < 1 then scrollPosition = 1 end - recalculate(nil) - end - - local doScrollDown = function() - scrollPosition = (scrollPosition) + rowSize - recalculate(nil) - end - - local scrollUp = function(mouseYPos) - if scrollUpButton.Active then - scrollStamp = tick() - local current = scrollStamp - local upCon - upCon = mouseDrag.MouseButton1Up:connect(function() - scrollStamp = tick() - mouseDrag.Parent = nil - upCon:disconnect() - end) - mouseDrag.Parent = getScreenGuiAncestor(scrollbar) - doScrollUp() - wait(0.2) - local t = tick() - local w = 0.1 - while scrollStamp == current do - doScrollUp() - if mouseYPos and mouseYPos > scrollDrag.AbsolutePosition.y then - break - end - if not scrollUpButton.Active then break end - if tick()-t > 5 then - w = 0 - elseif tick()-t > 2 then - w = 0.06 - end - wait(w) - end - end - end - - local scrollDown = function(mouseYPos) - if scrollDownButton.Active then - scrollStamp = tick() - local current = scrollStamp - local downCon - downCon = mouseDrag.MouseButton1Up:connect(function() - scrollStamp = tick() - mouseDrag.Parent = nil - downCon:disconnect() - end) - mouseDrag.Parent = getScreenGuiAncestor(scrollbar) - doScrollDown() - wait(0.2) - local t = tick() - local w = 0.1 - while scrollStamp == current do - doScrollDown() - if mouseYPos and mouseYPos < (scrollDrag.AbsolutePosition.y + scrollDrag.AbsoluteSize.x) then - break - end - if not scrollDownButton.Active then break end - if tick()-t > 5 then - w = 0 - elseif tick()-t > 2 then - w = 0.06 - end - wait(w) - end - end - end - - local y = 0 - scrollDrag.MouseButton1Down:connect(function(x,y) - if scrollDrag.Active then - scrollStamp = tick() - local mouseOffset = y - scrollDrag.AbsolutePosition.y - local dragCon - local upCon - dragCon = mouseDrag.MouseMoved:connect(function(x,y) - local barAbsPos = scrollbar.AbsolutePosition.y - local barAbsSize = scrollbar.AbsoluteSize.y - - local dragAbsSize = scrollDrag.AbsoluteSize.y - local barAbsOne = barAbsPos + barAbsSize - dragAbsSize - y = y - mouseOffset - y = y < barAbsPos and barAbsPos or y > barAbsOne and barAbsOne or y - y = y - barAbsPos - - local guiObjects = 0 - local children = frame:GetChildren() - if children then - for i, child in ipairs(children) do - if child:IsA("GuiObject") then - guiObjects = guiObjects + 1 - end - end - end - - local doublePercent = y/(barAbsSize-dragAbsSize) - local rowDiff = rowSize - local totalScrollCount = guiObjects - (howManyDisplayed - 1) - local newScrollPosition = math.floor((doublePercent * totalScrollCount) + 0.5) + rowDiff - if newScrollPosition < scrollPosition then - rowDiff = -rowDiff - end - - if newScrollPosition < 1 then - newScrollPosition = 1 - end - - scrollPosition = newScrollPosition - recalculate(nil) - end) - upCon = mouseDrag.MouseButton1Up:connect(function() - scrollStamp = tick() - mouseDrag.Parent = nil - dragCon:disconnect(); dragCon = nil - upCon:disconnect(); drag = nil - end) - mouseDrag.Parent = getScreenGuiAncestor(scrollbar) - end - end) - - local scrollMouseCount = 0 - - scrollUpButton.MouseButton1Down:connect( - function() - scrollUp() - end) - scrollUpButton.MouseButton1Up:connect(function() - scrollStamp = tick() - end) - - - scrollDownButton.MouseButton1Up:connect(function() - scrollStamp = tick() - end) - scrollDownButton.MouseButton1Down:connect( - function() - scrollDown() - end) - - scrollbar.MouseButton1Up:connect(function() - scrollStamp = tick() - end) - scrollbar.MouseButton1Down:connect( - function(x,y) - if y > (scrollDrag.AbsoluteSize.y + scrollDrag.AbsolutePosition.y) then - scrollDown(y) - elseif y < (scrollDrag.AbsolutePosition.y) then - scrollUp(y) - end - end) - - - frame.ChildAdded:connect(function() - recalculate(nil) - end) - - frame.ChildRemoved:connect(function() - recalculate(nil) - end) - - frame.Changed:connect( - function(prop) - if prop == "AbsoluteSize" then - --Wait a heartbeat for it to sync in - recalculate(nil) - end - end) - frame.AncestryChanged:connect(function() recalculate(nil) end) - - return frame, scrollUpButton, scrollDownButton, recalculate, scrollbar -end -local function binaryGrow(min, max, fits) - if min > max then - return min - end - local biggestLegal = min - - while min <= max do - local mid = min + math.floor((max - min) / 2) - if fits(mid) and (biggestLegal == nil or biggestLegal < mid) then - biggestLegal = mid - - --Try growing - min = mid + 1 - else - --Doesn't fit, shrink - max = mid - 1 - end - end - return biggestLegal -end - - -local function binaryShrink(min, max, fits) - if min > max then - return min - end - local smallestLegal = max - - while min <= max do - local mid = min + math.floor((max - min) / 2) - if fits(mid) and (smallestLegal == nil or smallestLegal > mid) then - smallestLegal = mid - - --It fits, shrink - max = mid - 1 - else - --Doesn't fit, grow - min = mid + 1 - end - end - return smallestLegal -end - - -local function getGuiOwner(instance) - while instance ~= nil do - if instance:IsA("ScreenGui") or instance:IsA("BillboardGui") then - return instance - end - instance = instance.Parent - end - return nil -end - -t.AutoTruncateTextObject = function(textLabel) - local text = textLabel.Text - - local fullLabel = textLabel:Clone() - fullLabel.Name = "Full" .. textLabel.Name - fullLabel.BorderSizePixel = 0 - fullLabel.BackgroundTransparency = 0 - fullLabel.Text = text - fullLabel.TextXAlignment = Enum.TextXAlignment.Center - fullLabel.Position = UDim2.new(0,-3,0,0) - fullLabel.Size = UDim2.new(0,100,1,0) - fullLabel.Visible = false - fullLabel.Parent = textLabel - - local shortText = nil - local mouseEnterConnection = nil - local mouseLeaveConnection= nil - - local checkForResize = function() - if getGuiOwner(textLabel) == nil then - return - end - textLabel.Text = text - if textLabel.TextFits then - --Tear down the rollover if it is active - if mouseEnterConnection then - mouseEnterConnection:disconnect() - mouseEnterConnection = nil - end - if mouseLeaveConnection then - mouseLeaveConnection:disconnect() - mouseLeaveConnection = nil - end - else - local len = string.len(text) - textLabel.Text = text .. "~" - - --Shrink the text - local textSize = binaryGrow(0, len, - function(pos) - if pos == 0 then - textLabel.Text = "~" - else - textLabel.Text = string.sub(text, 1, pos) .. "~" - end - return textLabel.TextFits - end) - shortText = string.sub(text, 1, textSize) .. "~" - textLabel.Text = shortText - - --Make sure the fullLabel fits - if not fullLabel.TextFits then - --Already too small, grow it really bit to start - fullLabel.Size = UDim2.new(0, 10000, 1, 0) - end - - --Okay, now try to binary shrink it back down - local fullLabelSize = binaryShrink(textLabel.AbsoluteSize.X,fullLabel.AbsoluteSize.X, - function(size) - fullLabel.Size = UDim2.new(0, size, 1, 0) - return fullLabel.TextFits - end) - fullLabel.Size = UDim2.new(0,fullLabelSize+6,1,0) - - --Now setup the rollover effects, if they are currently off - if mouseEnterConnection == nil then - mouseEnterConnection = textLabel.MouseEnter:connect( - function() - fullLabel.ZIndex = textLabel.ZIndex + 1 - fullLabel.Visible = true - --textLabel.Text = "" - end) - end - if mouseLeaveConnection == nil then - mouseLeaveConnection = textLabel.MouseLeave:connect( - function() - fullLabel.Visible = false - --textLabel.Text = shortText - end) - end - end - end - textLabel.AncestryChanged:connect(checkForResize) - textLabel.Changed:connect( - function(prop) - if prop == "AbsoluteSize" then - checkForResize() - end - end) - - checkForResize() - - local function changeText(newText) - text = newText - fullLabel.Text = text - checkForResize() - end - - return textLabel, changeText -end - -local function TransitionTutorialPages(fromPage, toPage, transitionFrame, currentPageValue) - if fromPage then - fromPage.Visible = false - if transitionFrame.Visible == false then - transitionFrame.Size = fromPage.Size - transitionFrame.Position = fromPage.Position - end - else - if transitionFrame.Visible == false then - transitionFrame.Size = UDim2.new(0.0,50,0.0,50) - transitionFrame.Position = UDim2.new(0.5,-25,0.5,-25) - end - end - transitionFrame.Visible = true - currentPageValue.Value = nil - - local newsize, newPosition - if toPage then - --Make it visible so it resizes - toPage.Visible = true - - newSize = toPage.Size - newPosition = toPage.Position - - toPage.Visible = false - else - newSize = UDim2.new(0.0,50,0.0,50) - newPosition = UDim2.new(0.5,-25,0.5,-25) - end - transitionFrame:TweenSizeAndPosition(newSize, newPosition, Enum.EasingDirection.InOut, Enum.EasingStyle.Quad, 0.3, true, - function(state) - if state == Enum.TweenStatus.Completed then - transitionFrame.Visible = false - if toPage then - toPage.Visible = true - currentPageValue.Value = toPage - end - end - end) -end - -t.CreateTutorial = function(name, tutorialKey, createButtons) - local frame = Instance.new("Frame") - frame.Name = "Tutorial-" .. name - frame.BackgroundTransparency = 1 - frame.Size = UDim2.new(0.6, 0, 0.6, 0) - frame.Position = UDim2.new(0.2, 0, 0.2, 0) - - local transitionFrame = Instance.new("Frame") - transitionFrame.Name = "TransitionFrame" - transitionFrame.Style = Enum.FrameStyle.RobloxRound - transitionFrame.Size = UDim2.new(0.6, 0, 0.6, 0) - transitionFrame.Position = UDim2.new(0.2, 0, 0.2, 0) - transitionFrame.Visible = false - transitionFrame.Parent = frame - - local currentPageValue = Instance.new("ObjectValue") - currentPageValue.Name = "CurrentTutorialPage" - currentPageValue.Value = nil - currentPageValue.Parent = frame - - local boolValue = Instance.new("BoolValue") - boolValue.Name = "Buttons" - boolValue.Value = createButtons - boolValue.Parent = frame - - local pages = Instance.new("Frame") - pages.Name = "Pages" - pages.BackgroundTransparency = 1 - pages.Size = UDim2.new(1,0,1,0) - pages.Parent = frame - - local function getVisiblePageAndHideOthers() - local visiblePage = nil - local children = pages:GetChildren() - if children then - for i,child in ipairs(children) do - if child.Visible then - if visiblePage then - child.Visible = false - else - visiblePage = child - end - end - end - end - return visiblePage - end - - local showTutorial = function(alwaysShow) - if alwaysShow or UserSettings().GameSettings:GetTutorialState(tutorialKey) == false then - print("Showing tutorial-",tutorialKey) - local currentTutorialPage = getVisiblePageAndHideOthers() - - local firstPage = pages:FindFirstChild("TutorialPage1") - if firstPage then - TransitionTutorialPages(currentTutorialPage, firstPage, transitionFrame, currentPageValue) - else - error("Could not find TutorialPage1") - end - end - end - - local dismissTutorial = function() - local currentTutorialPage = getVisiblePageAndHideOthers() - - if currentTutorialPage then - TransitionTutorialPages(currentTutorialPage, nil, transitionFrame, currentPageValue) - end - - UserSettings().GameSettings:SetTutorialState(tutorialKey, true) - end - - local gotoPage = function(pageNum) - local page = pages:FindFirstChild("TutorialPage" .. pageNum) - local currentTutorialPage = getVisiblePageAndHideOthers() - TransitionTutorialPages(currentTutorialPage, page, transitionFrame, currentPageValue) - end - - return frame, showTutorial, dismissTutorial, gotoPage -end - -local function CreateBasicTutorialPage(name, handleResize, skipTutorial, giveDoneButton) - local frame = Instance.new("Frame") - frame.Name = "TutorialPage" - frame.Style = Enum.FrameStyle.RobloxRound - frame.Size = UDim2.new(0.6, 0, 0.6, 0) - frame.Position = UDim2.new(0.2, 0, 0.2, 0) - frame.Visible = false - - local frameHeader = Instance.new("TextLabel") - frameHeader.Name = "Header" - frameHeader.Text = name - frameHeader.BackgroundTransparency = 1 - frameHeader.FontSize = Enum.FontSize.Size24 - frameHeader.Font = Enum.Font.ArialBold - frameHeader.TextColor3 = Color3.new(1,1,1) - frameHeader.TextXAlignment = Enum.TextXAlignment.Center - frameHeader.TextWrap = true - frameHeader.Size = UDim2.new(1,-55, 0, 22) - frameHeader.Position = UDim2.new(0,0,0,0) - frameHeader.Parent = frame - - local skipButton = Instance.new("ImageButton") - skipButton.Name = "SkipButton" - skipButton.AutoButtonColor = false - skipButton.BackgroundTransparency = 1 - skipButton.Image = "rbxasset://textures/ui/closeButton.png" - skipButton.MouseButton1Click:connect(function() - skipTutorial() - end) - skipButton.MouseEnter:connect(function() - skipButton.Image = "rbxasset://textures/ui/closeButton_dn.png" - end) - skipButton.MouseLeave:connect(function() - skipButton.Image = "rbxasset://textures/ui/closeButton.png" - end) - skipButton.Size = UDim2.new(0, 25, 0, 25) - skipButton.Position = UDim2.new(1, -25, 0, 0) - skipButton.Parent = frame - - - if giveDoneButton then - local doneButton = Instance.new("TextButton") - doneButton.Name = "DoneButton" - doneButton.Style = Enum.ButtonStyle.RobloxButtonDefault - doneButton.Text = "Done" - doneButton.TextColor3 = Color3.new(1,1,1) - doneButton.Font = Enum.Font.ArialBold - doneButton.FontSize = Enum.FontSize.Size18 - doneButton.Size = UDim2.new(0,100,0,50) - doneButton.Position = UDim2.new(0.5,-50,1,-50) - - if skipTutorial then - doneButton.MouseButton1Click:connect(function() skipTutorial() end) - end - - doneButton.Parent = frame - end - - local innerFrame = Instance.new("Frame") - innerFrame.Name = "ContentFrame" - innerFrame.BackgroundTransparency = 1 - innerFrame.Position = UDim2.new(0,0,0,25) - innerFrame.Parent = frame - - local nextButton = Instance.new("TextButton") - nextButton.Name = "NextButton" - nextButton.Text = "Next" - nextButton.TextColor3 = Color3.new(1,1,1) - nextButton.Font = Enum.Font.Arial - nextButton.FontSize = Enum.FontSize.Size18 - nextButton.Style = Enum.ButtonStyle.RobloxButtonDefault - nextButton.Size = UDim2.new(0,80, 0, 32) - nextButton.Position = UDim2.new(0.5, 5, 1, -32) - nextButton.Active = false - nextButton.Visible = false - nextButton.Parent = frame - - local prevButton = Instance.new("TextButton") - prevButton.Name = "PrevButton" - prevButton.Text = "Previous" - prevButton.TextColor3 = Color3.new(1,1,1) - prevButton.Font = Enum.Font.Arial - prevButton.FontSize = Enum.FontSize.Size18 - prevButton.Style = Enum.ButtonStyle.RobloxButton - prevButton.Size = UDim2.new(0,80, 0, 32) - prevButton.Position = UDim2.new(0.5, -85, 1, -32) - prevButton.Active = false - prevButton.Visible = false - prevButton.Parent = frame - - if giveDoneButton then - innerFrame.Size = UDim2.new(1,0,1,-75) - else - innerFrame.Size = UDim2.new(1,0,1,-22) - end - - local parentConnection = nil - - local function basicHandleResize() - if frame.Visible and frame.Parent then - local maxSize = math.min(frame.Parent.AbsoluteSize.X, frame.Parent.AbsoluteSize.Y) - handleResize(200,maxSize) - end - end - - frame.Changed:connect( - function(prop) - if prop == "Parent" then - if parentConnection ~= nil then - parentConnection:disconnect() - parentConnection = nil - end - if frame.Parent and frame.Parent:IsA("GuiObject") then - parentConnection = frame.Parent.Changed:connect( - function(parentProp) - if parentProp == "AbsoluteSize" then - wait() - basicHandleResize() - end - end) - basicHandleResize() - end - end - - if prop == "Visible" then - basicHandleResize() - end - end) - - return frame, innerFrame -end - -t.CreateTextTutorialPage = function(name, text, skipTutorialFunc) - local frame = nil - local contentFrame = nil - - local textLabel = Instance.new("TextLabel") - textLabel.BackgroundTransparency = 1 - textLabel.TextColor3 = Color3.new(1,1,1) - textLabel.Text = text - textLabel.TextWrap = true - textLabel.TextXAlignment = Enum.TextXAlignment.Left - textLabel.TextYAlignment = Enum.TextYAlignment.Center - textLabel.Font = Enum.Font.Arial - textLabel.FontSize = Enum.FontSize.Size14 - textLabel.Size = UDim2.new(1,0,1,0) - - local function handleResize(minSize, maxSize) - size = binaryShrink(minSize, maxSize, - function(size) - frame.Size = UDim2.new(0, size, 0, size) - return textLabel.TextFits - end) - frame.Size = UDim2.new(0, size, 0, size) - frame.Position = UDim2.new(0.5, -size/2, 0.5, -size/2) - end - - frame, contentFrame = CreateBasicTutorialPage(name, handleResize, skipTutorialFunc) - textLabel.Parent = contentFrame - - return frame -end - -t.CreateImageTutorialPage = function(name, imageAsset, x, y, skipTutorialFunc, giveDoneButton) - local frame = nil - local contentFrame = nil - - local imageLabel = Instance.new("ImageLabel") - imageLabel.BackgroundTransparency = 1 - imageLabel.Image = imageAsset - imageLabel.Size = UDim2.new(0,x,0,y) - imageLabel.Position = UDim2.new(0.5,-x/2,0.5,-y/2) - - local function handleResize(minSize, maxSize) - size = binaryShrink(minSize, maxSize, - function(size) - return size >= x and size >= y - end) - if size >= x and size >= y then - imageLabel.Size = UDim2.new(0,x, 0,y) - imageLabel.Position = UDim2.new(0.5,-x/2, 0.5, -y/2) - else - if x > y then - --X is limiter, so - imageLabel.Size = UDim2.new(1,0,y/x,0) - imageLabel.Position = UDim2.new(0,0, 0.5 - (y/x)/2, 0) - else - --Y is limiter - imageLabel.Size = UDim2.new(x/y,0,1, 0) - imageLabel.Position = UDim2.new(0.5-(x/y)/2, 0, 0, 0) - end - end - size = size + 50 - frame.Size = UDim2.new(0, size, 0, size) - frame.Position = UDim2.new(0.5, -size/2, 0.5, -size/2) - end - - frame, contentFrame = CreateBasicTutorialPage(name, handleResize, skipTutorialFunc, giveDoneButton) - imageLabel.Parent = contentFrame - - return frame -end - -t.AddTutorialPage = function(tutorial, tutorialPage) - local transitionFrame = tutorial.TransitionFrame - local currentPageValue = tutorial.CurrentTutorialPage - - if not tutorial.Buttons.Value then - tutorialPage.NextButton.Parent = nil - tutorialPage.PrevButton.Parent = nil - end - - local children = tutorial.Pages:GetChildren() - if children and #children > 0 then - tutorialPage.Name = "TutorialPage" .. (#children+1) - local previousPage = children[#children] - if not previousPage:IsA("GuiObject") then - error("All elements under Pages must be GuiObjects") - end - - if tutorial.Buttons.Value then - if previousPage.NextButton.Active then - error("NextButton already Active on previousPage, please only add pages with RbxGui.AddTutorialPage function") - end - previousPage.NextButton.MouseButton1Click:connect( - function() - TransitionTutorialPages(previousPage, tutorialPage, transitionFrame, currentPageValue) - end) - previousPage.NextButton.Active = true - previousPage.NextButton.Visible = true - - if tutorialPage.PrevButton.Active then - error("PrevButton already Active on tutorialPage, please only add pages with RbxGui.AddTutorialPage function") - end - tutorialPage.PrevButton.MouseButton1Click:connect( - function() - TransitionTutorialPages(tutorialPage, previousPage, transitionFrame, currentPageValue) - end) - tutorialPage.PrevButton.Active = true - tutorialPage.PrevButton.Visible = true - end - - tutorialPage.Parent = tutorial.Pages - else - --First child - tutorialPage.Name = "TutorialPage1" - tutorialPage.Parent = tutorial.Pages - end -end - -t.CreateSetPanel = function(userIdsForSets, objectSelected, dialogClosed, size, position, showAdminCategories, useAssetVersionId) - - if not userIdsForSets then - error("CreateSetPanel: userIdsForSets (first arg) is nil, should be a table of number ids") - end - if type(userIdsForSets) ~= "table" and type(userIdsForSets) ~= "userdata" then - error("CreateSetPanel: userIdsForSets (first arg) is of type " ..type(userIdsForSets) .. ", should be of type table or userdata") - end - if not objectSelected then - error("CreateSetPanel: objectSelected (second arg) is nil, should be a callback function!") - end - if type(objectSelected) ~= "function" then - error("CreateSetPanel: objectSelected (second arg) is of type " .. type(objectSelected) .. ", should be of type function!") - end - if dialogClosed and type(dialogClosed) ~= "function" then - error("CreateSetPanel: dialogClosed (third arg) is of type " .. type(dialogClosed) .. ", should be of type function!") - end - - if showAdminCategories == nil then -- by default, don't show beta sets - showAdminCategories = false - end - - local arrayPosition = 1 - local insertButtons = {} - local insertButtonCons = {} - local contents = nil - local setGui = nil - - -- used for water selections - local waterForceDirection = "NegX" - local waterForce = "None" - local waterGui, waterTypeChangedEvent = nil - - local Data = {} - Data.CurrentCategory = nil - Data.Category = {} - local SetCache = {} - - local userCategoryButtons = nil - - local buttonWidth = 64 - local buttonHeight = buttonWidth - - local SmallThumbnailUrl = nil - local LargeThumbnailUrl = nil - local BaseUrl = game:GetService("ContentProvider").BaseUrl:lower() - - if useAssetVersionId then - LargeThumbnailUrl = BaseUrl .. "Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=420&ht=420&assetversionid=" - SmallThumbnailUrl = BaseUrl .. "Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=75&ht=75&assetversionid=" - else - LargeThumbnailUrl = BaseUrl .. "Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=420&ht=420&aid=" - SmallThumbnailUrl = BaseUrl .. "Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=75&ht=75&aid=" - end - - local function drillDownSetZIndex(parent, index) - local children = parent:GetChildren() - for i = 1, #children do - if children[i]:IsA("GuiObject") then - children[i].ZIndex = index - end - drillDownSetZIndex(children[i], index) - end - end - - -- for terrain stamping - local currTerrainDropDownFrame = nil - local terrainShapes = {"Block","Vertical Ramp","Corner Wedge","Inverse Corner Wedge","Horizontal Ramp","Auto-Wedge"} - local terrainShapeMap = {} - for i = 1, #terrainShapes do - terrainShapeMap[terrainShapes[i]] = i - 1 - end - terrainShapeMap[terrainShapes[#terrainShapes]] = 6 - - local function createWaterGui() - local waterForceDirections = {"NegX","X","NegY","Y","NegZ","Z"} - local waterForces = {"None", "Small", "Medium", "Strong", "Max"} - - local waterFrame = Instance.new("Frame") - waterFrame.Name = "WaterFrame" - waterFrame.Style = Enum.FrameStyle.RobloxSquare - waterFrame.Size = UDim2.new(0,150,0,110) - waterFrame.Visible = false - - local waterForceLabel = Instance.new("TextLabel") - waterForceLabel.Name = "WaterForceLabel" - waterForceLabel.BackgroundTransparency = 1 - waterForceLabel.Size = UDim2.new(1,0,0,12) - waterForceLabel.Font = Enum.Font.ArialBold - waterForceLabel.FontSize = Enum.FontSize.Size12 - waterForceLabel.TextColor3 = Color3.new(1,1,1) - waterForceLabel.TextXAlignment = Enum.TextXAlignment.Left - waterForceLabel.Text = "Water Force" - waterForceLabel.Parent = waterFrame - - local waterForceDirLabel = waterForceLabel:Clone() - waterForceDirLabel.Name = "WaterForceDirectionLabel" - waterForceDirLabel.Text = "Water Force Direction" - waterForceDirLabel.Position = UDim2.new(0,0,0,50) - waterForceDirLabel.Parent = waterFrame - - local waterTypeChangedEvent = Instance.new("BindableEvent",waterFrame) - waterTypeChangedEvent.Name = "WaterTypeChangedEvent" - - local waterForceDirectionSelectedFunc = function(newForceDirection) - waterForceDirection = newForceDirection - waterTypeChangedEvent:Fire({waterForce, waterForceDirection}) - end - local waterForceSelectedFunc = function(newForce) - waterForce = newForce - waterTypeChangedEvent:Fire({waterForce, waterForceDirection}) - end - - local waterForceDirectionDropDown, forceWaterDirectionSelection = t.CreateDropDownMenu(waterForceDirections, waterForceDirectionSelectedFunc) - waterForceDirectionDropDown.Size = UDim2.new(1,0,0,25) - waterForceDirectionDropDown.Position = UDim2.new(0,0,1,3) - forceWaterDirectionSelection("NegX") - waterForceDirectionDropDown.Parent = waterForceDirLabel - - local waterForceDropDown, forceWaterForceSelection = t.CreateDropDownMenu(waterForces, waterForceSelectedFunc) - forceWaterForceSelection("None") - waterForceDropDown.Size = UDim2.new(1,0,0,25) - waterForceDropDown.Position = UDim2.new(0,0,1,3) - waterForceDropDown.Parent = waterForceLabel - - return waterFrame, waterTypeChangedEvent - end - - -- Helper Function that contructs gui elements - local function createSetGui() - - local setGui = Instance.new("ScreenGui") - setGui.Name = "SetGui" - - local setPanel = Instance.new("Frame") - setPanel.Name = "SetPanel" - setPanel.Active = true - setPanel.BackgroundTransparency = 1 - if position then - setPanel.Position = position - else - setPanel.Position = UDim2.new(0.2, 29, 0.1, 24) - end - if size then - setPanel.Size = size - else - setPanel.Size = UDim2.new(0.6, -58, 0.64, 0) - end - setPanel.Style = Enum.FrameStyle.RobloxRound - setPanel.ZIndex = 6 - setPanel.Parent = setGui - - -- Children of SetPanel - local itemPreview = Instance.new("Frame") - itemPreview.Name = "ItemPreview" - itemPreview.BackgroundTransparency = 1 - itemPreview.Position = UDim2.new(0.8,5,0.085,0) - itemPreview.Size = UDim2.new(0.21,0,0.9,0) - itemPreview.ZIndex = 6 - itemPreview.Parent = setPanel - - -- Children of ItemPreview - local textPanel = Instance.new("Frame") - textPanel.Name = "TextPanel" - textPanel.BackgroundTransparency = 1 - textPanel.Position = UDim2.new(0,0,0.45,0) - textPanel.Size = UDim2.new(1,0,0.55,0) - textPanel.ZIndex = 6 - textPanel.Parent = itemPreview - - -- Children of TextPanel - local rolloverText = Instance.new("TextLabel") - rolloverText.Name = "RolloverText" - rolloverText.BackgroundTransparency = 1 - rolloverText.Size = UDim2.new(1,0,0,48) - rolloverText.ZIndex = 6 - rolloverText.Font = Enum.Font.ArialBold - rolloverText.FontSize = Enum.FontSize.Size24 - rolloverText.Text = "" - rolloverText.TextColor3 = Color3.new(1,1,1) - rolloverText.TextWrap = true - rolloverText.TextXAlignment = Enum.TextXAlignment.Left - rolloverText.TextYAlignment = Enum.TextYAlignment.Top - rolloverText.Parent = textPanel - - local largePreview = Instance.new("ImageLabel") - largePreview.Name = "LargePreview" - largePreview.BackgroundTransparency = 1 - largePreview.Image = "" - largePreview.Size = UDim2.new(1,0,0,170) - largePreview.ZIndex = 6 - largePreview.Parent = itemPreview - - local sets = Instance.new("Frame") - sets.Name = "Sets" - sets.BackgroundTransparency = 1 - sets.Position = UDim2.new(0,0,0,5) - sets.Size = UDim2.new(0.23,0,1,-5) - sets.ZIndex = 6 - sets.Parent = setPanel - - -- Children of Sets - local line = Instance.new("Frame") - line.Name = "Line" - line.BackgroundColor3 = Color3.new(1,1,1) - line.BackgroundTransparency = 0.7 - line.BorderSizePixel = 0 - line.Position = UDim2.new(1,-3,0.06,0) - line.Size = UDim2.new(0,3,0.9,0) - line.ZIndex = 6 - line.Parent = sets - - local setsLists, controlFrame = t.CreateTrueScrollingFrame() - setsLists.Size = UDim2.new(1,-6,0.94,0) - setsLists.Position = UDim2.new(0,0,0.06,0) - setsLists.BackgroundTransparency = 1 - setsLists.Name = "SetsLists" - setsLists.ZIndex = 6 - setsLists.Parent = sets - drillDownSetZIndex(controlFrame, 7) - - local setsHeader = Instance.new("TextLabel") - setsHeader.Name = "SetsHeader" - setsHeader.BackgroundTransparency = 1 - setsHeader.Size = UDim2.new(0,47,0,24) - setsHeader.ZIndex = 6 - setsHeader.Font = Enum.Font.ArialBold - setsHeader.FontSize = Enum.FontSize.Size24 - setsHeader.Text = "Sets" - setsHeader.TextColor3 = Color3.new(1,1,1) - setsHeader.TextXAlignment = Enum.TextXAlignment.Left - setsHeader.TextYAlignment = Enum.TextYAlignment.Top - setsHeader.Parent = sets - - local cancelButton = Instance.new("TextButton") - cancelButton.Name = "CancelButton" - cancelButton.Position = UDim2.new(1,-32,0,-2) - cancelButton.Size = UDim2.new(0,34,0,34) - cancelButton.Style = Enum.ButtonStyle.RobloxButtonDefault - cancelButton.ZIndex = 6 - cancelButton.Text = "" - cancelButton.Modal = true - cancelButton.Parent = setPanel - - -- Children of Cancel Button - local cancelImage = Instance.new("ImageLabel") - cancelImage.Name = "CancelImage" - cancelImage.BackgroundTransparency = 1 - cancelImage.Image = "http://www.jarfeh.xyz/asset?id=54135717" - cancelImage.Position = UDim2.new(0,-2,0,-2) - cancelImage.Size = UDim2.new(0,16,0,16) - cancelImage.ZIndex = 6 - cancelImage.Parent = cancelButton - - return setGui - end - - local function createSetButton(text) - local setButton = Instance.new("TextButton") - - if text then setButton.Text = text - else setButton.Text = "" end - - setButton.AutoButtonColor = false - setButton.BackgroundTransparency = 1 - setButton.BackgroundColor3 = Color3.new(1,1,1) - setButton.BorderSizePixel = 0 - setButton.Size = UDim2.new(1,-5,0,18) - setButton.ZIndex = 6 - setButton.Visible = false - setButton.Font = Enum.Font.Arial - setButton.FontSize = Enum.FontSize.Size18 - setButton.TextColor3 = Color3.new(1,1,1) - setButton.TextXAlignment = Enum.TextXAlignment.Left - - return setButton - end - - local function buildSetButton(name, setId, setImageId, i, count) - local button = createSetButton(name) - button.Text = name - button.Name = "SetButton" - button.Visible = true - - local setValue = Instance.new("IntValue") - setValue.Name = "SetId" - setValue.Value = setId - setValue.Parent = button - - local setName = Instance.new("StringValue") - setName.Name = "SetName" - setName.Value = name - setName.Parent = button - - return button - end - - local function processCategory(sets) - local setButtons = {} - local numSkipped = 0 - for i = 1, #sets do - if not showAdminCategories and sets[i].Name == "Beta" then - numSkipped = numSkipped + 1 - else - setButtons[i - numSkipped] = buildSetButton(sets[i].Name, sets[i].CategoryId, sets[i].ImageAssetId, i - numSkipped, #sets) - end - end - return setButtons - end - - local function handleResize() - wait() -- neccessary to insure heartbeat happened - - local itemPreview = setGui.SetPanel.ItemPreview - - itemPreview.LargePreview.Size = UDim2.new(1,0,0,itemPreview.AbsoluteSize.X) - itemPreview.LargePreview.Position = UDim2.new(0.5,-itemPreview.LargePreview.AbsoluteSize.X/2,0,0) - itemPreview.TextPanel.Position = UDim2.new(0,0,0,itemPreview.LargePreview.AbsoluteSize.Y) - itemPreview.TextPanel.Size = UDim2.new(1,0,0,itemPreview.AbsoluteSize.Y - itemPreview.LargePreview.AbsoluteSize.Y) - end - - local function makeInsertAssetButton() - local insertAssetButtonExample = Instance.new("Frame") - insertAssetButtonExample.Name = "InsertAssetButtonExample" - insertAssetButtonExample.Position = UDim2.new(0,128,0,64) - insertAssetButtonExample.Size = UDim2.new(0,64,0,64) - insertAssetButtonExample.BackgroundTransparency = 1 - insertAssetButtonExample.ZIndex = 6 - insertAssetButtonExample.Visible = false - - local assetId = Instance.new("IntValue") - assetId.Name = "AssetId" - assetId.Value = 0 - assetId.Parent = insertAssetButtonExample - - local assetName = Instance.new("StringValue") - assetName.Name = "AssetName" - assetName.Value = "" - assetName.Parent = insertAssetButtonExample - - local button = Instance.new("TextButton") - button.Name = "Button" - button.Text = "" - button.Style = Enum.ButtonStyle.RobloxButton - button.Position = UDim2.new(0.025,0,0.025,0) - button.Size = UDim2.new(0.95,0,0.95,0) - button.ZIndex = 6 - button.Parent = insertAssetButtonExample - - local buttonImage = Instance.new("ImageLabel") - buttonImage.Name = "ButtonImage" - buttonImage.Image = "" - buttonImage.Position = UDim2.new(0,-7,0,-7) - buttonImage.Size = UDim2.new(1,14,1,14) - buttonImage.BackgroundTransparency = 1 - buttonImage.ZIndex = 7 - buttonImage.Parent = button - - local configIcon = buttonImage:clone() - configIcon.Name = "ConfigIcon" - configIcon.Visible = false - configIcon.Position = UDim2.new(1,-23,1,-24) - configIcon.Size = UDim2.new(0,16,0,16) - configIcon.Image = "" - configIcon.ZIndex = 6 - configIcon.Parent = insertAssetButtonExample - - return insertAssetButtonExample - end - - local function showLargePreview(insertButton) - if insertButton:FindFirstChild("AssetId") then - delay(0,function() - game:GetService("ContentProvider"):Preload(LargeThumbnailUrl .. tostring(insertButton.AssetId.Value)) - setGui.SetPanel.ItemPreview.LargePreview.Image = LargeThumbnailUrl .. tostring(insertButton.AssetId.Value) - end) - end - if insertButton:FindFirstChild("AssetName") then - setGui.SetPanel.ItemPreview.TextPanel.RolloverText.Text = insertButton.AssetName.Value - end - end - - local function selectTerrainShape(shape) - if currTerrainDropDownFrame then - objectSelected(tostring(currTerrainDropDownFrame.AssetName.Value), tonumber(currTerrainDropDownFrame.AssetId.Value), shape) - end - end - - local function createTerrainTypeButton(name, parent) - local dropDownTextButton = Instance.new("TextButton") - dropDownTextButton.Name = name .. "Button" - dropDownTextButton.Font = Enum.Font.ArialBold - dropDownTextButton.FontSize = Enum.FontSize.Size14 - dropDownTextButton.BorderSizePixel = 0 - dropDownTextButton.TextColor3 = Color3.new(1,1,1) - dropDownTextButton.Text = name - dropDownTextButton.TextXAlignment = Enum.TextXAlignment.Left - dropDownTextButton.BackgroundTransparency = 1 - dropDownTextButton.ZIndex = parent.ZIndex + 1 - dropDownTextButton.Size = UDim2.new(0,parent.Size.X.Offset - 2,0,16) - dropDownTextButton.Position = UDim2.new(0,1,0,0) - - dropDownTextButton.MouseEnter:connect(function() - dropDownTextButton.BackgroundTransparency = 0 - dropDownTextButton.TextColor3 = Color3.new(0,0,0) - end) - - dropDownTextButton.MouseLeave:connect(function() - dropDownTextButton.BackgroundTransparency = 1 - dropDownTextButton.TextColor3 = Color3.new(1,1,1) - end) - - dropDownTextButton.MouseButton1Click:connect(function() - dropDownTextButton.BackgroundTransparency = 1 - dropDownTextButton.TextColor3 = Color3.new(1,1,1) - if dropDownTextButton.Parent and dropDownTextButton.Parent:IsA("GuiObject") then - dropDownTextButton.Parent.Visible = false - end - selectTerrainShape(terrainShapeMap[dropDownTextButton.Text]) - end) - - return dropDownTextButton - end - - local function createTerrainDropDownMenu(zIndex) - local dropDown = Instance.new("Frame") - dropDown.Name = "TerrainDropDown" - dropDown.BackgroundColor3 = Color3.new(0,0,0) - dropDown.BorderColor3 = Color3.new(1,0,0) - dropDown.Size = UDim2.new(0,200,0,0) - dropDown.Visible = false - dropDown.ZIndex = zIndex - dropDown.Parent = setGui - - for i = 1, #terrainShapes do - local shapeButton = createTerrainTypeButton(terrainShapes[i],dropDown) - shapeButton.Position = UDim2.new(0,1,0,(i - 1) * (shapeButton.Size.Y.Offset)) - shapeButton.Parent = dropDown - dropDown.Size = UDim2.new(0,200,0,dropDown.Size.Y.Offset + (shapeButton.Size.Y.Offset)) - end - - dropDown.MouseLeave:connect(function() - dropDown.Visible = false - end) - end - - - local function createDropDownMenuButton(parent) - local dropDownButton = Instance.new("ImageButton") - dropDownButton.Name = "DropDownButton" - dropDownButton.Image = "http://www.jarfeh.xyz/asset/?id=67581509" - dropDownButton.BackgroundTransparency = 1 - dropDownButton.Size = UDim2.new(0,16,0,16) - dropDownButton.Position = UDim2.new(1,-24,0,6) - dropDownButton.ZIndex = parent.ZIndex + 2 - dropDownButton.Parent = parent - - if not setGui:FindFirstChild("TerrainDropDown") then - createTerrainDropDownMenu(8) - end - - dropDownButton.MouseButton1Click:connect(function() - setGui.TerrainDropDown.Visible = true - setGui.TerrainDropDown.Position = UDim2.new(0,parent.AbsolutePosition.X,0,parent.AbsolutePosition.Y) - currTerrainDropDownFrame = parent - end) - end - - local function buildInsertButton() - local insertButton = makeInsertAssetButton() - insertButton.Name = "InsertAssetButton" - insertButton.Visible = true - - if Data.Category[Data.CurrentCategory].SetName == "High Scalability" then - createDropDownMenuButton(insertButton) - end - - local lastEnter = nil - local mouseEnterCon = insertButton.MouseEnter:connect(function() - lastEnter = insertButton - delay(0.1,function() - if lastEnter == insertButton then - showLargePreview(insertButton) - end - end) - end) - return insertButton, mouseEnterCon - end - - local function realignButtonGrid(columns) - local x = 0 - local y = 0 - for i = 1, #insertButtons do - insertButtons[i].Position = UDim2.new(0, buttonWidth * x, 0, buttonHeight * y) - x = x + 1 - if x >= columns then - x = 0 - y = y + 1 - end - end - end - - local function setInsertButtonImageBehavior(insertFrame, visible, name, assetId) - if visible then - insertFrame.AssetName.Value = name - insertFrame.AssetId.Value = assetId - local newImageUrl = SmallThumbnailUrl .. assetId - if newImageUrl ~= insertFrame.Button.ButtonImage.Image then - delay(0,function() - game:GetService("ContentProvider"):Preload(SmallThumbnailUrl .. assetId) - insertFrame.Button.ButtonImage.Image = SmallThumbnailUrl .. assetId - end) - end - table.insert(insertButtonCons, - insertFrame.Button.MouseButton1Click:connect(function() - -- special case for water, show water selection gui - local isWaterSelected = (name == "Water") and (Data.Category[Data.CurrentCategory].SetName == "High Scalability") - waterGui.Visible = isWaterSelected - if isWaterSelected then - objectSelected(name, tonumber(assetId), nil) - else - objectSelected(name, tonumber(assetId)) - end - end) - ) - insertFrame.Visible = true - else - insertFrame.Visible = false - end - end - - local function loadSectionOfItems(setGui, rows, columns) - local pageSize = rows * columns - - if arrayPosition > #contents then return end - - local origArrayPos = arrayPosition - - local yCopy = 0 - for i = 1, pageSize + 1 do - if arrayPosition >= #contents + 1 then - break - end - - local buttonCon - insertButtons[arrayPosition], buttonCon = buildInsertButton() - table.insert(insertButtonCons,buttonCon) - insertButtons[arrayPosition].Parent = setGui.SetPanel.ItemsFrame - arrayPosition = arrayPosition + 1 - end - realignButtonGrid(columns) - - local indexCopy = origArrayPos - for index = origArrayPos, arrayPosition do - if insertButtons[index] then - if contents[index] then - - -- we don't want water to have a drop down button - if contents[index].Name == "Water" then - if Data.Category[Data.CurrentCategory].SetName == "High Scalability" then - insertButtons[index]:FindFirstChild("DropDownButton",true):Destroy() - end - end - - local assetId - if useAssetVersionId then - assetId = contents[index].AssetVersionId - else - assetId = contents[index].AssetId - end - setInsertButtonImageBehavior(insertButtons[index], true, contents[index].Name, assetId) - else - break - end - else - break - end - indexCopy = index - end - end - - local function setSetIndex() - Data.Category[Data.CurrentCategory].Index = 0 - - rows = 7 - columns = math.floor(setGui.SetPanel.ItemsFrame.AbsoluteSize.X/buttonWidth) - - contents = Data.Category[Data.CurrentCategory].Contents - if contents then - -- remove our buttons and their connections - for i = 1, #insertButtons do - insertButtons[i]:remove() - end - for i = 1, #insertButtonCons do - if insertButtonCons[i] then insertButtonCons[i]:disconnect() end - end - insertButtonCons = {} - insertButtons = {} - - arrayPosition = 1 - loadSectionOfItems(setGui, rows, columns) - end - end - - local function selectSet(button, setName, setId, setIndex) - if button and Data.Category[Data.CurrentCategory] ~= nil then - if button ~= Data.Category[Data.CurrentCategory].Button then - Data.Category[Data.CurrentCategory].Button = button - - if SetCache[setId] == nil then - SetCache[setId] = game:GetService("InsertService"):GetCollection(setId) - end - Data.Category[Data.CurrentCategory].Contents = SetCache[setId] - - Data.Category[Data.CurrentCategory].SetName = setName - Data.Category[Data.CurrentCategory].SetId = setId - end - setSetIndex() - end - end - - local function selectCategoryPage(buttons, page) - if buttons ~= Data.CurrentCategory then - if Data.CurrentCategory then - for key, button in pairs(Data.CurrentCategory) do - button.Visible = false - end - end - - Data.CurrentCategory = buttons - if Data.Category[Data.CurrentCategory] == nil then - Data.Category[Data.CurrentCategory] = {} - if #buttons > 0 then - selectSet(buttons[1], buttons[1].SetName.Value, buttons[1].SetId.Value, 0) - end - else - Data.Category[Data.CurrentCategory].Button = nil - selectSet(Data.Category[Data.CurrentCategory].ButtonFrame, Data.Category[Data.CurrentCategory].SetName, Data.Category[Data.CurrentCategory].SetId, Data.Category[Data.CurrentCategory].Index) - end - end - end - - local function selectCategory(category) - selectCategoryPage(category, 0) - end - - local function resetAllSetButtonSelection() - local setButtons = setGui.SetPanel.Sets.SetsLists:GetChildren() - for i = 1, #setButtons do - if setButtons[i]:IsA("TextButton") then - setButtons[i].Selected = false - setButtons[i].BackgroundTransparency = 1 - setButtons[i].TextColor3 = Color3.new(1,1,1) - setButtons[i].BackgroundColor3 = Color3.new(1,1,1) - end - end - end - - local function populateSetsFrame() - local currRow = 0 - for i = 1, #userCategoryButtons do - local button = userCategoryButtons[i] - button.Visible = true - button.Position = UDim2.new(0,5,0,currRow * button.Size.Y.Offset) - button.Parent = setGui.SetPanel.Sets.SetsLists - - if i == 1 then -- we will have this selected by default, so show it - button.Selected = true - button.BackgroundColor3 = Color3.new(0,204/255,0) - button.TextColor3 = Color3.new(0,0,0) - button.BackgroundTransparency = 0 - end - - button.MouseEnter:connect(function() - if not button.Selected then - button.BackgroundTransparency = 0 - button.TextColor3 = Color3.new(0,0,0) - end - end) - button.MouseLeave:connect(function() - if not button.Selected then - button.BackgroundTransparency = 1 - button.TextColor3 = Color3.new(1,1,1) - end - end) - button.MouseButton1Click:connect(function() - resetAllSetButtonSelection() - button.Selected = not button.Selected - button.BackgroundColor3 = Color3.new(0,204/255,0) - button.TextColor3 = Color3.new(0,0,0) - button.BackgroundTransparency = 0 - selectSet(button, button.Text, userCategoryButtons[i].SetId.Value, 0) - end) - - currRow = currRow + 1 - end - - local buttons = setGui.SetPanel.Sets.SetsLists:GetChildren() - - -- set first category as loaded for default - if buttons then - for i = 1, #buttons do - if buttons[i]:IsA("TextButton") then - selectSet(buttons[i], buttons[i].Text, userCategoryButtons[i].SetId.Value, 0) - selectCategory(userCategoryButtons) - break - end - end - end - end - - setGui = createSetGui() - waterGui, waterTypeChangedEvent = createWaterGui() - waterGui.Position = UDim2.new(0,55,0,0) - waterGui.Parent = setGui - setGui.Changed:connect(function(prop) -- this resizes the preview image to always be the right size - if prop == "AbsoluteSize" then - handleResize() - setSetIndex() - end - end) - - local scrollFrame, controlFrame = t.CreateTrueScrollingFrame() - scrollFrame.Size = UDim2.new(0.54,0,0.85,0) - scrollFrame.Position = UDim2.new(0.24,0,0.085,0) - scrollFrame.Name = "ItemsFrame" - scrollFrame.ZIndex = 6 - scrollFrame.Parent = setGui.SetPanel - scrollFrame.BackgroundTransparency = 1 - - drillDownSetZIndex(controlFrame,7) - - controlFrame.Parent = setGui.SetPanel - controlFrame.Position = UDim2.new(0.76, 5, 0, 0) - - local debounce = false - controlFrame.ScrollBottom.Changed:connect(function(prop) - if controlFrame.ScrollBottom.Value == true then - if debounce then return end - debounce = true - loadSectionOfItems(setGui, rows, columns) - debounce = false - end - end) - - local userData = {} - for id = 1, #userIdsForSets do - local newUserData = game:GetService("InsertService"):GetUserSets(userIdsForSets[id]) - if newUserData and #newUserData > 2 then - -- start at #3 to skip over My Decals and My Models for each account - for category = 3, #newUserData do - if newUserData[category].Name == "High Scalability" then -- we want high scalability parts to show first - table.insert(userData,1,newUserData[category]) - else - table.insert(userData, newUserData[category]) - end - end - end - - end - if userData then - userCategoryButtons = processCategory(userData) - end - - rows = math.floor(setGui.SetPanel.ItemsFrame.AbsoluteSize.Y/buttonHeight) - columns = math.floor(setGui.SetPanel.ItemsFrame.AbsoluteSize.X/buttonWidth) - - populateSetsFrame() - - insertPanelCloseCon = setGui.SetPanel.CancelButton.MouseButton1Click:connect(function() - setGui.SetPanel.Visible = false - if dialogClosed then dialogClosed() end - end) - - local setVisibilityFunction = function(visible) - if visible then - setGui.SetPanel.Visible = true - else - setGui.SetPanel.Visible = false - end - end - - local getVisibilityFunction = function() - if setGui then - if setGui:FindFirstChild("SetPanel") then - return setGui.SetPanel.Visible - end - end - - return false - end - - return setGui, setVisibilityFunction, getVisibilityFunction, waterTypeChangedEvent -end - -t.CreateTerrainMaterialSelector = function(size,position) - local terrainMaterialSelectionChanged = Instance.new("BindableEvent") - terrainMaterialSelectionChanged.Name = "TerrainMaterialSelectionChanged" - - local selectedButton = nil - - local frame = Instance.new("Frame") - frame.Name = "TerrainMaterialSelector" - if size then - frame.Size = size - else - frame.Size = UDim2.new(0, 245, 0, 230) - end - if position then - frame.Position = position - end - frame.BorderSizePixel = 0 - frame.BackgroundColor3 = Color3.new(0,0,0) - frame.Active = true - - terrainMaterialSelectionChanged.Parent = frame - - local waterEnabled = true -- todo: turn this on when water is ready - - local materialToImageMap = {} - local materialNames = {"Grass", "Sand", "Brick", "Granite", "Asphalt", "Iron", "Aluminum", "Gold", "Plank", "Log", "Gravel", "Cinder Block", "Stone Wall", "Concrete", "Plastic (red)", "Plastic (blue)"} - if waterEnabled then - table.insert(materialNames,"Water") - end - local currentMaterial = 1 - - function getEnumFromName(choice) - if choice == "Grass" then return 1 end - if choice == "Sand" then return 2 end - if choice == "Erase" then return 0 end - if choice == "Brick" then return 3 end - if choice == "Granite" then return 4 end - if choice == "Asphalt" then return 5 end - if choice == "Iron" then return 6 end - if choice == "Aluminum" then return 7 end - if choice == "Gold" then return 8 end - if choice == "Plank" then return 9 end - if choice == "Log" then return 10 end - if choice == "Gravel" then return 11 end - if choice == "Cinder Block" then return 12 end - if choice == "Stone Wall" then return 13 end - if choice == "Concrete" then return 14 end - if choice == "Plastic (red)" then return 15 end - if choice == "Plastic (blue)" then return 16 end - if choice == "Water" then return 17 end - end - - function getNameFromEnum(choice) - if choice == Enum.CellMaterial.Grass or choice == 1 then return "Grass"end - if choice == Enum.CellMaterial.Sand or choice == 2 then return "Sand" end - if choice == Enum.CellMaterial.Empty or choice == 0 then return "Erase" end - if choice == Enum.CellMaterial.Brick or choice == 3 then return "Brick" end - if choice == Enum.CellMaterial.Granite or choice == 4 then return "Granite" end - if choice == Enum.CellMaterial.Asphalt or choice == 5 then return "Asphalt" end - if choice == Enum.CellMaterial.Iron or choice == 6 then return "Iron" end - if choice == Enum.CellMaterial.Aluminum or choice == 7 then return "Aluminum" end - if choice == Enum.CellMaterial.Gold or choice == 8 then return "Gold" end - if choice == Enum.CellMaterial.WoodPlank or choice == 9 then return "Plank" end - if choice == Enum.CellMaterial.WoodLog or choice == 10 then return "Log" end - if choice == Enum.CellMaterial.Gravel or choice == 11 then return "Gravel" end - if choice == Enum.CellMaterial.CinderBlock or choice == 12 then return "Cinder Block" end - if choice == Enum.CellMaterial.MossyStone or choice == 13 then return "Stone Wall" end - if choice == Enum.CellMaterial.Cement or choice == 14 then return "Concrete" end - if choice == Enum.CellMaterial.RedPlastic or choice == 15 then return "Plastic (red)" end - if choice == Enum.CellMaterial.BluePlastic or choice == 16 then return "Plastic (blue)" end - - if waterEnabled then - if choice == Enum.CellMaterial.Water or choice == 17 then return "Water" end - end - end - - - local function updateMaterialChoice(choice) - currentMaterial = getEnumFromName(choice) - terrainMaterialSelectionChanged:Fire(currentMaterial) - end - - -- we so need a better way to do this - for i,v in pairs(materialNames) do - materialToImageMap[v] = {} - if v == "Grass" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=56563112" - elseif v == "Sand" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=62356652" - elseif v == "Brick" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=65961537" - elseif v == "Granite" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=67532153" - elseif v == "Asphalt" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=67532038" - elseif v == "Iron" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=67532093" - elseif v == "Aluminum" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=67531995" - elseif v == "Gold" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=67532118" - elseif v == "Plastic (red)" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=67531848" - elseif v == "Plastic (blue)" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=67531924" - elseif v == "Plank" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=67532015" - elseif v == "Log" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=67532051" - elseif v == "Gravel" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=67532206" - elseif v == "Cinder Block" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=67532103" - elseif v == "Stone Wall" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=67531804" - elseif v == "Concrete" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=67532059" - elseif v == "Water" then materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=81407474" - else materialToImageMap[v].Regular = "http://www.jarfeh.xyz/asset/?id=66887593" -- fill in the rest here!! - end - end - - local scrollFrame, scrollUp, scrollDown, recalculateScroll = t.CreateScrollingFrame(nil,"grid") - scrollFrame.Size = UDim2.new(0.85,0,1,0) - scrollFrame.Position = UDim2.new(0,0,0,0) - scrollFrame.Parent = frame - - scrollUp.Parent = frame - scrollUp.Visible = true - scrollUp.Position = UDim2.new(1,-19,0,0) - - scrollDown.Parent = frame - scrollDown.Visible = true - scrollDown.Position = UDim2.new(1,-19,1,-17) - - local function goToNewMaterial(buttonWrap, materialName) - updateMaterialChoice(materialName) - buttonWrap.BackgroundTransparency = 0 - selectedButton.BackgroundTransparency = 1 - selectedButton = buttonWrap - end - - local function createMaterialButton(name) - local buttonWrap = Instance.new("TextButton") - buttonWrap.Text = "" - buttonWrap.Size = UDim2.new(0,32,0,32) - buttonWrap.BackgroundColor3 = Color3.new(1,1,1) - buttonWrap.BorderSizePixel = 0 - buttonWrap.BackgroundTransparency = 1 - buttonWrap.AutoButtonColor = false - buttonWrap.Name = tostring(name) - - local imageButton = Instance.new("ImageButton") - imageButton.AutoButtonColor = false - imageButton.BackgroundTransparency = 1 - imageButton.Size = UDim2.new(0,30,0,30) - imageButton.Position = UDim2.new(0,1,0,1) - imageButton.Name = tostring(name) - imageButton.Parent = buttonWrap - imageButton.Image = materialToImageMap[name].Regular - - local enumType = Instance.new("NumberValue") - enumType.Name = "EnumType" - enumType.Parent = buttonWrap - enumType.Value = 0 - - imageButton.MouseEnter:connect(function() - buttonWrap.BackgroundTransparency = 0 - end) - imageButton.MouseLeave:connect(function() - if selectedButton ~= buttonWrap then - buttonWrap.BackgroundTransparency = 1 - end - end) - imageButton.MouseButton1Click:connect(function() - if selectedButton ~= buttonWrap then - goToNewMaterial(buttonWrap, tostring(name)) - end - end) - - return buttonWrap - end - - for i = 1, #materialNames do - local imageButton = createMaterialButton(materialNames[i]) - - if materialNames[i] == "Grass" then -- always start with grass as the default - selectedButton = imageButton - imageButton.BackgroundTransparency = 0 - end - - imageButton.Parent = scrollFrame - end - - local forceTerrainMaterialSelection = function(newMaterialType) - if not newMaterialType then return end - if currentMaterial == newMaterialType then return end - - local matName = getNameFromEnum(newMaterialType) - local buttons = scrollFrame:GetChildren() - for i = 1, #buttons do - if buttons[i].Name == "Plastic (blue)" and matName == "Plastic (blue)" then goToNewMaterial(buttons[i],matName) return end - if buttons[i].Name == "Plastic (red)" and matName == "Plastic (red)" then goToNewMaterial(buttons[i],matName) return end - if string.find(buttons[i].Name, matName) then - goToNewMaterial(buttons[i],matName) - return - end - end - end - - frame.Changed:connect(function ( prop ) - if prop == "AbsoluteSize" then - recalculateScroll() - end - end) - - recalculateScroll() - return frame, terrainMaterialSelectionChanged, forceTerrainMaterialSelection -end - -t.CreateLoadingFrame = function(name,size,position) - game:GetService("ContentProvider"):Preload("http://www.jarfeh.xyz/asset/?id=35238053") - - local loadingFrame = Instance.new("Frame") - loadingFrame.Name = "LoadingFrame" - loadingFrame.Style = Enum.FrameStyle.RobloxRound - - if size then loadingFrame.Size = size - else loadingFrame.Size = UDim2.new(0,300,0,160) end - if position then loadingFrame.Position = position - else loadingFrame.Position = UDim2.new(0.5, -150, 0.5,-80) end - - local loadingBar = Instance.new("Frame") - loadingBar.Name = "LoadingBar" - loadingBar.BackgroundColor3 = Color3.new(0,0,0) - loadingBar.BorderColor3 = Color3.new(79/255,79/255,79/255) - loadingBar.Position = UDim2.new(0,0,0,41) - loadingBar.Size = UDim2.new(1,0,0,30) - loadingBar.Parent = loadingFrame - - local loadingGreenBar = Instance.new("ImageLabel") - loadingGreenBar.Name = "LoadingGreenBar" - loadingGreenBar.Image = "http://www.jarfeh.xyz/asset/?id=35238053" - loadingGreenBar.Position = UDim2.new(0,0,0,0) - loadingGreenBar.Size = UDim2.new(0,0,1,0) - loadingGreenBar.Visible = false - loadingGreenBar.Parent = loadingBar - - local loadingPercent = Instance.new("TextLabel") - loadingPercent.Name = "LoadingPercent" - loadingPercent.BackgroundTransparency = 1 - loadingPercent.Position = UDim2.new(0,0,1,0) - loadingPercent.Size = UDim2.new(1,0,0,14) - loadingPercent.Font = Enum.Font.Arial - loadingPercent.Text = "0%" - loadingPercent.FontSize = Enum.FontSize.Size14 - loadingPercent.TextColor3 = Color3.new(1,1,1) - loadingPercent.Parent = loadingBar - - local cancelButton = Instance.new("TextButton") - cancelButton.Name = "CancelButton" - cancelButton.Position = UDim2.new(0.5,-60,1,-40) - cancelButton.Size = UDim2.new(0,120,0,40) - cancelButton.Font = Enum.Font.Arial - cancelButton.FontSize = Enum.FontSize.Size18 - cancelButton.TextColor3 = Color3.new(1,1,1) - cancelButton.Text = "Cancel" - cancelButton.Style = Enum.ButtonStyle.RobloxButton - cancelButton.Parent = loadingFrame - - local loadingName = Instance.new("TextLabel") - loadingName.Name = "loadingName" - loadingName.BackgroundTransparency = 1 - loadingName.Size = UDim2.new(1,0,0,18) - loadingName.Position = UDim2.new(0,0,0,2) - loadingName.Font = Enum.Font.Arial - loadingName.Text = name - loadingName.TextColor3 = Color3.new(1,1,1) - loadingName.TextStrokeTransparency = 1 - loadingName.FontSize = Enum.FontSize.Size18 - loadingName.Parent = loadingFrame - - local cancelButtonClicked = Instance.new("BindableEvent") - cancelButtonClicked.Name = "CancelButtonClicked" - cancelButtonClicked.Parent = cancelButton - cancelButton.MouseButton1Click:connect(function() - cancelButtonClicked:Fire() - end) - - local updateLoadingGuiPercent = function(percent, tweenAction, tweenLength) - if percent and type(percent) ~= "number" then - error("updateLoadingGuiPercent expects number as argument, got",type(percent),"instead") - end - - local newSize = nil - if percent < 0 then - newSize = UDim2.new(0,0,1,0) - elseif percent > 1 then - newSize = UDim2.new(1,0,1,0) - else - newSize = UDim2.new(percent,0,1,0) - end - - if tweenAction then - if not tweenLength then - error("updateLoadingGuiPercent is set to tween new percentage, but got no tween time length! Please pass this in as third argument") - end - - if (newSize.X.Scale > 0) then - loadingGreenBar.Visible = true - loadingGreenBar:TweenSize( newSize, - Enum.EasingDirection.Out, - Enum.EasingStyle.Quad, - tweenLength, - true) - else - loadingGreenBar:TweenSize( newSize, - Enum.EasingDirection.Out, - Enum.EasingStyle.Quad, - tweenLength, - true, - function() - if (newSize.X.Scale < 0) then - loadingGreenBar.Visible = false - end - end) - end - - else - loadingGreenBar.Size = newSize - loadingGreenBar.Visible = (newSize.X.Scale > 0) - end - end - - loadingGreenBar.Changed:connect(function(prop) - if prop == "Size" then - loadingPercent.Text = tostring( math.ceil(loadingGreenBar.Size.X.Scale * 100) ) .. "%" - end - end) - - return loadingFrame, updateLoadingGuiPercent, cancelButtonClicked -end - -t.CreatePluginFrame = function (name,size,position,scrollable,parent) - function createMenuButton(size,position,text,fontsize,name,parent) - local button = Instance.new("TextButton",parent) - button.AutoButtonColor = false - button.Name = name - button.BackgroundTransparency = 1 - button.Position = position - button.Size = size - button.Font = Enum.Font.ArialBold - button.FontSize = fontsize - button.Text = text - button.TextColor3 = Color3.new(1,1,1) - button.BorderSizePixel = 0 - button.BackgroundColor3 = Color3.new(20/255,20/255,20/255) - - button.MouseEnter:connect(function ( ) - if button.Selected then return end - button.BackgroundTransparency = 0 - end) - button.MouseLeave:connect(function ( ) - if button.Selected then return end - button.BackgroundTransparency = 1 - end) - - return button - - end - - local dragBar = Instance.new("Frame",parent) - dragBar.Name = tostring(name) .. "DragBar" - dragBar.BackgroundColor3 = Color3.new(39/255,39/255,39/255) - dragBar.BorderColor3 = Color3.new(0,0,0) - if size then - dragBar.Size = UDim2.new(size.X.Scale,size.X.Offset,0,20) + UDim2.new(0,20,0,0) - else - dragBar.Size = UDim2.new(0,183,0,20) - end - if position then - dragBar.Position = position - end - dragBar.Active = true - dragBar.Draggable = true - --dragBar.Visible = false - dragBar.MouseEnter:connect(function ( ) - dragBar.BackgroundColor3 = Color3.new(49/255,49/255,49/255) - end) - dragBar.MouseLeave:connect(function ( ) - dragBar.BackgroundColor3 = Color3.new(39/255,39/255,39/255) - end) - - -- plugin name label - local pluginNameLabel = Instance.new("TextLabel",dragBar) - pluginNameLabel.Name = "BarNameLabel" - pluginNameLabel.Text = " " .. tostring(name) - pluginNameLabel.TextColor3 = Color3.new(1,1,1) - pluginNameLabel.TextStrokeTransparency = 0 - pluginNameLabel.Size = UDim2.new(1,0,1,0) - pluginNameLabel.Font = Enum.Font.ArialBold - pluginNameLabel.FontSize = Enum.FontSize.Size18 - pluginNameLabel.TextXAlignment = Enum.TextXAlignment.Left - pluginNameLabel.BackgroundTransparency = 1 - - -- close button - local closeButton = createMenuButton(UDim2.new(0,15,0,17),UDim2.new(1,-16,0.5,-8),"X",Enum.FontSize.Size14,"CloseButton",dragBar) - local closeEvent = Instance.new("BindableEvent") - closeEvent.Name = "CloseEvent" - closeEvent.Parent = closeButton - closeButton.MouseButton1Click:connect(function () - closeEvent:Fire() - closeButton.BackgroundTransparency = 1 - end) - - -- help button - local helpButton = createMenuButton(UDim2.new(0,15,0,17),UDim2.new(1,-51,0.5,-8),"?",Enum.FontSize.Size14,"HelpButton",dragBar) - local helpFrame = Instance.new("Frame",dragBar) - helpFrame.Name = "HelpFrame" - helpFrame.BackgroundColor3 = Color3.new(0,0,0) - helpFrame.Size = UDim2.new(0,300,0,552) - helpFrame.Position = UDim2.new(1,5,0,0) - helpFrame.Active = true - helpFrame.BorderSizePixel = 0 - helpFrame.Visible = false - - helpButton.MouseButton1Click:connect(function( ) - helpFrame.Visible = not helpFrame.Visible - if helpFrame.Visible then - helpButton.Selected = true - helpButton.BackgroundTransparency = 0 - local screenGui = getScreenGuiAncestor(helpFrame) - if screenGui then - if helpFrame.AbsolutePosition.X + helpFrame.AbsoluteSize.X > screenGui.AbsoluteSize.X then --position on left hand side - helpFrame.Position = UDim2.new(0,-5 - helpFrame.AbsoluteSize.X,0,0) - else -- position on right hand side - helpFrame.Position = UDim2.new(1,5,0,0) - end - else - helpFrame.Position = UDim2.new(1,5,0,0) - end - else - helpButton.Selected = false - helpButton.BackgroundTransparency = 1 - end - end) - - local minimizeButton = createMenuButton(UDim2.new(0,16,0,17),UDim2.new(1,-34,0.5,-8),"-",Enum.FontSize.Size14,"MinimizeButton",dragBar) - minimizeButton.TextYAlignment = Enum.TextYAlignment.Top - - local minimizeFrame = Instance.new("Frame",dragBar) - minimizeFrame.Name = "MinimizeFrame" - minimizeFrame.BackgroundColor3 = Color3.new(73/255,73/255,73/255) - minimizeFrame.BorderColor3 = Color3.new(0,0,0) - minimizeFrame.Position = UDim2.new(0,0,1,0) - if size then - minimizeFrame.Size = UDim2.new(size.X.Scale,size.X.Offset,0,50) + UDim2.new(0,20,0,0) - else - minimizeFrame.Size = UDim2.new(0,183,0,50) - end - minimizeFrame.Visible = false - - local minimizeBigButton = Instance.new("TextButton",minimizeFrame) - minimizeBigButton.Position = UDim2.new(0.5,-50,0.5,-20) - minimizeBigButton.Name = "MinimizeButton" - minimizeBigButton.Size = UDim2.new(0,100,0,40) - minimizeBigButton.Style = Enum.ButtonStyle.RobloxButton - minimizeBigButton.Font = Enum.Font.ArialBold - minimizeBigButton.FontSize = Enum.FontSize.Size18 - minimizeBigButton.TextColor3 = Color3.new(1,1,1) - minimizeBigButton.Text = "Show" - - local separatingLine = Instance.new("Frame",dragBar) - separatingLine.Name = "SeparatingLine" - separatingLine.BackgroundColor3 = Color3.new(115/255,115/255,115/255) - separatingLine.BorderSizePixel = 0 - separatingLine.Position = UDim2.new(1,-18,0.5,-7) - separatingLine.Size = UDim2.new(0,1,0,14) - - local otherSeparatingLine = separatingLine:clone() - otherSeparatingLine.Position = UDim2.new(1,-35,0.5,-7) - otherSeparatingLine.Parent = dragBar - - local widgetContainer = Instance.new("Frame",dragBar) - widgetContainer.Name = "WidgetContainer" - widgetContainer.BackgroundTransparency = 1 - widgetContainer.Position = UDim2.new(0,0,1,0) - widgetContainer.BorderColor3 = Color3.new(0,0,0) - if not scrollable then - widgetContainer.BackgroundTransparency = 0 - widgetContainer.BackgroundColor3 = Color3.new(72/255,72/255,72/255) - end - - if size then - if scrollable then - widgetContainer.Size = size - else - widgetContainer.Size = UDim2.new(0,dragBar.AbsoluteSize.X,size.Y.Scale,size.Y.Offset) - end - else - if scrollable then - widgetContainer.Size = UDim2.new(0,163,0,400) - else - widgetContainer.Size = UDim2.new(0,dragBar.AbsoluteSize.X,0,400) - end - end - if position then - widgetContainer.Position = position + UDim2.new(0,0,0,20) - end - - local frame,control,verticalDragger = nil - if scrollable then - --frame for widgets - frame,control = t.CreateTrueScrollingFrame() - frame.Size = UDim2.new(1, 0, 1, 0) - frame.BackgroundColor3 = Color3.new(72/255,72/255,72/255) - frame.BorderColor3 = Color3.new(0,0,0) - frame.Active = true - frame.Parent = widgetContainer - control.Parent = dragBar - control.BackgroundColor3 = Color3.new(72/255,72/255,72/255) - control.BorderSizePixel = 0 - control.BackgroundTransparency = 0 - control.Position = UDim2.new(1,-21,1,1) - if size then - control.Size = UDim2.new(0,21,size.Y.Scale,size.Y.Offset) - else - control.Size = UDim2.new(0,21,0,400) - end - control:FindFirstChild("ScrollDownButton").Position = UDim2.new(0,0,1,-20) - - local fakeLine = Instance.new("Frame",control) - fakeLine.Name = "FakeLine" - fakeLine.BorderSizePixel = 0 - fakeLine.BackgroundColor3 = Color3.new(0,0,0) - fakeLine.Size = UDim2.new(0,1,1,1) - fakeLine.Position = UDim2.new(1,0,0,0) - - verticalDragger = Instance.new("TextButton",widgetContainer) - verticalDragger.ZIndex = 2 - verticalDragger.AutoButtonColor = false - verticalDragger.Name = "VerticalDragger" - verticalDragger.BackgroundColor3 = Color3.new(50/255,50/255,50/255) - verticalDragger.BorderColor3 = Color3.new(0,0,0) - verticalDragger.Size = UDim2.new(1,20,0,20) - verticalDragger.Position = UDim2.new(0,0,1,0) - verticalDragger.Active = true - verticalDragger.Text = "" - - local scrubFrame = Instance.new("Frame",verticalDragger) - scrubFrame.Name = "ScrubFrame" - scrubFrame.BackgroundColor3 = Color3.new(1,1,1) - scrubFrame.BorderSizePixel = 0 - scrubFrame.Position = UDim2.new(0.5,-5,0.5,0) - scrubFrame.Size = UDim2.new(0,10,0,1) - scrubFrame.ZIndex = 5 - local scrubTwo = scrubFrame:clone() - scrubTwo.Position = UDim2.new(0.5,-5,0.5,-2) - scrubTwo.Parent = verticalDragger - local scrubThree = scrubFrame:clone() - scrubThree.Position = UDim2.new(0.5,-5,0.5,2) - scrubThree.Parent = verticalDragger - - local areaSoak = Instance.new("TextButton",getScreenGuiAncestor(parent)) - areaSoak.Name = "AreaSoak" - areaSoak.Size = UDim2.new(1,0,1,0) - areaSoak.BackgroundTransparency = 1 - areaSoak.BorderSizePixel = 0 - areaSoak.Text = "" - areaSoak.ZIndex = 10 - areaSoak.Visible = false - areaSoak.Active = true - - local draggingVertical = false - local startYPos = nil - verticalDragger.MouseEnter:connect(function () - verticalDragger.BackgroundColor3 = Color3.new(60/255,60/255,60/255) - end) - verticalDragger.MouseLeave:connect(function () - verticalDragger.BackgroundColor3 = Color3.new(50/255,50/255,50/255) - end) - verticalDragger.MouseButton1Down:connect(function(x,y) - draggingVertical = true - areaSoak.Visible = true - startYPos = y - end) - areaSoak.MouseButton1Up:connect(function ( ) - draggingVertical = false - areaSoak.Visible = false - end) - areaSoak.MouseMoved:connect(function(x,y) - if not draggingVertical then return end - - local yDelta = y - startYPos - if not control.ScrollDownButton.Visible and yDelta > 0 then - return - end - - if (widgetContainer.Size.Y.Offset + yDelta) < 150 then - widgetContainer.Size = UDim2.new(widgetContainer.Size.X.Scale, widgetContainer.Size.X.Offset,widgetContainer.Size.Y.Scale,150) - control.Size = UDim2.new (0,21,0,150) - return - end - - startYPos = y - - if widgetContainer.Size.Y.Offset + yDelta >= 0 then - widgetContainer.Size = UDim2.new(widgetContainer.Size.X.Scale, widgetContainer.Size.X.Offset,widgetContainer.Size.Y.Scale,widgetContainer.Size.Y.Offset + yDelta) - control.Size = UDim2.new(0,21,0,control.Size.Y.Offset + yDelta ) - end - end) - end - - local function switchMinimize() - minimizeFrame.Visible = not minimizeFrame.Visible - if scrollable then - frame.Visible = not frame.Visible - verticalDragger.Visible = not verticalDragger.Visible - control.Visible = not control.Visible - else - widgetContainer.Visible = not widgetContainer.Visible - end - - if minimizeFrame.Visible then - minimizeButton.Text = "+" - else - minimizeButton.Text = "-" - end - end - - minimizeBigButton.MouseButton1Click:connect(function ( ) - switchMinimize() - end) - - minimizeButton.MouseButton1Click:connect(function( ) - switchMinimize() - end) - - if scrollable then - return dragBar, frame, helpFrame, closeEvent - else - return dragBar, widgetContainer, helpFrame, closeEvent - end -end - -t.Help = - function(funcNameOrFunc) - --input argument can be a string or a function. Should return a description (of arguments and expected side effects) - if funcNameOrFunc == "CreatePropertyDropDownMenu" or funcNameOrFunc == t.CreatePropertyDropDownMenu then - return "Function CreatePropertyDropDownMenu. " .. - "Arguments: (instance, propertyName, enumType). " .. - "Side effect: returns a container with a drop-down-box that is linked to the 'property' field of 'instance' which is of type 'enumType'" - end - if funcNameOrFunc == "CreateDropDownMenu" or funcNameOrFunc == t.CreateDropDownMenu then - return "Function CreateDropDownMenu. " .. - "Arguments: (items, onItemSelected). " .. - "Side effect: Returns 2 results, a container to the gui object and a 'updateSelection' function for external updating. The container is a drop-down-box created around a list of items" - end - if funcNameOrFunc == "CreateMessageDialog" or funcNameOrFunc == t.CreateMessageDialog then - return "Function CreateMessageDialog. " .. - "Arguments: (title, message, buttons). " .. - "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button" - end - if funcNameOrFunc == "CreateStyledMessageDialog" or funcNameOrFunc == t.CreateStyledMessageDialog then - return "Function CreateStyledMessageDialog. " .. - "Arguments: (title, message, style, buttons). " .. - "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button, 'style' is a string, either Error, Notify or Confirm" - end - if funcNameOrFunc == "GetFontHeight" or funcNameOrFunc == t.GetFontHeight then - return "Function GetFontHeight. " .. - "Arguments: (font, fontSize). " .. - "Side effect: returns the size in pixels of the given font + fontSize" - end - if funcNameOrFunc == "LayoutGuiObjects" or funcNameOrFunc == t.LayoutGuiObjects then - - end - if funcNameOrFunc == "CreateScrollingFrame" or funcNameOrFunc == t.CreateScrollingFrame then - return "Function CreateScrollingFrame. " .. - "Arguments: (orderList, style) " .. - "Side effect: returns 4 objects, (scrollFrame, scrollUpButton, scrollDownButton, recalculateFunction). 'scrollFrame' can be filled with GuiObjects. It will lay them out and allow scrollUpButton/scrollDownButton to interact with them. Orderlist is optional (and specifies the order to layout the children. Without orderlist, it uses the children order. style is also optional, and allows for a 'grid' styling if style is passed 'grid' as a string. recalculateFunction can be called when a relayout is needed (when orderList changes)" - end - if funcNameOrFunc == "CreateTrueScrollingFrame" or funcNameOrFunc == t.CreateTrueScrollingFrame then - return "Function CreateTrueScrollingFrame. " .. - "Arguments: (nil) " .. - "Side effect: returns 2 objects, (scrollFrame, controlFrame). 'scrollFrame' can be filled with GuiObjects, and they will be clipped if not inside the frame's bounds. controlFrame has children scrollup and scrolldown, as well as a slider. controlFrame can be parented to any guiobject and it will readjust itself to fit." - end - if funcNameOrFunc == "AutoTruncateTextObject" or funcNameOrFunc == t.AutoTruncateTextObject then - return "Function AutoTruncateTextObject. " .. - "Arguments: (textLabel) " .. - "Side effect: returns 2 objects, (textLabel, changeText). The 'textLabel' input is modified to automatically truncate text (with ellipsis), if it gets too small to fit. 'changeText' is a function that can be used to change the text, it takes 1 string as an argument" - end - if funcNameOrFunc == "CreateSlider" or funcNameOrFunc == t.CreateSlider then - return "Function CreateSlider. " .. - "Arguments: (steps, width, position) " .. - "Side effect: returns 2 objects, (sliderGui, sliderPosition). The 'steps' argument specifies how many different positions the slider can hold along the bar. 'width' specifies in pixels how wide the bar should be (modifiable afterwards if desired). 'position' argument should be a UDim2 for slider positioning. 'sliderPosition' is an IntValue whose current .Value specifies the specific step the slider is currently on." - end - if funcNameOrFunc == "CreateLoadingFrame" or funcNameOrFunc == t.CreateLoadingFrame then - return "Function CreateLoadingFrame. " .. - "Arguments: (name, size, position) " .. - "Side effect: Creates a gui that can be manipulated to show progress for a particular action. Name appears above the loading bar, and size and position are udim2 values (both size and position are optional arguments). Returns 3 arguments, the first being the gui created. The second being updateLoadingGuiPercent, which is a bindable function. This function takes one argument (two optionally), which should be a number between 0 and 1, representing the percentage the loading gui should be at. The second argument to this function is a boolean value that if set to true will tween the current percentage value to the new percentage value, therefore our third argument is how long this tween should take. Our third returned argument is a BindableEvent, that when fired means that someone clicked the cancel button on the dialog." - end - if funcNameOrFunc == "CreateTerrainMaterialSelector" or funcNameOrFunc == t.CreateTerrainMaterialSelector then - return "Function CreateTerrainMaterialSelector. " .. - "Arguments: (size, position) " .. - "Side effect: Size and position are UDim2 values that specifies the selector's size and position. Both size and position are optional arguments. This method returns 3 objects (terrainSelectorGui, terrainSelected, forceTerrainSelection). terrainSelectorGui is just the gui object that we generate with this function, parent it as you like. TerrainSelected is a BindableEvent that is fired whenever a new terrain type is selected in the gui. ForceTerrainSelection is a function that takes an argument of Enum.CellMaterial and will force the gui to show that material as currently selected." - end - end - -return t \ No newline at end of file diff --git a/maintenance/asset/18 b/maintenance/asset/18 deleted file mode 100644 index 65f2fc1..0000000 --- a/maintenance/asset/18 +++ /dev/null @@ -1,24 +0,0 @@ -%18% -local t = {} - -t.Foo = - function() - print("foo") - end - -t.Bar = - function() - print("bar") - end - -t.Help = - function(funcNameOrFunc) - --input argument can be a string or a function. Should return a description (of arguments and expected side effects) - if funcNameOrFunc == "Foo" or funcNameOrFunc == t.Foo then - return "Function Foo. Arguments: None. Side effect: prints foo" - elseif funcNameOrFunc == "Bar" or funcNameOrFunc == t.Bar then - return "Function Bar. Arguments: None. Side effect: prints bar" - end - end - -return t \ No newline at end of file diff --git a/maintenance/asset/18881789 b/maintenance/asset/18881789 deleted file mode 100644 index 32c056b..0000000 --- a/maintenance/asset/18881789 +++ /dev/null @@ -1 +0,0 @@ -NameMy ModelsCategoryId-151054312DescriptionA set of my models.AssetSetId-151054312CreatorNameusabilityman2ImageAssetId0SetTypeprivate
NameMy DecalsCategoryId-151054311DescriptionA set of my decals.AssetSetId-151054311CreatorNameusabilityman2ImageAssetId21002577SetTypeprivate
NameHolidayCategoryId438059DescriptionAssetSetId438059CreatorNameusabilityman2ImageAssetId63933257SetTypeuser
NameConfigurable PartsCategoryId433570DescriptionAssetSetId433570CreatorNameusabilityman2ImageAssetId63588504SetTypeuser
NameWiringCategoryId400993DescriptionAssetSetId400993CreatorNameusabilityman2ImageAssetId60793478SetTypeuser
\ No newline at end of file diff --git a/maintenance/asset/18881808 b/maintenance/asset/18881808 deleted file mode 100644 index 2f429ed..0000000 --- a/maintenance/asset/18881808 +++ /dev/null @@ -1 +0,0 @@ -NameMy ModelsCategoryId-151054464DescriptionA set of my models.AssetSetId-151054464CreatorNameusabilityman3ImageAssetId0SetTypeprivate
NameMy DecalsCategoryId-151054463DescriptionA set of my decals.AssetSetId-151054463CreatorNameusabilityman3ImageAssetId21002577SetTypeprivate
\ No newline at end of file diff --git a/maintenance/asset/19 b/maintenance/asset/19 deleted file mode 100644 index c067f8e..0000000 --- a/maintenance/asset/19 +++ /dev/null @@ -1,1116 +0,0 @@ -%19% -local t = {} - - - ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------JSON Functions Begin---------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- - - --JSON Encoder and Parser for Lua 5.1 - -- - --Copyright 2007 Shaun Brown (http://www.chipmunkav.com) - --All Rights Reserved. - - --Permission is hereby granted, free of charge, to any person - --obtaining a copy of this software to deal in the Software without - --restriction, including without limitation the rights to use, - --copy, modify, merge, publish, distribute, sublicense, and/or - --sell copies of the Software, and to permit persons to whom the - --Software is furnished to do so, subject to the following conditions: - - --The above copyright notice and this permission notice shall be - --included in all copies or substantial portions of the Software. - --If you find this software useful please give www.chipmunkav.com a mention. - - --THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - --EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - --OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - --IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - --ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - --CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - --CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -local string = string -local math = math -local table = table -local error = error -local tonumber = tonumber -local tostring = tostring -local type = type -local setmetatable = setmetatable -local pairs = pairs -local ipairs = ipairs -local assert = assert -local Chipmunk = Chipmunk - - -local StringBuilder = { - buffer = {} -} - -function StringBuilder:New() - local o = {} - setmetatable(o, self) - self.__index = self - o.buffer = {} - return o -end - -function StringBuilder:Append(s) - self.buffer[#self.buffer+1] = s -end - -function StringBuilder:ToString() - return table.concat(self.buffer) -end - -local JsonWriter = { - backslashes = { - ['\b'] = "\\b", - ['\t'] = "\\t", - ['\n'] = "\\n", - ['\f'] = "\\f", - ['\r'] = "\\r", - ['"'] = "\\\"", - ['\\'] = "\\\\", - ['/'] = "\\/" - } -} - -function JsonWriter:New() - local o = {} - o.writer = StringBuilder:New() - setmetatable(o, self) - self.__index = self - return o -end - -function JsonWriter:Append(s) - self.writer:Append(s) -end - -function JsonWriter:ToString() - return self.writer:ToString() -end - -function JsonWriter:Write(o) - local t = type(o) - if t == "nil" then - self:WriteNil() - elseif t == "boolean" then - self:WriteString(o) - elseif t == "number" then - self:WriteString(o) - elseif t == "string" then - self:ParseString(o) - elseif t == "table" then - self:WriteTable(o) - elseif t == "function" then - self:WriteFunction(o) - elseif t == "thread" then - self:WriteError(o) - elseif t == "userdata" then - self:WriteError(o) - end -end - -function JsonWriter:WriteNil() - self:Append("null") -end - -function JsonWriter:WriteString(o) - self:Append(tostring(o)) -end - -function JsonWriter:ParseString(s) - self:Append('"') - self:Append(string.gsub(s, "[%z%c\\\"/]", function(n) - local c = self.backslashes[n] - if c then return c end - return string.format("\\u%.4X", string.byte(n)) - end)) - self:Append('"') -end - -function JsonWriter:IsArray(t) - local count = 0 - local isindex = function(k) - if type(k) == "number" and k > 0 then - if math.floor(k) == k then - return true - end - end - return false - end - for k,v in pairs(t) do - if not isindex(k) then - return false, '{', '}' - else - count = math.max(count, k) - end - end - return true, '[', ']', count -end - -function JsonWriter:WriteTable(t) - local ba, st, et, n = self:IsArray(t) - self:Append(st) - if ba then - for i = 1, n do - self:Write(t[i]) - if i < n then - self:Append(',') - end - end - else - local first = true; - for k, v in pairs(t) do - if not first then - self:Append(',') - end - first = false; - self:ParseString(k) - self:Append(':') - self:Write(v) - end - end - self:Append(et) -end - -function JsonWriter:WriteError(o) - error(string.format( - "Encoding of %s unsupported", - tostring(o))) -end - -function JsonWriter:WriteFunction(o) - if o == Null then - self:WriteNil() - else - self:WriteError(o) - end -end - -local StringReader = { - s = "", - i = 0 -} - -function StringReader:New(s) - local o = {} - setmetatable(o, self) - self.__index = self - o.s = s or o.s - return o -end - -function StringReader:Peek() - local i = self.i + 1 - if i <= #self.s then - return string.sub(self.s, i, i) - end - return nil -end - -function StringReader:Next() - self.i = self.i+1 - if self.i <= #self.s then - return string.sub(self.s, self.i, self.i) - end - return nil -end - -function StringReader:All() - return self.s -end - -local JsonReader = { - escapes = { - ['t'] = '\t', - ['n'] = '\n', - ['f'] = '\f', - ['r'] = '\r', - ['b'] = '\b', - } -} - -function JsonReader:New(s) - local o = {} - o.reader = StringReader:New(s) - setmetatable(o, self) - self.__index = self - return o; -end - -function JsonReader:Read() - self:SkipWhiteSpace() - local peek = self:Peek() - if peek == nil then - error(string.format( - "Nil string: '%s'", - self:All())) - elseif peek == '{' then - return self:ReadObject() - elseif peek == '[' then - return self:ReadArray() - elseif peek == '"' then - return self:ReadString() - elseif string.find(peek, "[%+%-%d]") then - return self:ReadNumber() - elseif peek == 't' then - return self:ReadTrue() - elseif peek == 'f' then - return self:ReadFalse() - elseif peek == 'n' then - return self:ReadNull() - elseif peek == '/' then - self:ReadComment() - return self:Read() - else - return nil - end -end - -function JsonReader:ReadTrue() - self:TestReservedWord{'t','r','u','e'} - return true -end - -function JsonReader:ReadFalse() - self:TestReservedWord{'f','a','l','s','e'} - return false -end - -function JsonReader:ReadNull() - self:TestReservedWord{'n','u','l','l'} - return nil -end - -function JsonReader:TestReservedWord(t) - for i, v in ipairs(t) do - if self:Next() ~= v then - error(string.format( - "Error reading '%s': %s", - table.concat(t), - self:All())) - end - end -end - -function JsonReader:ReadNumber() - local result = self:Next() - local peek = self:Peek() - while peek ~= nil and string.find( - peek, - "[%+%-%d%.eE]") do - result = result .. self:Next() - peek = self:Peek() - end - result = tonumber(result) - if result == nil then - error(string.format( - "Invalid number: '%s'", - result)) - else - return result - end -end - -function JsonReader:ReadString() - local result = "" - assert(self:Next() == '"') - while self:Peek() ~= '"' do - local ch = self:Next() - if ch == '\\' then - ch = self:Next() - if self.escapes[ch] then - ch = self.escapes[ch] - end - end - result = result .. ch - end - assert(self:Next() == '"') - local fromunicode = function(m) - return string.char(tonumber(m, 16)) - end - return string.gsub( - result, - "u%x%x(%x%x)", - fromunicode) -end - -function JsonReader:ReadComment() - assert(self:Next() == '/') - local second = self:Next() - if second == '/' then - self:ReadSingleLineComment() - elseif second == '*' then - self:ReadBlockComment() - else - error(string.format( - "Invalid comment: %s", - self:All())) - end -end - -function JsonReader:ReadBlockComment() - local done = false - while not done do - local ch = self:Next() - if ch == '*' and self:Peek() == '/' then - done = true - end - if not done and - ch == '/' and - self:Peek() == "*" then - error(string.format( - "Invalid comment: %s, '/*' illegal.", - self:All())) - end - end - self:Next() -end - -function JsonReader:ReadSingleLineComment() - local ch = self:Next() - while ch ~= '\r' and ch ~= '\n' do - ch = self:Next() - end -end - -function JsonReader:ReadArray() - local result = {} - assert(self:Next() == '[') - local done = false - if self:Peek() == ']' then - done = true; - end - while not done do - local item = self:Read() - result[#result+1] = item - self:SkipWhiteSpace() - if self:Peek() == ']' then - done = true - end - if not done then - local ch = self:Next() - if ch ~= ',' then - error(string.format( - "Invalid array: '%s' due to: '%s'", - self:All(), ch)) - end - end - end - assert(']' == self:Next()) - return result -end - -function JsonReader:ReadObject() - local result = {} - assert(self:Next() == '{') - local done = false - if self:Peek() == '}' then - done = true - end - while not done do - local key = self:Read() - if type(key) ~= "string" then - error(string.format( - "Invalid non-string object key: %s", - key)) - end - self:SkipWhiteSpace() - local ch = self:Next() - if ch ~= ':' then - error(string.format( - "Invalid object: '%s' due to: '%s'", - self:All(), - ch)) - end - self:SkipWhiteSpace() - local val = self:Read() - result[key] = val - self:SkipWhiteSpace() - if self:Peek() == '}' then - done = true - end - if not done then - ch = self:Next() - if ch ~= ',' then - error(string.format( - "Invalid array: '%s' near: '%s'", - self:All(), - ch)) - end - end - end - assert(self:Next() == "}") - return result -end - -function JsonReader:SkipWhiteSpace() - local p = self:Peek() - while p ~= nil and string.find(p, "[%s/]") do - if p == '/' then - self:ReadComment() - else - self:Next() - end - p = self:Peek() - end -end - -function JsonReader:Peek() - return self.reader:Peek() -end - -function JsonReader:Next() - return self.reader:Next() -end - -function JsonReader:All() - return self.reader:All() -end - -function Encode(o) - local writer = JsonWriter:New() - writer:Write(o) - return writer:ToString() -end - -function Decode(s) - local reader = JsonReader:New(s) - return reader:Read() -end - -function Null() - return Null -end --------------------- End JSON Parser ------------------------ - - -t.DecodeJSON = function(jsonString) - if type(jsonString) == "string" then - return Decode(jsonString) - end - print("RbxUtil.DecodeJSON expects string argument!") - return nil -end - -t.EncodeJSON = function(jsonTable) - return Encode(jsonTable) -end - - - - - - - - ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------Terrain Utilities Begin----------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ---makes a wedge at location x, y, z ---sets cell x, y, z to default material if parameter is provided, if not sets cell x, y, z to be whatever material it previously w ---returns true if made a wedge, false if the cell remains a block -t.MakeWedge = function(x, y, z, defaultmaterial) - return game:GetService("Terrain"):AutoWedgeCell(x,y,z) -end - -t.SelectTerrainRegion = function(regionToSelect, color, selectEmptyCells, selectionParent) - local terrain = game.Workspace:FindFirstChild("Terrain") - if not terrain then return end - - assert(regionToSelect) - assert(color) - - if not type(regionToSelect) == "Region3" then - error("regionToSelect (first arg), should be of type Region3, but is type",type(regionToSelect)) - end - if not type(color) == "BrickColor" then - error("color (second arg), should be of type BrickColor, but is type",type(color)) - end - - -- frequently used terrain calls (speeds up call, no lookup necessary) - local GetCell = terrain.GetCell - local WorldToCellPreferSolid = terrain.WorldToCellPreferSolid - local CellCenterToWorld = terrain.CellCenterToWorld - local emptyMaterial = Enum.CellMaterial.Empty - - -- container for all adornments, passed back to user - local selectionContainer = Instance.new("Model") - selectionContainer.Name = "SelectionContainer" - selectionContainer.Archivable = false - if selectionParent then - selectionContainer.Parent = selectionParent - else - selectionContainer.Parent = game.Workspace - end - - local updateSelection = nil -- function we return to allow user to update selection - local currentKeepAliveTag = nil -- a tag that determines whether adorns should be destroyed - local aliveCounter = 0 -- helper for currentKeepAliveTag - local lastRegion = nil -- used to stop updates that do nothing - local adornments = {} -- contains all adornments - local reusableAdorns = {} - - local selectionPart = Instance.new("Part") - selectionPart.Name = "SelectionPart" - selectionPart.Transparency = 1 - selectionPart.Anchored = true - selectionPart.Locked = true - selectionPart.CanCollide = false - selectionPart.FormFactor = Enum.FormFactor.Custom - selectionPart.Size = Vector3.new(4.2,4.2,4.2) - - local selectionBox = Instance.new("SelectionBox") - - -- srs translation from region3 to region3int16 - function Region3ToRegion3int16(region3) - local theLowVec = region3.CFrame.p - (region3.Size/2) + Vector3.new(2,2,2) - local lowCell = WorldToCellPreferSolid(terrain,theLowVec) - - local theHighVec = region3.CFrame.p + (region3.Size/2) - Vector3.new(2,2,2) - local highCell = WorldToCellPreferSolid(terrain, theHighVec) - - local highIntVec = Vector3int16.new(highCell.x,highCell.y,highCell.z) - local lowIntVec = Vector3int16.new(lowCell.x,lowCell.y,lowCell.z) - - return Region3int16.new(lowIntVec,highIntVec) - end - - -- helper function that creates the basis for a selection box - function createAdornment(theColor) - local selectionPartClone = nil - local selectionBoxClone = nil - - if #reusableAdorns > 0 then - selectionPartClone = reusableAdorns[1]["part"] - selectionBoxClone = reusableAdorns[1]["box"] - table.remove(reusableAdorns,1) - - selectionBoxClone.Visible = true - else - selectionPartClone = selectionPart:Clone() - selectionPartClone.Archivable = false - - selectionBoxClone = selectionBox:Clone() - selectionBoxClone.Archivable = false - - selectionBoxClone.Adornee = selectionPartClone - selectionBoxClone.Parent = selectionContainer - - selectionBoxClone.Adornee = selectionPartClone - - selectionBoxClone.Parent = selectionContainer - end - - if theColor then - selectionBoxClone.Color = theColor - end - - return selectionPartClone, selectionBoxClone - end - - -- iterates through all current adornments and deletes any that don't have latest tag - function cleanUpAdornments() - for cellPos, adornTable in pairs(adornments) do - - if adornTable.KeepAlive ~= currentKeepAliveTag then -- old news, we should get rid of this - adornTable.SelectionBox.Visible = false - table.insert(reusableAdorns,{part = adornTable.SelectionPart, box = adornTable.SelectionBox}) - adornments[cellPos] = nil - end - end - end - - -- helper function to update tag - function incrementAliveCounter() - aliveCounter = aliveCounter + 1 - if aliveCounter > 1000000 then - aliveCounter = 0 - end - return aliveCounter - end - - -- finds full cells in region and adorns each cell with a box, with the argument color - function adornFullCellsInRegion(region, color) - local regionBegin = region.CFrame.p - (region.Size/2) + Vector3.new(2,2,2) - local regionEnd = region.CFrame.p + (region.Size/2) - Vector3.new(2,2,2) - - local cellPosBegin = WorldToCellPreferSolid(terrain, regionBegin) - local cellPosEnd = WorldToCellPreferSolid(terrain, regionEnd) - - currentKeepAliveTag = incrementAliveCounter() - for y = cellPosBegin.y, cellPosEnd.y do - for z = cellPosBegin.z, cellPosEnd.z do - for x = cellPosBegin.x, cellPosEnd.x do - local cellMaterial = GetCell(terrain, x, y, z) - - if cellMaterial ~= emptyMaterial then - local cframePos = CellCenterToWorld(terrain, x, y, z) - local cellPos = Vector3int16.new(x,y,z) - - local updated = false - for cellPosAdorn, adornTable in pairs(adornments) do - if cellPosAdorn == cellPos then - adornTable.KeepAlive = currentKeepAliveTag - if color then - adornTable.SelectionBox.Color = color - end - updated = true - break - end - end - - if not updated then - local selectionPart, selectionBox = createAdornment(color) - selectionPart.Size = Vector3.new(4,4,4) - selectionPart.CFrame = CFrame.new(cframePos) - local adornTable = {SelectionPart = selectionPart, SelectionBox = selectionBox, KeepAlive = currentKeepAliveTag} - adornments[cellPos] = adornTable - end - end - end - end - end - cleanUpAdornments() - end - - - ------------------------------------- setup code ------------------------------ - lastRegion = regionToSelect - - if selectEmptyCells then -- use one big selection to represent the area selected - local selectionPart, selectionBox = createAdornment(color) - - selectionPart.Size = regionToSelect.Size - selectionPart.CFrame = regionToSelect.CFrame - - adornments.SelectionPart = selectionPart - adornments.SelectionBox = selectionBox - - updateSelection = - function (newRegion, color) - if newRegion and newRegion ~= lastRegion then - lastRegion = newRegion - selectionPart.Size = newRegion.Size - selectionPart.CFrame = newRegion.CFrame - end - if color then - selectionBox.Color = color - end - end - else -- use individual cell adorns to represent the area selected - adornFullCellsInRegion(regionToSelect, color) - updateSelection = - function (newRegion, color) - if newRegion and newRegion ~= lastRegion then - lastRegion = newRegion - adornFullCellsInRegion(newRegion, color) - end - end - - end - - local destroyFunc = function() - updateSelection = nil - if selectionContainer then selectionContainer:Destroy() end - adornments = nil - end - - return updateSelection, destroyFunc -end - ------------------------------Terrain Utilities End----------------------------- - - - - - - - ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------Signal class begin------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ---[[ -A 'Signal' object identical to the internal RBXScriptSignal object in it's public API and semantics. This function -can be used to create "custom events" for user-made code. -API: -Method :connect( function handler ) - Arguments: The function to connect to. - Returns: A new connection object which can be used to disconnect the connection - Description: Connects this signal to the function specified by |handler|. That is, when |fire( ... )| is called for - the signal the |handler| will be called with the arguments given to |fire( ... )|. Note, the functions - connected to a signal are called in NO PARTICULAR ORDER, so connecting one function after another does - NOT mean that the first will be called before the second as a result of a call to |fire|. - -Method :disconnect() - Arguments: None - Returns: None - Description: Disconnects all of the functions connected to this signal. - -Method :fire( ... ) - Arguments: Any arguments are accepted - Returns: None - Description: Calls all of the currently connected functions with the given arguments. - -Method :wait() - Arguments: None - Returns: The arguments given to fire - Description: This call blocks until -]] - -function t.CreateSignal() - local this = {} - - local mBindableEvent = Instance.new('BindableEvent') - local mAllCns = {} --all connection objects returned by mBindableEvent::connect - - --main functions - function this:connect(func) - if self ~= this then error("connect must be called with `:`, not `.`", 2) end - if type(func) ~= 'function' then - error("Argument #1 of connect must be a function, got a "..type(func), 2) - end - local cn = mBindableEvent.Event:connect(func) - mAllCns[cn] = true - local pubCn = {} - function pubCn:disconnect() - cn:disconnect() - mAllCns[cn] = nil - end - return pubCn - end - function this:disconnect() - if self ~= this then error("disconnect must be called with `:`, not `.`", 2) end - for cn, _ in pairs(mAllCns) do - cn:disconnect() - mAllCns[cn] = nil - end - end - function this:wait() - if self ~= this then error("wait must be called with `:`, not `.`", 2) end - return mBindableEvent.Event:wait() - end - function this:fire(...) - if self ~= this then error("fire must be called with `:`, not `.`", 2) end - mBindableEvent:Fire(...) - end - - return this -end - -------------------------------------------------- Sigal class End ------------------------------------------------------ - - - - ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------Create Function Begins--------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ---[[ -A "Create" function for easy creation of Roblox instances. The function accepts a string which is the classname of -the object to be created. The function then returns another function which either accepts accepts no arguments, in -which case it simply creates an object of the given type, or a table argument that may contain several types of data, -in which case it mutates the object in varying ways depending on the nature of the aggregate data. These are the -type of data and what operation each will perform: -1) A string key mapping to some value: - Key-Value pairs in this form will be treated as properties of the object, and will be assigned in NO PARTICULAR - ORDER. If the order in which properties is assigned matter, then they must be assigned somewhere else than the - |Create| call's body. - -2) An integral key mapping to another Instance: - Normal numeric keys mapping to Instances will be treated as children if the object being created, and will be - parented to it. This allows nice recursive calls to Create to create a whole hierarchy of objects without a - need for temporary variables to store references to those objects. - -3) A key which is a value returned from Create.Event( eventname ), and a value which is a function function - The Create.E( string ) function provides a limited way to connect to signals inside of a Create hierarchy - for those who really want such a functionality. The name of the event whose name is passed to - Create.E( string ) - -4) A key which is the Create function itself, and a value which is a function - The function will be run with the argument of the object itself after all other initialization of the object is - done by create. This provides a way to do arbitrary things involving the object from withing the create - hierarchy. - Note: This function is called SYNCHRONOUSLY, that means that you should only so initialization in - it, not stuff which requires waiting, as the Create call will block until it returns. While waiting in the - constructor callback function is possible, it is probably not a good design choice. - Note: Since the constructor function is called after all other initialization, a Create block cannot have two - constructor functions, as it would not be possible to call both of them last, also, this would be unnecessary. - - -Some example usages: - -A simple example which uses the Create function to create a model object and assign two of it's properties. -local model = Create'Model'{ - Name = 'A New model', - Parent = game.Workspace, -} - - -An example where a larger hierarchy of object is made. After the call the hierarchy will look like this: -Model_Container - |-ObjectValue - | | - | `-BoolValueChild - `-IntValue - -local model = Create'Model'{ - Name = 'Model_Container', - Create'ObjectValue'{ - Create'BoolValue'{ - Name = 'BoolValueChild', - }, - }, - Create'IntValue'{}, -} - - -An example using the event syntax: - -local part = Create'Part'{ - [Create.E'Touched'] = function(part) - print("I was touched by "..part.Name) - end, -} - - -An example using the general constructor syntax: - -local model = Create'Part'{ - [Create] = function(this) - print("Constructor running!") - this.Name = GetGlobalFoosAndBars(this) - end, -} - - -Note: It is also perfectly legal to save a reference to the function returned by a call Create, this will not cause - any unexpected behavior. EG: - local partCreatingFunction = Create'Part' - local part = partCreatingFunction() -]] - ---the Create function need to be created as a functor, not a function, in order to support the Create.E syntax, so it ---will be created in several steps rather than as a single function declaration. -local function Create_PrivImpl(objectType) - if type(objectType) ~= 'string' then - error("Argument of Create must be a string", 2) - end - --return the proxy function that gives us the nice Create'string'{data} syntax - --The first function call is a function call using Lua's single-string-argument syntax - --The second function call is using Lua's single-table-argument syntax - --Both can be chained together for the nice effect. - return function(dat) - --default to nothing, to handle the no argument given case - dat = dat or {} - - --make the object to mutate - local obj = Instance.new(objectType) - - --stored constructor function to be called after other initialization - local ctor = nil - - for k, v in pairs(dat) do - --add property - if type(k) == 'string' then - obj[k] = v - - - --add child - elseif type(k) == 'number' then - if type(v) ~= 'userdata' then - error("Bad entry in Create body: Numeric keys must be paired with children, got a: "..type(v), 2) - end - v.Parent = obj - - - --event connect - elseif type(k) == 'table' and k.__eventname then - if type(v) ~= 'function' then - error("Bad entry in Create body: Key `[Create.E\'"..k.__eventname.."\']` must have a function value\ - got: "..tostring(v), 2) - end - obj[k.__eventname]:connect(v) - - - --define constructor function - elseif k == t.Create then - if type(v) ~= 'function' then - error("Bad entry in Create body: Key `[Create]` should be paired with a constructor function, \ - got: "..tostring(v), 2) - elseif ctor then - --ctor already exists, only one allowed - error("Bad entry in Create body: Only one constructor function is allowed", 2) - end - ctor = v - - - else - error("Bad entry ("..tostring(k).." => "..tostring(v)..") in Create body", 2) - end - end - - --apply constructor function if it exists - if ctor then - ctor(obj) - end - - --return the completed object - return obj - end -end - ---now, create the functor: -t.Create = setmetatable({}, {__call = function(tb, ...) return Create_PrivImpl(...) end}) - ---and create the "Event.E" syntax stub. Really it's just a stub to construct a table which our Create ---function can recognize as special. -t.Create.E = function(eventName) - return {__eventname = eventName} -end - --------------------------------------------------Create function End---------------------------------------------------- - - - - ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------Documentation Begin----------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- - -t.Help = - function(funcNameOrFunc) - --input argument can be a string or a function. Should return a description (of arguments and expected side effects) - if funcNameOrFunc == "DecodeJSON" or funcNameOrFunc == t.DecodeJSON then - return "Function DecodeJSON. " .. - "Arguments: (string). " .. - "Side effect: returns a table with all parsed JSON values" - end - if funcNameOrFunc == "EncodeJSON" or funcNameOrFunc == t.EncodeJSON then - return "Function EncodeJSON. " .. - "Arguments: (table). " .. - "Side effect: returns a string composed of argument table in JSON data format" - end - if funcNameOrFunc == "MakeWedge" or funcNameOrFunc == t.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 " - end - if funcNameOrFunc == "SelectTerrainRegion" or funcNameOrFunc == t.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" - end - if funcNameOrFunc == "CreateSignal" or funcNameOrFunc == t.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 in".. - "Lua 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 funcNameOrFunc == "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|." - end - if funcNameOrFunc == "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." - end - if funcNameOrFunc == "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." - end - if funcNameOrFunc == "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." - end - if funcNameOrFunc == "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." - end - end - ---------------------------------------------Documentation Ends---------------------------------------------------------- - -return t - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/maintenance/asset/19238067 b/maintenance/asset/19238067 deleted file mode 100644 index 7fd9bc4..0000000 --- a/maintenance/asset/19238067 +++ /dev/null @@ -1 +0,0 @@ -NameMy ModelsCategoryId-151054824DescriptionA set of my models.AssetSetId-151054824CreatorNamehappyhomeman2ImageAssetId0SetTypeprivate
NameMy DecalsCategoryId-151054823DescriptionA set of my decals.AssetSetId-151054823CreatorNamehappyhomeman2ImageAssetId21002577SetTypeprivate
\ No newline at end of file diff --git a/maintenance/asset/19238114 b/maintenance/asset/19238114 deleted file mode 100644 index 88ddcbd..0000000 --- a/maintenance/asset/19238114 +++ /dev/null @@ -1 +0,0 @@ -NameMy ModelsCategoryId-151054928DescriptionA set of my models.AssetSetId-151054928CreatorNamehappyhomeman3ImageAssetId0SetTypeprivate
NameMy DecalsCategoryId-151054927DescriptionA set of my decals.AssetSetId-151054927CreatorNamehappyhomeman3ImageAssetId21002577SetTypeprivate
\ No newline at end of file diff --git a/maintenance/asset/2 b/maintenance/asset/2 deleted file mode 100644 index 318e116..0000000 --- a/maintenance/asset/2 +++ /dev/null @@ -1,23 +0,0 @@ -%2% --- Library Registration Script --- This script is used to register RbxLua libraries on game servers, so game scripts have --- access to all of the libraries (otherwise only local scripts do) - -local sc = game:GetService("ScriptContext") -local tries = 0 - -while not sc and tries < 3 do - tries = tries + 1 - sc = game:GetService("ScriptContext") - wait(0.2) -end - -if sc then - sc:RegisterLibrary("Libraries/RbxGui", "17") - sc:RegisterLibrary("Libraries/RbxGear", "18") - sc:RegisterLibrary("Libraries/RbxUtility", "19") - sc:RegisterLibrary("Libraries/RbxStamper", "20") - sc:LibraryRegistrationComplete() -else - print("failed to find script context, libraries did not load") -end diff --git a/maintenance/asset/20 b/maintenance/asset/20 deleted file mode 100644 index ef0ee9a..0000000 --- a/maintenance/asset/20 +++ /dev/null @@ -1,2208 +0,0 @@ -%20% -local t = {} - -function waitForChild(instance, name) - while not instance:FindFirstChild(name) do - instance.ChildAdded:wait() - end -end - --- Do a line/plane intersection. The line starts at the camera. The plane is at y == 0, normal(0, 1, 0) --- --- vectorPos - End point of the line. --- --- Return: --- cellPos - The terrain cell intersection point if there is one, vectorPos if there isn't. --- hit - Whether there was a plane intersection. Value is true if there was, false if not. -function PlaneIntersection(vectorPos) - local hit = false - local currCamera = game.Workspace.CurrentCamera - local startPos = Vector3.new(currCamera.CoordinateFrame.p.X, currCamera.CoordinateFrame.p.Y, currCamera.CoordinateFrame.p.Z) - local endPos = Vector3.new(vectorPos.X, vectorPos.Y, vectorPos.Z) - local normal = Vector3.new(0, 1, 0) - local p3 = Vector3.new(0, 0, 0) - local startEndDot = normal:Dot(endPos - startPos) - local cellPos = vectorPos - if startEndDot ~= 0 then - local t = normal:Dot(p3 - startPos) / startEndDot - if(t >=0 and t <=1) then - local intersection = ((endPos - startPos) * t) + startPos - cellPos = game.Workspace.Terrain:WorldToCell(intersection) - hit = true - end - end - - return cellPos, hit -end - - --- Purpose: --- Checks for terrain touched by the mouse hit. --- Will do a plane intersection if no terrain is touched. --- --- mouse - Mouse to check the .hit for. --- --- Return: --- cellPos - Cell position hit. Nil if none. -function GetTerrainForMouse(mouse) - -- There was no target, so all it could be is a plane intersection. - -- Check for a plane intersection. If there isn't one then nothing will get hit. - local cell = game.Workspace.Terrain:WorldToCellPreferSolid(Vector3.new(mouse.hit.x, mouse.hit.y, mouse.hit.z)) - local planeLoc = nil - -- If nothing was hit, do the plane intersection. - if 0 == game.Workspace.Terrain:GetCell(cell.X, cell.Y, cell.Z).Value then - cell = nil - planeLoc, hit = PlaneIntersection(Vector3.new(mouse.hit.x, mouse.hit.y, mouse.hit.z)) - if hit then - cell = planeLoc - end - end - return cell -end - --- setup helper functions -local insertBoundingBoxOverlapVector = Vector3.new(.3, .3, .3) -- we can still stamp if our character extrudes into the target stamping space by .3 or fewer units - --- rotates a model by yAngle radians about the global y-axis -local function rotatePartAndChildren(part, rotCF, offsetFromOrigin) - -- rotate this thing, if it's a part - if part:IsA("BasePart") then - part.CFrame = (rotCF * (part.CFrame - offsetFromOrigin)) + offsetFromOrigin - end - - -- recursively do the same to all children - local partChildren = part:GetChildren() - for c = 1, #partChildren do rotatePartAndChildren(partChildren[c], rotCF, offsetFromOrigin) end -end - -local function modelRotate(model, yAngle) - local rotCF = CFrame.Angles(0, yAngle, 0) - local offsetFromOrigin = model:GetModelCFrame().p - - rotatePartAndChildren(model, rotCF, offsetFromOrigin) -end - - -local function collectParts(object, baseParts, scripts, decals) - if object:IsA("BasePart") then - baseParts[#baseParts+1] = object - elseif object:IsA("Script") then - scripts[#scripts+1] = object - elseif object:IsA("Decal") then - decals[#decals+1] = object - end - - for index,child in pairs(object:GetChildren()) do - collectParts(child, baseParts, scripts, decals) - end -end - -local function clusterPartsInRegion(startVector, endVector) - local cluster = game.Workspace:FindFirstChild("Terrain") - - local startCell = cluster:WorldToCell(startVector) - local endCell = cluster:WorldToCell(endVector) - - local startX = startCell.X - local startY = startCell.Y - local startZ = startCell.Z - - local endX = endCell.X - local endY = endCell.Y - local endZ = endCell.Z - - if startX < cluster.MaxExtents.Min.X then startX = cluster.MaxExtents.Min.X end - if startY < cluster.MaxExtents.Min.Y then startY = cluster.MaxExtents.Min.Y end - if startZ < cluster.MaxExtents.Min.Z then startZ = cluster.MaxExtents.Min.Z end - - if endX > cluster.MaxExtents.Max.X then endX = cluster.MaxExtents.Max.X end - if endY > cluster.MaxExtents.Max.Y then endY = cluster.MaxExtents.Max.Y end - if endZ > cluster.MaxExtents.Max.Z then endZ = cluster.MaxExtents.Max.Z end - - for x = startX, endX do - for y = startY, endY do - for z = startZ, endZ do - if (cluster:GetCell(x, y, z).Value) > 0 then return true end - end - end - end - - return false -end - -local function findSeatsInModel(parent, seatTable) - if not parent then return end - - if parent.className == "Seat" or parent.className == "VehicleSeat" then - table.insert(seatTable, parent) - end - local myChildren = parent:GetChildren() - for j = 1, #myChildren do - findSeatsInModel(myChildren[j], seatTable) - end -end - -local function setSeatEnabledStatus(model, isEnabled) - local seatList = {} - findSeatsInModel(model, seatList) - - if isEnabled then - -- remove any welds called "SeatWeld" in seats - for i = 1, #seatList do - local nextSeat = seatList[i]:FindFirstChild("SeatWeld") - while nextSeat do nextSeat:Remove() nextSeat = seatList[i]:FindFirstChild("SeatWeld") end - end - else - -- put a weld called "SeatWeld" in every seat - -- this tricks it into thinking there's already someone sitting there, and it won't make you sit XD - for i = 1, #seatList do - local fakeWeld = Instance.new("Weld") - fakeWeld.Name = "SeatWeld" - fakeWeld.Parent = seatList[i] - end - end -end - -local function autoAlignToFace(parts) - local aatf = parts:FindFirstChild("AutoAlignToFace") - if aatf then return aatf.Value else return false end -end - -local function getClosestAlignedWorldDirection(aVector3InWorld) - local xDir = Vector3.new(1,0,0) - local yDir = Vector3.new(0,1,0) - local zDir = Vector3.new(0,0,1) - local xDot = aVector3InWorld.x * xDir.x + aVector3InWorld.y * xDir.y + aVector3InWorld.z * xDir.z - local yDot = aVector3InWorld.x * yDir.x + aVector3InWorld.y * yDir.y + aVector3InWorld.z * yDir.z - local zDot = aVector3InWorld.x * zDir.x + aVector3InWorld.y * zDir.y + aVector3InWorld.z * zDir.z - - if math.abs(xDot) > math.abs(yDot) and math.abs(xDot) > math.abs(zDot) then - if xDot > 0 then - return 0 - else - return 3 - end - elseif math.abs(yDot) > math.abs(xDot) and math.abs(yDot) > math.abs(zDot) then - if yDot > 0 then - return 1 - else - return 4 - end - else - if zDot > 0 then - return 2 - else - return 5 - end - end -end - -local function positionPartsAtCFrame3(aCFrame, currentParts) - local insertCFrame = nil - if not currentParts then return currentParts end - if currentParts and (currentParts:IsA("Model") or currentParts:IsA("Tool")) then - insertCFrame = currentParts:GetModelCFrame() - currentParts:TranslateBy(aCFrame.p - insertCFrame.p) - else - currentParts.CFrame = aCFrame - end - return currentParts -end - -local function calcRayHitTime(rayStart, raySlope, intersectionPlane) - if math.abs(raySlope) < .01 then return 0 end -- 0 slope --> we just say intersection time is 0, and sidestep this dimension - return (intersectionPlane - rayStart) / raySlope -end - -local function modelTargetSurface(partOrModel, rayStart, rayEnd) - if not partOrModel then - return 0 - end - - local modelCFrame = nil - local modelSize = nil - if partOrModel:IsA("Model") then - modelCFrame = partOrModel:GetModelCFrame() - modelSize = partOrModel:GetModelSize() - else - modelCFrame = partOrModel.CFrame - modelSize = partOrModel.Size - end - - local mouseRayStart = modelCFrame:pointToObjectSpace(rayStart) - local mouseRayEnd = modelCFrame:pointToObjectSpace(rayEnd) - local mouseSlope = mouseRayEnd - mouseRayStart - - local xPositive = 1 - local yPositive = 1 - local zPositive = 1 - if mouseSlope.X > 0 then xPositive = -1 end - if mouseSlope.Y > 0 then yPositive = -1 end - if mouseSlope.Z > 0 then zPositive = -1 end - - -- find which surface the transformed mouse ray hits (using modelSize): - local xHitTime = calcRayHitTime(mouseRayStart.X, mouseSlope.X, modelSize.X/2 * xPositive) - local yHitTime = calcRayHitTime(mouseRayStart.Y, mouseSlope.Y, modelSize.Y/2 * yPositive) - local zHitTime = calcRayHitTime(mouseRayStart.Z, mouseSlope.Z, modelSize.Z/2 * zPositive) - - local hitFace = 0 - - --if xHitTime >= 0 and yHitTime >= 0 and zHitTime >= 0 then - if xHitTime > yHitTime then - if xHitTime > zHitTime then - -- xFace is hit - hitFace = 1*xPositive - else - -- zFace is hit - hitFace = 3*zPositive - end - else - if yHitTime > zHitTime then - -- yFace is hit - hitFace = 2*yPositive - else - -- zFace is hit - hitFace = 3*zPositive - end - end - - return hitFace -end - -local function getBoundingBox2(partOrModel) - - -- for models, the bounding box is defined as the minimum and maximum individual part bounding boxes - -- relative to the first part's coordinate frame. - local minVec = Vector3.new(math.huge, math.huge, math.huge) - local maxVec = Vector3.new(-math.huge, -math.huge, -math.huge) - - if partOrModel:IsA("Terrain") then - minVec = Vector3.new(-2, -2, -2) - maxVec = Vector3.new(2, 2, 2) - elseif partOrModel:IsA("BasePart") then - minVec = -0.5 * partOrModel.Size - maxVec = -minVec - else - maxVec = partOrModel:GetModelSize()*0.5 - minVec = -maxVec - end - - -- Adjust bounding box to reflect what the model or part author wants in terms of justification - local justifyValue = partOrModel:FindFirstChild("Justification") - if justifyValue ~= nil then - -- find the multiple of 4 that contains the model - justify = justifyValue.Value - two = Vector3.new(2, 2, 2) - actualBox = maxVec - minVec - Vector3.new(0.01, 0.01, 0.01) - containingGridBox = Vector3.new(4 * math.ceil(actualBox.x/4), 4 * math.ceil(actualBox.y/4), 4 * math.ceil(actualBox.z/4)) - adjustment = containingGridBox - actualBox - minVec = minVec - 0.5 * adjustment * justify - maxVec = maxVec + 0.5 * adjustment * (two - justify) - end - - return minVec, maxVec -end - -local function getBoundingBoxInWorldCoordinates(partOrModel) - local minVec = 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 - vec1 = partOrModel.CFrame:pointToWorldSpace(-0.5 * partOrModel.Size) - 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)) - 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 - -- we shouldn't have to deal with this case - --minVec = Vector3.new(-2, -2, -2) - --maxVec = Vector3.new(2, 2, 2) - else - vec1 = partOrModel:GetModelCFrame():pointToWorldSpace(-0.5 * partOrModel:GetModelSize()) - 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)) - maxVec = Vector3.new(math.max(vec1.X, vec2.X), math.max(vec1.Y, vec2.Y), math.max(vec1.Z, vec2.Z)) - end - - return minVec, maxVec -end - -local function getTargetPartBoundingBox(targetPart) - if targetPart.Parent:FindFirstChild("RobloxModel") ~= nil then - return getBoundingBox2(targetPart.Parent) - else - return getBoundingBox2(targetPart) - end -end - -local function getMouseTargetCFrame(targetPart) - if targetPart.Parent:FindFirstChild("RobloxModel") ~= nil then - if targetPart.Parent:IsA("Tool") then return targetPart.Parent.Handle.CFrame - else return targetPart.Parent:GetModelCFrame() end - else - return targetPart.CFrame - end -end - -local function isBlocker(part) -- returns whether or not we want to cancel the stamp because we're blocked by this part - if not part then return false end - if not part.Parent then return false end - if part:FindFirstChild("Humanoid") then return false end - if part:FindFirstChild("RobloxStamper") or part:FindFirstChild("RobloxModel") then return true end - if part:IsA("Part") and not part.CanCollide then return false end - if part == game.Lighting then return false end - return isBlocker(part.Parent) -end - --- helper function to determine if a character can be pushed upwards by a certain amount --- character is 5 studs tall, we'll check a 1.5 x 1.5 x 4.5 box around char, with center .5 studs below torsocenter -local function spaceAboveCharacter(charTorso, newTorsoY, stampData) - local partsAboveChar = game.Workspace:FindPartsInRegion3( - Region3.new(Vector3.new(charTorso.Position.X, newTorsoY, charTorso.Position.Z) - Vector3.new(.75, 2.75, .75), - Vector3.new(charTorso.Position.X, newTorsoY, charTorso.Position.Z) + Vector3.new(.75, 1.75, .75)), - charTorso.Parent, - 100) - - for j = 1, #partsAboveChar do - if partsAboveChar[j].CanCollide and not partsAboveChar[j]:IsDescendantOf(stampData.CurrentParts) then return false end - end - - if clusterPartsInRegion(Vector3.new(charTorso.Position.X, newTorsoY, charTorso.Position.Z) - Vector3.new(.75, 2.75, .75), - Vector3.new(charTorso.Position.X, newTorsoY, charTorso.Position.Z) + Vector3.new(.75, 1.75, .75)) then - return false - end - - return true -end - - -local function findConfigAtMouseTarget(Mouse, stampData) - -- *Critical Assumption* : - -- This function assumes the target CF axes are orthogonal with the target bounding box faces - -- And, it assumes the insert CF axes are orthongonal with the insert bounding box faces - -- Therefore, insertion will not work with angled faces on wedges or other "non-block" parts, nor - -- will it work for parts in a model that are not orthogonally aligned with the model's CF. - - if not Mouse then return nil end -- This can happen sometimes, return if so - if not stampData then error("findConfigAtMouseTarget: stampData is nil") return nil end - if not stampData["CurrentParts"] then return nil end - - local grid = 4.0 - local admissibleConfig = false - local targetConfig = CFrame.new(0,0,0) - - local minBB, maxBB = getBoundingBox2(stampData.CurrentParts) - local diagBB = maxBB - minBB - - local insertCFrame - if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then - insertCFrame = stampData.CurrentParts:GetModelCFrame() - else - insertCFrame = stampData.CurrentParts.CFrame - end - - if Mouse then - if stampData.CurrentParts:IsA("Tool") then - Mouse.TargetFilter = stampData.CurrentParts.Handle - else - Mouse.TargetFilter = stampData.CurrentParts - end - end - - local hitPlane = false - local targetPart = nil - local success = pcall(function() targetPart = Mouse.Target end) - - if not success then-- or targetPart == nil then - return admissibleConfig, targetConfig - end - - local mouseHitInWorld = Vector3.new(0, 0, 0) - if Mouse then - mouseHitInWorld = Vector3.new(Mouse.Hit.x, Mouse.Hit.y, Mouse.Hit.z) - end - - local cellPos = nil - - -- Nothing was hit, so check for the default plane. - if nil == targetPart then - cellPos = GetTerrainForMouse(Mouse) - if nil == cellPos then - hitPlane = false - return admissibleConfig, targetConfig - else - targetPart = game.Workspace.Terrain - hitPlane = true - -- Take into account error that will occur. - cellPos = Vector3.new(cellPos.X - 1, cellPos.Y, cellPos.Z) - mouseHitInWorld = game.Workspace.Terrain:CellCenterToWorld(cellPos.x, cellPos.y, cellPos.z) - end - end - - -- test mouse hit location - local minBBTarget, maxBBTarget = getTargetPartBoundingBox(targetPart) - local diagBBTarget = maxBBTarget - minBBTarget - local targetCFrame = getMouseTargetCFrame(targetPart) - - if targetPart:IsA("Terrain") then - if not cluster then cluster = game.Workspace:FindFirstChild("Terrain") end - local cellID = cluster:WorldToCellPreferSolid(mouseHitInWorld) - if hitPlane then - cellID = cellPos - end - - targetCFrame = CFrame.new(game.Workspace.Terrain:CellCenterToWorld(cellID.x, cellID.y, cellID.z)) - end - - local mouseHitInTarget = targetCFrame:pointToObjectSpace(mouseHitInWorld) - local targetVectorInWorld = Vector3.new(0,0,0) - if Mouse then - -- DON'T WANT THIS IN TERMS OF THE MODEL CFRAME! (.TargetSurface is in terms of the part CFrame, so this would break, right? [HotThoth]) - -- (ideally, we would want to make the Mouse.TargetSurface a model-targetsurface instead, but for testing will be using the converse) - --targetVectorInWorld = targetCFrame:vectorToWorldSpace(Vector3.FromNormalId(Mouse.TargetSurface)) - targetVectorInWorld = targetPart.CFrame:vectorToWorldSpace(Vector3.FromNormalId(Mouse.TargetSurface)) -- better, but model cframe would be best - --[[if targetPart.Parent:IsA("Model") then - local hitFace = modelTargetSurface(targetPart.Parent, Mouse.Hit.p, game.Workspace.CurrentCamera.CoordinateFrame.p) -- best, if you get it right - local WORLD_AXES = {Vector3.new(1, 0, 0), Vector3.new(0, 1, 0), Vector3.new(0, 0, 1)} - if hitFace > 0 then - targetVectorInWorld = targetCFrame:vectorToWorldSpace(WORLD_AXES[hitFace]) - elseif hitFace < 0 then - targetVectorInWorld = targetCFrame:vectorToWorldSpace(-WORLD_AXES[-hitFace]) - end - end]] - end - - local targetRefPointInTarget - local clampToSurface - - if getClosestAlignedWorldDirection(targetVectorInWorld) == 0 then - targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(1, -1, 1)) - insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(-1, -1, 1)) - clampToSurface = Vector3.new(0,1,1) - elseif getClosestAlignedWorldDirection(targetVectorInWorld) == 3 then - targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(-1, -1, -1)) - insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(1, -1, -1)) - clampToSurface = Vector3.new(0,1,1) - elseif getClosestAlignedWorldDirection(targetVectorInWorld) == 1 then - targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(-1, 1, 1)) - insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(-1, -1, 1)) - clampToSurface = Vector3.new(1,0,1) - elseif getClosestAlignedWorldDirection(targetVectorInWorld) == 4 then - targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(-1, -1, 1)) - insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(-1, 1, 1)) - clampToSurface = Vector3.new(1,0,1) - elseif getClosestAlignedWorldDirection(targetVectorInWorld) == 2 then - targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(-1, -1, 1)) - insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(-1, -1, -1)) - clampToSurface = Vector3.new(1,1,0) - else - targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(1, -1, -1)) - insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(1, -1, 1)) - clampToSurface = Vector3.new(1,1,0) - end - - targetRefPointInTarget = targetRefPointInTarget * (0.5 * diagBBTarget) + 0.5 * (maxBBTarget + minBBTarget) - insertRefPointInInsert = insertRefPointInInsert * (0.5 * diagBB) + 0.5 * (maxBB + minBB) - - -- To Do: For cases that are not aligned to the world grid, account for the minimal rotation - -- needed to bring the Insert part(s) into alignment with the Target Part - -- Apply the rotation here - - local delta = mouseHitInTarget - targetRefPointInTarget - local deltaClamped = Vector3.new(grid * math.modf(delta.x/grid), grid * math.modf(delta.y/grid), grid * math.modf(delta.z/grid)) - deltaClamped = deltaClamped * clampToSurface - local targetTouchInTarget = deltaClamped + targetRefPointInTarget - - local TargetTouchRelToWorld = targetCFrame:pointToWorldSpace(targetTouchInTarget) - local InsertTouchInWorld = insertCFrame:vectorToWorldSpace(insertRefPointInInsert) - local posInsertOriginInWorld = TargetTouchRelToWorld - InsertTouchInWorld - - local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = insertCFrame:components() - targetConfig = CFrame.new(posInsertOriginInWorld.x, posInsertOriginInWorld.y, posInsertOriginInWorld.z, R00, R01, R02, R10, R11, R12, R20, R21, R22) - admissibleConfig = true - - return admissibleConfig, targetConfig, getClosestAlignedWorldDirection(targetVectorInWorld) -end - -local function truncateToCircleEighth(bigValue, littleValue) - local big = math.abs(bigValue) - local little = math.abs(littleValue) - local hypotenuse = math.sqrt(big*big + little*little) - local frac = little / hypotenuse - - local bigSign = 1 - local littleSign = 1 - if bigValue < 0 then bigSign = -1 end - if littleValue < 0 then littleSign = -1 end - - if frac > .382683432 then - -- between 22.5 and 45 degrees, so truncate to 45-degree tilt - return .707106781 * hypotenuse * bigSign, .707106781 * hypotenuse * littleSign - else - -- between 0 and 22.5 degrees, so truncate to 0-degree tilt - return hypotenuse * bigSign, 0 - end -end - - -local function saveTheWelds(object, manualWeldTable, manualWeldParentTable) - if object:IsA("ManualWeld") or object:IsA("Rotate") then - table.insert(manualWeldTable, object) - table.insert(manualWeldParentTable, object.Parent) - else - local children = object:GetChildren() - for i = 1, #children do - saveTheWelds(children[i], manualWeldTable, manualWeldParentTable) - end - end -end - -local function restoreTheWelds(manualWeldTable, manualWeldParentTable) - for i = 1, #manualWeldTable do - manualWeldTable[i].Parent = manualWeldParentTable[i] - end -end - -t.CanEditRegion = function(partOrModel, EditRegion) -- todo: use model and stamper metadata - if not EditRegion then return true, false end - - local minBB, maxBB = getBoundingBoxInWorldCoordinates(partOrModel) - - if minBB.X < EditRegion.CFrame.p.X - EditRegion.Size.X/2 or - minBB.Y < EditRegion.CFrame.p.Y - EditRegion.Size.Y/2 or - minBB.Z < EditRegion.CFrame.p.Z - EditRegion.Size.Z/2 then - return false, false - end - - if maxBB.X > EditRegion.CFrame.p.X + EditRegion.Size.X/2 or - maxBB.Y > EditRegion.CFrame.p.Y + EditRegion.Size.Y/2 or - maxBB.Z > EditRegion.CFrame.p.Z + EditRegion.Size.Z/2 then - return false, false - end - - return true, false -end - -t.GetStampModel = function(assetId, terrainShape, useAssetVersionId) - if assetId == 0 then - return nil, "No Asset" - end - if assetId < 0 then - return nil, "Negative Asset" - end - - local function UnlockInstances(object) - if object:IsA("BasePart") then - object.Locked = false - end - for index,child in pairs(object:GetChildren()) do - UnlockInstances(child) - end - end - - local function getClosestColorToTerrainMaterial(terrainValue) - if terrainValue == 1 then - return BrickColor.new("Bright green") - elseif terrainValue == 2 then - return BrickColor.new("Bright yellow") - elseif terrainValue == 3 then - return BrickColor.new("Bright red") - elseif terrainValue == 4 then - return BrickColor.new("Sand red") - elseif terrainValue == 5 then - return BrickColor.new("Black") - elseif terrainValue == 6 then - return BrickColor.new("Dark stone grey") - elseif terrainValue == 7 then - return BrickColor.new("Sand blue") - elseif terrainValue == 8 then - return BrickColor.new("Deep orange") - elseif terrainValue == 9 then - return BrickColor.new("Dark orange") - elseif terrainValue == 10 then - return BrickColor.new("Reddish brown") - elseif terrainValue == 11 then - return BrickColor.new("Light orange") - elseif terrainValue == 12 then - return BrickColor.new("Light stone grey") - elseif terrainValue == 13 then - return BrickColor.new("Sand green") - elseif terrainValue == 14 then - return BrickColor.new("Medium stone grey") - elseif terrainValue == 15 then - return BrickColor.new("Really red") - elseif terrainValue == 16 then - return BrickColor.new("Really blue") - elseif terrainValue == 17 then - return BrickColor.new("Bright blue") - else - return BrickColor.new("Bright green") - end - end - - local function setupFakeTerrainPart(cellMat, cellType, cellOrient) - local newTerrainPiece = nil - if (cellType == 1 or cellType == 4) then newTerrainPiece = Instance.new("WedgePart") newTerrainPiece.formFactor = "Custom" - elseif (cellType == 2) then newTerrainPiece = Instance.new("CornerWedgePart") - else newTerrainPiece = Instance.new("Part") newTerrainPiece.formFactor = "Custom" end - newTerrainPiece.Name = "MegaClusterCube" - newTerrainPiece.Size = Vector3.new(4, 4, 4) - newTerrainPiece.BottomSurface = "Smooth" - newTerrainPiece.TopSurface = "Smooth" - - -- can add decals or textures here if feeling particularly adventurous... for now, can make a table of look-up colors - newTerrainPiece.BrickColor = getClosestColorToTerrainMaterial(cellMat) - - local sideways = 0 - local flipped = math.pi - if cellType == 4 then sideways = -math.pi/2 end - if cellType == 2 or cellType == 3 then flipped = 0 end - newTerrainPiece.CFrame = CFrame.Angles(0, math.pi/2*cellOrient + flipped, sideways) - - if cellType == 3 then - local inverseCornerWedgeMesh = Instance.new("SpecialMesh") - inverseCornerWedgeMesh.MeshType = "FileMesh" - inverseCornerWedgeMesh.MeshId = "http://www.jarfeh.xyz/asset?id=66832495" - inverseCornerWedgeMesh.Scale = Vector3.new(2, 2, 2) - inverseCornerWedgeMesh.Parent = newTerrainPiece - end - - local materialTag = Instance.new("Vector3Value") - materialTag.Value = Vector3.new(cellMat, cellType, cellOrient) - materialTag.Name = "ClusterMaterial" - materialTag.Parent = newTerrainPiece - - return newTerrainPiece - end - - -- This call will cause a "wait" until the data comes back - -- below we wait a max of 8 seconds before deciding to bail out on loading - local root - local loader - loading = true - if useAssetVersionId then - loader = coroutine.create(function() - root = game:GetService("InsertService"):LoadAssetVersion(assetId) - loading = false - end) - coroutine.resume(loader) - else - loader = coroutine.create(function() - root = game:GetService("InsertService"):LoadAsset(assetId) - loading = false - end) - coroutine.resume(loader) - end - - local lastGameTime = 0 - local totalTime = 0 - local maxWait = 8 - while loading and totalTime < maxWait do - lastGameTime = tick() - wait(1) - totalTime = totalTime + tick() - lastGameTime - end - loading = false - - if totalTime >= maxWait then - return nil, "Load Time Fail" - end - - - if root == nil then - return nil, "Load Asset Fail" - end - - if not root:IsA("Model") then - return nil, "Load Type Fail" - end - - local instances = root:GetChildren() - if #instances == 0 then - return nil, "Empty Model Fail" - end - - --Unlock all parts that are inserted, to make sure they are editable - UnlockInstances(root) - - --Continue the insert process - root = root:GetChildren()[1] - - --Examine the contents and decide what it looks like - for pos, instance in pairs(instances) do - if instance:IsA("Team") then - instance.Parent = game:GetService("Teams") - elseif instance:IsA("Sky") then - local lightingService = game:GetService("Lighting") - for index,child in pairs(lightingService:GetChildren()) do - if child:IsA("Sky") then - child:Remove(); - end - end - instance.Parent = lightingService - return - end - end - - -- ...and tag all inserted models for subsequent origin identification - -- if no RobloxModel tag already exists, then add it. - if root:FindFirstChild("RobloxModel") == nil then - local stringTag = Instance.new("BoolValue", root) - stringTag.Name = "RobloxModel" - - if root:FindFirstChild("RobloxStamper") == nil then - local stringTag2 = Instance.new("BoolValue", root) - stringTag2.Name = "RobloxStamper" - end - end - - if terrainShape then - if root.Name == "MegaClusterCube" then - if (terrainShape == 6) then -- insert an autowedging tag - local autowedgeTag = Instance.new("BoolValue") - autowedgeTag.Name = "AutoWedge" - autowedgeTag.Parent = root - else - local clusterTag = root:FindFirstChild("ClusterMaterial") - if clusterTag then - if clusterTag:IsA("Vector3Value") then - root = setupFakeTerrainPart(clusterTag.Value.X, terrainShape, clusterTag.Value.Z) - else - root = setupFakeTerrainPart(clusterTag.Value, terrainShape, 0) - end - else - root = setupFakeTerrainPart(1, terrainShape, 0) - end - end - end - end - - return root -end - - - -t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStampRegion, StampFailedFunc) - if not modelToStamp then - error("SetupStamperDragger: modelToStamp (first arg) is nil! Should be a stamper model") - return nil - end - if not modelToStamp:IsA("Model") and not modelToStamp:IsA("BasePart") then - error("SetupStamperDragger: modelToStamp (first arg) is neither a Model or Part!") - return nil - end - if not Mouse then - error("SetupStamperDragger: Mouse (second arg) is nil! Should be a mouse object") - return nil - end - if not Mouse:IsA("Mouse") then - error("SetupStamperDragger: Mouse (second arg) is not of type Mouse!") - return nil - end - - local stampInModel = nil - local allowedStampRegion = nil - local stampFailedFunc = nil - if StampInModel then - if not StampInModel:IsA("Model") then - error("SetupStamperDragger: StampInModel (optional third arg) is not of type 'Model'") - return nil - end - if not AllowedStampRegion then - error("SetupStamperDragger: AllowedStampRegion (optional fourth arg) is nil when StampInModel (optional third arg) is defined") - return nil - end - stampFailedFunc = StampFailedFunc - stampInModel = StampInModel - allowedStampRegion = AllowedStampRegion - end - - -- Init all state variables - local gInitial90DegreeRotations = 0 - local stampData = nil - local mouseTarget = nil - - local errorBox = Instance.new("SelectionBox") - errorBox.Color = BrickColor.new("Bright red") - errorBox.Transparency = 0 - errorBox.Archivable = false - - -- for megacluster MEGA STAMPING - local adornPart = Instance.new("Part") - adornPart.Parent = nil - adornPart.formFactor = "Custom" - adornPart.Size = Vector3.new(4, 4, 4) - adornPart.CFrame = CFrame.new() - adornPart.Archivable = false - - local adorn = Instance.new("SelectionBox") - adorn.Color = BrickColor.new("Toothpaste") - adorn.Adornee = adornPart - adorn.Visible = true - adorn.Transparency = 0 - adorn.Name = "HighScalabilityStamperLine" - adorn.Archivable = false - - local HighScalabilityLine = {} - HighScalabilityLine.Start = nil - HighScalabilityLine.End = nil - HighScalabilityLine.Adorn = adorn - HighScalabilityLine.AdornPart = adornPart - HighScalabilityLine.InternalLine = nil - HighScalabilityLine.NewHint = true - - HighScalabilityLine.MorePoints = {nil, nil} - HighScalabilityLine.MoreLines = {nil, nil} - HighScalabilityLine.Dimensions = 1 - - local control = {} - local movingLock = false - local stampUpLock = false - local unstampableSurface = false - local mouseCons = {} - local keyCon = nil - - local stamped = Instance.new("BoolValue") - stamped.Archivable = false - stamped.Value = false - - local lastTarget = {} - lastTarget.TerrainOrientation = 0 - lastTarget.CFrame = 0 - - local cellInfo = {} - cellInfo.Material = 1 - cellInfo.clusterType = 0 - cellInfo.clusterOrientation = 0 - - local function isMegaClusterPart() - if not stampData then return false end - if not stampData.CurrentParts then return false end - - return ( stampData.CurrentParts:FindFirstChild("ClusterMaterial",true) or (stampData.CurrentParts.Name == "MegaClusterCube") ) - end - - local function DoHighScalabilityRegionSelect() - local megaCube = stampData.CurrentParts:FindFirstChild("MegaClusterCube") - if not megaCube then - if not stampData.CurrentParts.Name == "MegaClusterCube" then - return - else - megaCube = stampData.CurrentParts - end - end - - HighScalabilityLine.End = megaCube.CFrame.p - local line = nil - local line2 = Vector3.new(0, 0, 0) - local line3 = Vector3.new(0, 0, 0) - - if HighScalabilityLine.Dimensions == 1 then - -- extract the line from these positions and limit to a 2D plane made from 2 of the world axes - -- then use dominating axis to limit line to be at 45-degree intervals - -- will use this internal representation of the line for the actual stamping - line = (HighScalabilityLine.End - HighScalabilityLine.Start) - - if math.abs(line.X) < math.abs(line.Y) then - if math.abs(line.X) < math.abs(line.Z) then - -- limit to Y/Z plane, domination unknown - local newY, newZ - if (math.abs(line.Y) > math.abs(line.Z)) then - newY, newZ = truncateToCircleEighth(line.Y, line.Z) - else - newZ, newY = truncateToCircleEighth(line.Z, line.Y) - end - line = Vector3.new(0, newY, newZ) - else - -- limit to X/Y plane, with Y dominating - local newY, newX = truncateToCircleEighth(line.Y, line.X) - line = Vector3.new(newX, newY, 0) - end - else - if math.abs(line.Y) < math.abs(line.Z) then - -- limit to X/Z plane, domination unknown - local newX, newZ - if math.abs(line.X) > math.abs(line.Z) then - newX, newZ = truncateToCircleEighth(line.X, line.Z) - else - newZ, newX = truncateToCircleEighth(line.Z, line.X) - end - line = Vector3.new(newX, 0, newZ) - else - -- limit to X/Y plane, with X dominating - local newX, newY = truncateToCircleEighth(line.X, line.Y) - line = Vector3.new(newX, newY, 0) - end - end - HighScalabilityLine.InternalLine = line - - elseif HighScalabilityLine.Dimensions == 2 then - line = HighScalabilityLine.MoreLines[1] - line2 = HighScalabilityLine.End - HighScalabilityLine.MorePoints[1] - - -- take out any component of line2 along line1, so you get perpendicular to line1 component - line2 = line2 - line.unit*line.unit:Dot(line2) - - tempCFrame = CFrame.new(HighScalabilityLine.Start, HighScalabilityLine.Start + line) - - -- then zero out whichever is the smaller component - local yAxis = tempCFrame:vectorToWorldSpace(Vector3.new(0, 1, 0)) - local xAxis = tempCFrame:vectorToWorldSpace(Vector3.new(1, 0, 0)) - - local xComp = xAxis:Dot(line2) - local yComp = yAxis:Dot(line2) - - if math.abs(yComp) > math.abs(xComp) then - line2 = line2 - xAxis * xComp - else - line2 = line2 - yAxis * yComp - end - - HighScalabilityLine.InternalLine = line2 - - elseif HighScalabilityLine.Dimensions == 3 then - line = HighScalabilityLine.MoreLines[1] - line2 = HighScalabilityLine.MoreLines[2] - line3 = HighScalabilityLine.End - HighScalabilityLine.MorePoints[2] - - -- zero out all components of previous lines - line3 = line3 - line.unit * line.unit:Dot(line3) - line3 = line3 - line2.unit * line2.unit:Dot(line3) - - HighScalabilityLine.InternalLine = line3 - end - - -- resize the "line" graphic to be the correct size and orientation - tempCFrame = CFrame.new(HighScalabilityLine.Start, HighScalabilityLine.Start + line) - - if HighScalabilityLine.Dimensions == 1 then -- faster calculation for line - HighScalabilityLine.AdornPart.Size = Vector3.new(4, 4, line.magnitude + 4) - HighScalabilityLine.AdornPart.CFrame = tempCFrame + tempCFrame:vectorToWorldSpace(Vector3.new(2, 2, 2) - HighScalabilityLine.AdornPart.Size/2) - else - local boxSize = tempCFrame:vectorToObjectSpace(line + line2 + line3) - HighScalabilityLine.AdornPart.Size = Vector3.new(4, 4, 4) + Vector3.new(math.abs(boxSize.X), math.abs(boxSize.Y), math.abs(boxSize.Z)) - HighScalabilityLine.AdornPart.CFrame = tempCFrame + tempCFrame:vectorToWorldSpace(boxSize/2) - end - - -- make player able to see this ish - - local gui = nil - if game.Players["LocalPlayer"] then - gui = game.Players.LocalPlayer:FindFirstChild("PlayerGui") - 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 - HighScalabilityLine.Adorn.Parent = gui - elseif HighScalabilityLine.Dimensions > 1 then - HighScalabilityLine.Adorn.Parent = gui - end - end - end - - if gui == nil then -- we are in studio - gui = game:GetService("CoreGui") - if HighScalabilityLine.Dimensions == 1 and line.magnitude > 3 then -- don't show if mouse hasn't moved enough - HighScalabilityLine.Adorn.Parent = gui - elseif HighScalabilityLine.Dimensions > 1 then - HighScalabilityLine.Adorn.Parent = gui - end - end - end - - - local function DoStamperMouseMove(Mouse) - if not Mouse then - error("Error: RbxStamper.DoStamperMouseMove: Mouse is nil") - return - end - if not Mouse:IsA("Mouse") then - error("Error: RbxStamper.DoStamperMouseMove: Mouse is of type", Mouse.className,"should be of type Mouse") - return - end - - -- There wasn't a target (no part or terrain), so check for plane intersection. - if not Mouse.Target then - local cellPos = GetTerrainForMouse(Mouse) - if nil == cellPos then - return - end - end - - if not stampData then - return - end - - -- don't move with dragger - will move in one step on mouse down - -- draw ghost at acceptable positions - configFound, targetCFrame, targetSurface = findConfigAtMouseTarget(Mouse, stampData) - if not configFound then - error("RbxStamper.DoStamperMouseMove No configFound, returning") - return - end - - local numRotations = 0 -- update this according to how many rotations you need to get it to target surface - if autoAlignToFace(stampData.CurrentParts) and targetSurface ~= 1 and targetSurface ~= 4 then -- pre-rotate the flag or portrait so it's aligned correctly - if targetSurface == 3 then numRotations = 0 - gInitial90DegreeRotations + autoAlignToFace(stampData.CurrentParts) - elseif targetSurface == 0 then numRotations = 2 - gInitial90DegreeRotations + autoAlignToFace(stampData.CurrentParts) - elseif targetSurface == 5 then numRotations = 3 - gInitial90DegreeRotations + autoAlignToFace(stampData.CurrentParts) - elseif targetSurface == 2 then numRotations = 1 - gInitial90DegreeRotations + autoAlignToFace(stampData.CurrentParts) - end - end - - local ry = math.pi/2 - gInitial90DegreeRotations = gInitial90DegreeRotations + numRotations - if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then - --stampData.CurrentParts:Rotate(0, ry*numRotations, 0) - modelRotate(stampData.CurrentParts, ry*numRotations) - else - stampData.CurrentParts.CFrame = CFrame.fromEulerAnglesXYZ(0, ry*numRotations, 0) * stampData.CurrentParts.CFrame - end - - -- CODE TO CHECK FOR DRAGGING GHOST PART INTO A COLLIDING STATE - local minBB, maxBB = getBoundingBoxInWorldCoordinates(stampData.CurrentParts) - - -- need to offset by distance to be dragged - local currModelCFrame = nil - if stampData.CurrentParts:IsA("Model") then - currModelCFrame = stampData.CurrentParts:GetModelCFrame() - else - currModelCFrame = stampData.CurrentParts.CFrame - end - - minBB = minBB + targetCFrame.p - currModelCFrame.p - maxBB = maxBB + targetCFrame.p - currModelCFrame.p - - -- don't drag into terrain - if clusterPartsInRegion(minBB + insertBoundingBoxOverlapVector, maxBB - insertBoundingBoxOverlapVector) then - if lastTarget.CFrame then - if (stampData.CurrentParts:FindFirstChild("ClusterMaterial", true)) then - local theClusterMaterial = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) - if theClusterMaterial:IsA("Vector3Value") then - local stampClusterMaterial = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) - if stampClusterMaterial then - stampClusterMaterial = clusterMat - end - end - end - end - return - end - - -- if we are stamping a terrain part, make sure it goes on the grid! Otherwise preview block could be placed off grid, but stamped on grid - if isMegaClusterPart() then - local cellToStamp = game.Workspace.Terrain:WorldToCell(targetCFrame.p) - local newCFramePosition = 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() - targetCFrame = CFrame.new(newCFramePosition.X,newCFramePosition.Y,newCFramePosition.Z,R00, R01, R02, R10, R11, R12, R20, R21, R22) - end - - positionPartsAtCFrame3(targetCFrame, stampData.CurrentParts) - lastTarget.CFrame = targetCFrame -- successful positioning, so update 'dat cframe - if stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) then - local clusterMat = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) - if clusterMat:IsA("Vector3Value") then - lastTarget.TerrainOrientation = clusterMat.Value.Z - end - end - - - -- auto break joints code - if Mouse and Mouse.Target and Mouse.Target.Parent then - local modelInfo = Mouse.Target:FindFirstChild("RobloxModel") - if not modelInfo then modelInfo = Mouse.Target.Parent:FindFirstChild("RobloxModel") end - - local myModelInfo = stampData.CurrentParts:FindFirstChild("UnstampableFaces") - - --if (modelInfo and modelInfo.Parent:FindFirstChild("UnstampableFaces")) or (modelInfo and myModelInfo) then -- need better targetSurface calcs - if (true) then - local breakingFaces = "" - local myBreakingFaces = "" - if modelInfo and modelInfo.Parent:FindFirstChild("UnstampableFaces") then breakingFaces = modelInfo.Parent.UnstampableFaces.Value end - if myModelInfo then myBreakingFaces = myModelInfo.Value end - local hitFace = 0 - - if modelInfo then hitFace = modelTargetSurface(modelInfo.Parent, game.Workspace.CurrentCamera.CoordinateFrame.p, Mouse.Hit.p) end - - -- are we stamping TO an unstampable surface? - for bf in string.gmatch(breakingFaces, "[^,]+") do - if hitFace == tonumber(bf) then - -- return before we hit the JointsService code below! - unstampableSurface = true - game.JointsService:ClearJoinAfterMoveJoints() -- clear the JointsService cache - return - end - end - - -- now we have to cast the ray back in the other direction to find the surface we're stamping FROM - hitFace = modelTargetSurface(stampData.CurrentParts, Mouse.Hit.p, game.Workspace.CurrentCamera.CoordinateFrame.p) - - -- are we stamping WITH an unstampable surface? - for bf in string.gmatch(myBreakingFaces, "[^,]+") do - if hitFace == tonumber(bf) then - unstampableSurface = true - game.JointsService:ClearJoinAfterMoveJoints() -- clear the JointsService cache - return - end - end - - -- just need to match breakingFace against targetSurface using rotation supplied by modelCFrame - -- targetSurface: 1 is top, 4 is bottom, - end - end - - -- to show joints during the mouse move - unstampableSurface = false - game.JointsService:SetJoinAfterMoveInstance(stampData.CurrentParts) - - -- most common mouse inactive error occurs here, so check mouse active one more time in a pcall - if not pcall(function() - if Mouse and Mouse.Target and Mouse.Target.Parent:FindFirstChild("RobloxModel") == nil then - return - else - return - end - end) - then - error("Error: RbxStamper.DoStamperMouseMove Mouse is nil on second check") - game.JointsService:ClearJoinAfterMoveJoints() - Mouse = nil - return - end - - if Mouse and Mouse.Target and Mouse.Target.Parent:FindFirstChild("RobloxModel") == nil then - game.JointsService:SetJoinAfterMoveTarget(Mouse.Target) - else - game.JointsService:SetJoinAfterMoveTarget(nil) - end - game.JointsService:ShowPermissibleJoints() - - -- here we allow for a line of high-scalability parts - if isMegaClusterPart() and HighScalabilityLine and HighScalabilityLine.Start then - DoHighScalabilityRegionSelect() - end - end - - local function setupKeyListener(key, Mouse) - if control and control["Paused"] then return end -- don't do this if we have no stamp - - key = string.lower(key) - if key == 'r' and not autoAlignToFace(stampData.CurrentParts) then -- rotate the model - gInitial90DegreeRotations = gInitial90DegreeRotations + 1 - - -- Update orientation value if this is a fake terrain part - local clusterValues = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) - if clusterValues and clusterValues:IsA("Vector3Value") then - clusterValues.Value = Vector3.new(clusterValues.Value.X, clusterValues.Value.Y, (clusterValues.Value.Z + 1) % 4) - end - - -- Rotate the parts or all the parts in the model - local ry = math.pi/2 - if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then - --stampData.CurrentParts:Rotate(0, ry, 0) - modelRotate(stampData.CurrentParts, ry) - else - stampData.CurrentParts.CFrame = CFrame.fromEulerAnglesXYZ(0, ry, 0) * stampData.CurrentParts.CFrame - end - - -- After rotating, update the position - configFound, targetCFrame = findConfigAtMouseTarget(Mouse, stampData) - if configFound then - positionPartsAtCFrame3(targetCFrame, stampData.CurrentParts) - - -- update everything else in MouseMove - DoStamperMouseMove(Mouse) - end - elseif key == 'c' then -- try to expand our high scalability dragger dimension - if HighScalabilityLine.InternalLine and HighScalabilityLine.InternalLine.magnitude > 0 and HighScalabilityLine.Dimensions < 3 then - HighScalabilityLine.MorePoints[HighScalabilityLine.Dimensions] = HighScalabilityLine.End - HighScalabilityLine.MoreLines[HighScalabilityLine.Dimensions] = HighScalabilityLine.InternalLine - HighScalabilityLine.Dimensions = HighScalabilityLine.Dimensions + 1 - HighScalabilityLine.NewHint = true - end - end - end - - keyCon = Mouse.KeyDown:connect(function(key) -- init key connection (keeping code close to func) - setupKeyListener(key, Mouse) - end) - - local function resetHighScalabilityLine() - if HighScalabilityLine then - HighScalabilityLine.Start = nil - HighScalabilityLine.End = nil - HighScalabilityLine.InternalLine = nil - HighScalabilityLine.NewHint = true - end - end - - local function flashRedBox() - local gui = game.CoreGui - if game:FindFirstChild("Players") then - if game.Players["LocalPlayer"] then - if game.Players.LocalPlayer:FindFirstChild("PlayerGui") then - gui = game.Players.LocalPlayer.PlayerGui - end - end - end - if not stampData["ErrorBox"] then return end - - stampData.ErrorBox.Parent = gui - if stampData.CurrentParts:IsA("Tool") then - stampData.ErrorBox.Adornee = stampData.CurrentParts.Handle - else - stampData.ErrorBox.Adornee = stampData.CurrentParts - end - - delay(0,function() - for i = 1, 3 do - if stampData["ErrorBox"] then stampData.ErrorBox.Visible = true end - wait(0.13) - if stampData["ErrorBox"] then stampData.ErrorBox.Visible = false end - wait(0.13) - end - if stampData["ErrorBox"] then - stampData.ErrorBox.Adornee = nil - stampData.ErrorBox.Parent = Tool - end - end) - end - - local function DoStamperMouseDown(Mouse) - if not Mouse then - error("Error: RbxStamper.DoStamperMouseDown: Mouse is nil") - return - end - if not Mouse:IsA("Mouse") then - error("Error: RbxStamper.DoStamperMouseDown: Mouse is of type", Mouse.className,"should be of type Mouse") - return - end - if not stampData then - return - end - - if isMegaClusterPart() then - if Mouse and HighScalabilityLine then - local megaCube = stampData.CurrentParts:FindFirstChild("MegaClusterCube", true) - local terrain = game.Workspace.Terrain - if megaCube then - HighScalabilityLine.Dimensions = 1 - local tempCell = terrain:WorldToCell(megaCube.CFrame.p) - HighScalabilityLine.Start = terrain:CellCenterToWorld(tempCell.X, tempCell.Y, tempCell.Z) - return - else - HighScalabilityLine.Dimensions = 1 - local tempCell = terrain:WorldToCell(stampData.CurrentParts.CFrame.p) - HighScalabilityLine.Start = terrain:CellCenterToWorld(tempCell.X, tempCell.Y, tempCell.Z) - return - end - end - end - end - - local function loadSurfaceTypes(part, surfaces) - part.TopSurface = surfaces[1] - part.BottomSurface = surfaces[2] - part.LeftSurface = surfaces[3] - part.RightSurface = surfaces[4] - part.FrontSurface = surfaces[5] - part.BackSurface = surfaces[6] - end - - local function saveSurfaceTypes(part, myTable) - local tempTable = {} - tempTable[1] = part.TopSurface - tempTable[2] = part.BottomSurface - tempTable[3] = part.LeftSurface - tempTable[4] = part.RightSurface - tempTable[5] = part.FrontSurface - tempTable[6] = part.BackSurface - - myTable[part] = tempTable - end - - local function makeSurfaceUnjoinable(part, surface) - -- TODO: FILL OUT! - end - - local function prepareModel(model) - if not model then return nil end - - local gDesiredTrans = 0.7 - local gStaticTrans = 1 - - local clone = model:Clone() - local scripts = {} - local parts = {} - local decals = {} - - stampData = {} - stampData.DisabledScripts = {} - stampData.TransparencyTable = {} - stampData.MaterialTable = {} - stampData.CanCollideTable = {} - stampData.AnchoredTable = {} - stampData.ArchivableTable = {} - stampData.DecalTransparencyTable = {} - stampData.SurfaceTypeTable = {} - - collectParts(clone, parts, scripts, decals) - - if #parts <= 0 then return nil, "no parts found in modelToStamp" end - - for index,script in pairs(scripts) do - if not(script.Disabled) then - script.Disabled = true - stampData.DisabledScripts[#stampData.DisabledScripts + 1] = script - end - end - for index, part in pairs(parts) do - stampData.TransparencyTable[part] = part.Transparency - part.Transparency = gStaticTrans + (1 - gStaticTrans) * part.Transparency - stampData.MaterialTable[part] = part.Material - part.Material = Enum.Material.Plastic - stampData.CanCollideTable[part] = part.CanCollide - part.CanCollide = false - stampData.AnchoredTable[part] = part.Anchored - part.Anchored = true - stampData.ArchivableTable[part] = part.Archivable - part.Archivable = false - - saveSurfaceTypes(part, stampData.SurfaceTypeTable) - - local fadeInDelayTime = 0.5 - local transFadeInTime = 0.5 - delay(0,function() - wait(fadeInDelayTime) -- give it some time to be completely transparent - - local begTime = tick() - local currTime = begTime - while (currTime - begTime) < transFadeInTime and part and part:IsA("BasePart") and part.Transparency > gDesiredTrans do - local newTrans = 1 - (((currTime - begTime)/transFadeInTime) * (gStaticTrans - gDesiredTrans)) - if stampData["TransparencyTable"] and stampData.TransparencyTable[part] then - part.Transparency = newTrans + (1 - newTrans) * stampData.TransparencyTable[part] - end - wait(0.03) - currTime = tick() - end - if part and part:IsA("BasePart") then - if stampData["TransparencyTable"] and stampData.TransparencyTable[part] then - part.Transparency = gDesiredTrans + (1 - gDesiredTrans) * stampData.TransparencyTable[part] - end - end - end) - end - - for index, decal in pairs(decals) do - stampData.DecalTransparencyTable[decal] = decal.Transparency - decal.Transparency = gDesiredTrans + (1 - gDesiredTrans) * decal.Transparency - end - - -- disable all seats - setSeatEnabledStatus(clone, true) - setSeatEnabledStatus(clone, false) - - stampData.CurrentParts = clone - - -- if auto-alignable, we enforce a pre-rotation to the canonical "0-frame" - if autoAlignToFace(clone) then - stampData.CurrentParts:ResetOrientationToIdentity() - gInitial90DegreeRotations = 0 - else -- pre-rotate if necessary - local ry = gInitial90DegreeRotations * math.pi/2 - if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then - --stampData.CurrentParts:Rotate(0, ry, 0) - modelRotate(stampData.CurrentParts, ry) - else - stampData.CurrentParts.CFrame = CFrame.fromEulerAnglesXYZ(0, ry, 0) * stampData.CurrentParts.CFrame - end - end - - -- since we're cloning the old model instead of the new one, we will need to update the orientation based on the original value AND how many more - -- rotations we expect since then [either that or we need to store the just-stamped clusterMaterial.Value.Z somewhere]. This should fix the terrain rotation - -- issue (fingers crossed) [HotThoth] - - local clusterMaterial = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) - if clusterMaterial and clusterMaterial:IsA("Vector3Value") then - clusterMaterial.Value = Vector3.new(clusterMaterial.Value.X, clusterMaterial.Value.Y, (clusterMaterial.Value.Z + gInitial90DegreeRotations) % 4) - end - - -- After rotating, update the position - local configFound, targetCFrame = findConfigAtMouseTarget(Mouse, stampData) - if configFound then - stampData.CurrentParts = positionPartsAtCFrame3(targetCFrame, stampData.CurrentParts) - end - - -- to show joints during the mouse move - game.JointsService:SetJoinAfterMoveInstance(stampData.CurrentParts) - - return clone, parts - end - - local function checkTerrainBlockCollisions(cellPos, checkHighScalabilityStamp) - local cellCenterToWorld = game.Workspace.Terrain.CellCenterToWorld - local cellCenter = cellCenterToWorld(game.Workspace.Terrain, cellPos.X, cellPos.Y, cellPos.Z) - local cellBlockingParts = game.Workspace:FindPartsInRegion3(Region3.new(cellCenter - Vector3.new(2, 2, 2) + insertBoundingBoxOverlapVector, cellCenter + Vector3.new(2, 2, 2) - insertBoundingBoxOverlapVector), stampData.CurrentParts, 100) - - local skipThisCell = false - - for b = 1, #cellBlockingParts do - if isBlocker(cellBlockingParts[b]) then skipThisCell = true break end - end - - if not skipThisCell then - -- pop players up above any set cells - local alreadyPushedUp = {} - -- if no blocking model below, then see if stamping on top of a character - for b = 1, #cellBlockingParts do - if cellBlockingParts[b].Parent and - not alreadyPushedUp[cellBlockingParts[b].Parent] and - cellBlockingParts[b].Parent:FindFirstChild("Humanoid") and - cellBlockingParts[b].Parent:FindFirstChild("Humanoid"):IsA("Humanoid") then - ----------------------------------------------------------------------------------- - local blockingPersonTorso = cellBlockingParts[b].Parent:FindFirstChild("Torso") - alreadyPushedUp[cellBlockingParts[b].Parent] = true - - if blockingPersonTorso then - -- if so, let's push the person upwards so they pop on top of the stamped model/part (but only if there's space above them) - local newY = cellCenter.Y + 5 - if spaceAboveCharacter(blockingPersonTorso, newY, stampData) then - blockingPersonTorso.CFrame = blockingPersonTorso.CFrame + Vector3.new(0, newY - blockingPersonTorso.CFrame.p.Y, 0) - else - -- if no space, we just skip this one - skipThisCell = true - break - end - end - ----------------------------------------------------------------------------------- - end - end - end - - if not skipThisCell then -- if we STILL aren't skipping... then we're good to go! - local canSetCell = true - - if checkHighScalabilityStamp then -- check to see if cell is in region, if not we'll skip set - if allowedStampRegion then - 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 - canSetCell = false - elseif cellPos.X - 2 < allowedStampRegion.CFrame.p.X - allowedStampRegion.Size.X/2 then - canSetCell = false - elseif cellPos.Y + 2 > allowedStampRegion.CFrame.p.Y + allowedStampRegion.Size.Y/2 then - canSetCell = false - elseif cellPos.Y - 2 < allowedStampRegion.CFrame.p.Y - allowedStampRegion.Size.Y/2 then - canSetCell = false - 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 - end - end - end - - return canSetCell - end - return false - end - - - local function ResolveMegaClusterStamp(checkHighScalabilityStamp) - local cellSet = false - - local cluser = game.Workspace.Terrain - - local line = HighScalabilityLine.InternalLine - local cMax = game.Workspace.Terrain.MaxExtents.Max - local cMin = game.Workspace.Terrain.MaxExtents.Min - - local clusterMaterial = 1 -- default is grass - local clusterType = 0 -- default is brick - local clusterOrientation = 0 -- default is 0 rotation - - local autoWedgeClusterParts = false - if stampData.CurrentParts:FindFirstChild("AutoWedge") then autoWedgeClusterParts = true end - - if stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) then - clusterMaterial = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) - if clusterMaterial:IsA("Vector3Value") then - clusterType = clusterMaterial.Value.Y - clusterOrientation = clusterMaterial.Value.Z - clusterMaterial = clusterMaterial.Value.X - elseif clusterMaterial:IsA("IntValue") then - clusterMaterial = clusterMaterial.Value - end - end - - if HighScalabilityLine.Adorn.Parent and HighScalabilityLine.Start and ((HighScalabilityLine.Dimensions > 1) or (line and line.magnitude > 0)) then - local startCell = game.Workspace.Terrain:WorldToCell(HighScalabilityLine.Start) - local xInc = {0,0,0} - local yInc = {0,0,0} - local zInc = {0,0,0} - - local cluster = game.Workspace.Terrain - - local incrementVect = {nil, nil, nil} - local stepVect = {Vector3.new(0, 0, 0), Vector3.new(0, 0, 0), Vector3.new(0, 0, 0)} - - local worldAxes = {Vector3.new(1, 0, 0), Vector3.new(0, 1, 0), Vector3.new(0, 0, 1)} - - local lines = {} - if HighScalabilityLine.Dimensions > 1 then table.insert(lines, HighScalabilityLine.MoreLines[1]) end - if line and line.magnitude > 0 then table.insert(lines, line) end - if HighScalabilityLine.Dimensions > 2 then table.insert(lines, HighScalabilityLine.MoreLines[2]) end - - for i = 1, #lines do - lines[i] = Vector3.new(math.floor(lines[i].X+.5), math.floor(lines[i].Y+.5), math.floor(lines[i].Z+.5)) -- round to integers - - if lines[i].X > 0 then xInc[i] = 1 elseif lines[i].X < 0 then xInc[i] = -1 end - if lines[i].Y > 0 then yInc[i] = 1 elseif lines[i].Y < 0 then yInc[i] = -1 end - if lines[i].Z > 0 then zInc[i] = 1 elseif lines[i].Z < 0 then zInc[i] = -1 end - - incrementVect[i] = Vector3.new(xInc[i], yInc[i], zInc[i]) - if incrementVect[i].magnitude < .9 then incrementVect[i] = nil end - end - - - if not lines[2] then lines[2] = Vector3.new(0, 0, 0) end - if not lines[3] then lines[3] = Vector3.new(0, 0, 0) end - - local waterForceTag = stampData.CurrentParts:FindFirstChild("WaterForceTag", true) - local waterForceDirectionTag = stampData.CurrentParts:FindFirstChild("WaterForceDirectionTag", true) - - while (stepVect[3].magnitude*4 <= lines[3].magnitude) do - local outerStepVectIndex = 1 - while outerStepVectIndex < 4 do - stepVect[2] = Vector3.new(0, 0, 0) - while (stepVect[2].magnitude*4 <= lines[2].magnitude) do - local innerStepVectIndex = 1 - while innerStepVectIndex < 4 do - stepVect[1] = Vector3.new(0, 0, 0) - while (stepVect[1].magnitude*4 <= lines[1].magnitude) do - local stepVectSum = stepVect[1] + stepVect[2] + stepVect[3] - local cellPos = Vector3int16.new(startCell.X + stepVectSum.X, startCell.Y + stepVectSum.Y, startCell.Z + stepVectSum.Z) - if cellPos.X >= cMin.X and cellPos.Y >= cMin.Y and cellPos.Z >= cMin.Z and cellPos.X < cMax.X and cellPos.Y < cMax.Y and cellPos.Z < cMax.Z then - -- check if overlaps player or part - local okToStampTerrainBlock = checkTerrainBlockCollisions(cellPos, checkHighScalabilityStamp) - - if okToStampTerrainBlock then - if waterForceTag then - cluster:SetWaterCell(cellPos.X, cellPos.Y, cellPos.Z, Enum.WaterForce[waterForceTag.Value], Enum.WaterDirection[waterForceDirectionTag.Value]) - else - cluster:SetCell(cellPos.X, cellPos.Y, cellPos.Z, clusterMaterial, clusterType, clusterOrientation) - end - cellSet = true - - -- auto-wedge it? - if (autoWedgeClusterParts) then - game.Workspace.Terrain:AutowedgeCells(Region3int16.new(Vector3int16.new(cellPos.x - 1, cellPos.y - 1, cellPos.z - 1), - Vector3int16.new(cellPos.x + 1, cellPos.y + 1, cellPos.z + 1))) - end - end - end - stepVect[1] = stepVect[1] + incrementVect[1] - end - if incrementVect[2] then - while innerStepVectIndex < 4 and worldAxes[innerStepVectIndex]:Dot(incrementVect[2]) == 0 do - innerStepVectIndex = innerStepVectIndex + 1 - end - if innerStepVectIndex < 4 then - stepVect[2] = stepVect[2] + worldAxes[innerStepVectIndex] * worldAxes[innerStepVectIndex]:Dot(incrementVect[2]) - end - innerStepVectIndex = innerStepVectIndex + 1 - else - stepVect[2] = Vector3.new(1, 0, 0) - innerStepVectIndex = 4 -- skip all remaining loops - end - if (stepVect[2].magnitude*4 > lines[2].magnitude) then innerStepVectIndex = 4 end - end - end - if incrementVect[3] then - while outerStepVectIndex < 4 and worldAxes[outerStepVectIndex]:Dot(incrementVect[3]) == 0 do - outerStepVectIndex = outerStepVectIndex + 1 - end - if outerStepVectIndex < 4 then - stepVect[3] = stepVect[3] + worldAxes[outerStepVectIndex] * worldAxes[outerStepVectIndex]:Dot(incrementVect[3]) - end - outerStepVectIndex = outerStepVectIndex + 1 - else -- skip all remaining loops - stepVect[3] = Vector3.new(1, 0, 0) outerStepVectIndex = 4 - end - if (stepVect[3].magnitude*4 > lines[3].magnitude) then outerStepVectIndex = 4 end - end - end - end - - -- and also get rid of any HighScalabilityLine stuff if it's there - HighScalabilityLine.Start = nil - HighScalabilityLine.Adorn.Parent = nil - - -- Mark for undo. - if cellSet then - stampData.CurrentParts.Parent = nil - pcall(function() game:GetService("ChangeHistoryService"): SetWaypoint("StamperMulti") end) - end - - return cellSet - end - - local function DoStamperMouseUp(Mouse) - if not Mouse then - error("Error: RbxStamper.DoStamperMouseUp: Mouse is nil") - return false - end - if not Mouse:IsA("Mouse") then - error("Error: RbxStamper.DoStamperMouseUp: Mouse is of type", Mouse.className,"should be of type Mouse") - return false - end - - if not stampData.Dragger then - error("Error: RbxStamper.DoStamperMouseUp: stampData.Dragger is nil") - return false - end - - if not HighScalabilityLine then - return false - end - - local checkHighScalabilityStamp = nil - if stampInModel then - local canStamp = nil - local isHSLPart = isMegaClusterPart() - - if isHSLPart and - HighScalabilityLine and - HighScalabilityLine.Start and - HighScalabilityLine.InternalLine and - HighScalabilityLine.InternalLine.magnitude > 0 then -- we have an HSL line, test later - canStamp = true - checkHighScalabilityStamp = true - else - canStamp, checkHighScalabilityStamp = t.CanEditRegion(stampData.CurrentParts, allowedStampRegion) - end - - if not canStamp then - if stampFailedFunc then - stampFailedFunc() - end - return false - end - end - - -- if unstampable face, then don't let us stamp there! - if unstampableSurface then - flashRedBox() - return false - end - - -- recheck if we can stamp, as we just moved part - canStamp, checkHighScalabilityStamp = t.CanEditRegion(stampData.CurrentParts, allowedStampRegion) - if not canStamp then - if stampFailedFunc then - stampFailedFunc() - end - return false - end - - -- Prevent part from being stamped on top of a player - - local minBB, maxBB = getBoundingBoxInWorldCoordinates(stampData.CurrentParts) - - -- HotThoth's note: Now that above CurrentParts positioning has been commented out, to be truly correct, we would need to use the - -- value of configFound from the previous onStamperMouseMove call which moved the CurrentParts - -- Shouldn't this be true when lastTargetCFrame has been set and false otherwise? - configFound, targetCFrame = findConfigAtMouseTarget(Mouse, stampData) - - if configFound and not HighScalabilityLine.Adorn.Parent then - if clusterPartsInRegion(minBB + insertBoundingBoxOverlapVector, maxBB - insertBoundingBoxOverlapVector) then - flashRedBox() - return false - end - - local blockingParts = game.Workspace:FindPartsInRegion3(Region3.new(minBB + insertBoundingBoxOverlapVector, - maxBB - insertBoundingBoxOverlapVector), - stampData.CurrentParts, - 100) - - - for b = 1, #blockingParts do - if isBlocker(blockingParts[b]) then - flashRedBox() - return false - end - end - - local alreadyPushedUp = {} - -- if no blocking model below, then see if stamping on top of a character - for b = 1, #blockingParts do - if blockingParts[b].Parent and - not alreadyPushedUp[blockingParts[b].Parent] and - blockingParts[b].Parent:FindFirstChild("Humanoid") and - blockingParts[b].Parent:FindFirstChild("Humanoid"):IsA("Humanoid") then - --------------------------------------------------------------------------- - local blockingPersonTorso = blockingParts[b].Parent:FindFirstChild("Torso") - alreadyPushedUp[blockingParts[b].Parent] = true - - if blockingPersonTorso then - -- if so, let's push the person upwards so they pop on top of the stamped model/part (but only if there's space above them) - local newY = maxBB.Y + 3 - if spaceAboveCharacter(blockingPersonTorso, newY, stampData) then - blockingPersonTorso.CFrame = blockingPersonTorso.CFrame + Vector3.new(0, newY - blockingPersonTorso.CFrame.p.Y, 0) - else - -- if no space, we just error - flashRedBox() - return false - end - end - --------------------------------------------------------------------------- - end - end - - elseif (not configFound) and not (HighScalabilityLine.Start and HighScalabilityLine.Adorn.Parent) then -- if no config then only stamp if it's a real HSL! - resetHighScalabilityLine() - return false - end - - -- something will be stamped! so set the "StampedSomething" toggle to true - if game:FindFirstChild("Players") then - if game.Players["LocalPlayer"] then - if game.Players.LocalPlayer["Character"] then - local localChar = game.Players.LocalPlayer.Character - local stampTracker = localChar:FindFirstChild("StampTracker") - if stampTracker and not stampTracker.Value then - stampTracker.Value = true - end - end - end - end - - -- if we drew a line of mega parts, stamp them out - if HighScalabilityLine.Start and HighScalabilityLine.Adorn.Parent and isMegaClusterPart() then - if ResolveMegaClusterStamp(checkHighScalabilityStamp) or checkHighScalabilityStamp then - -- kill the ghost part - stampData.CurrentParts.Parent = nil - return true - end - end - - -- not High-Scalability-Line-Based, so behave normally [and get rid of any HSL stuff] - HighScalabilityLine.Start = nil - HighScalabilityLine.Adorn.Parent = nil - - local cluster = game.Workspace.Terrain - - -- if target point is in cluster, just use cluster:SetCell - if isMegaClusterPart() then - -- if targetCFrame is inside cluster, just set that cell to 1 and return - --local cellPos = cluster:WorldToCell(targetCFrame.p) - - local cellPos - if stampData.CurrentParts:IsA("Model") then cellPos = cluster:WorldToCell(stampData.CurrentParts:GetModelCFrame().p) - else cellPos = cluster:WorldToCell(stampData.CurrentParts.CFrame.p) end - - local cMax = game.Workspace.Terrain.MaxExtents.Max - local cMin = game.Workspace.Terrain.MaxExtents.Min - - if checkTerrainBlockCollisions(cellPos, false) then - - local clusterValues = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) - local waterForceTag = stampData.CurrentParts:FindFirstChild("WaterForceTag", true) - local waterForceDirectionTag = stampData.CurrentParts:FindFirstChild("WaterForceDirectionTag", true) - - if cellPos.X >= cMin.X and cellPos.Y >= cMin.Y and cellPos.Z >= cMin.Z and cellPos.X < cMax.X and cellPos.Y < cMax.Y and cellPos.Z < cMax.Z then - - if waterForceTag then - cluster:SetWaterCell(cellPos.X, cellPos.Y, cellPos.Z, Enum.WaterForce[waterForceTag.Value], Enum.WaterDirection[waterForceDirectionTag.Value]) - elseif not clusterValues then - cluster:SetCell(cellPos.X, cellPos.Y, cellPos.Z, cellInfo.Material, cellInfo.clusterType, gInitial90DegreeRotations % 4) - elseif clusterValues:IsA("Vector3Value") then - cluster:SetCell(cellPos.X, cellPos.Y, cellPos.Z, clusterValues.Value.X, clusterValues.Value.Y, clusterValues.Value.Z) - else - cluster:SetCell(cellPos.X, cellPos.Y, cellPos.Z, clusterValues.Value, 0, 0) - end - - local autoWedgeClusterParts = false - if stampData.CurrentParts:FindFirstChild("AutoWedge") then autoWedgeClusterParts = true end - - -- auto-wedge it - if (autoWedgeClusterParts) then - game.Workspace.Terrain:AutowedgeCells( - Region3int16.new( - Vector3int16.new(cellPos.x - 1, cellPos.y - 1, cellPos.z - 1), - Vector3int16.new(cellPos.x + 1, cellPos.y + 1, cellPos.z + 1) - ) - ) - end - - -- kill the ghost part - stampData.CurrentParts.Parent = nil - - -- Mark for undo. It has to happen here or the selection display will come back also. - pcall(function() game:GetService("ChangeHistoryService"):SetWaypoint("StamperSingle") end) - return true - end - else - -- you tried to stamp a HSL-single part where one does not belong! - flashRedBox() - return false - end - end - - local function getPlayer() - if game:FindFirstChild("Players") then - if game.Players["LocalPlayer"] then - return game.Players.LocalPlayer - end - end - return nil - end - - - -- Post process: after positioning the part or model, restore transparency, material, anchored and collide states and create joints - if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then - if stampData.CurrentParts:IsA("Model") then - -- Tyler's magical hack-code for allowing/preserving clones of both Surface and Manual Welds... just don't ask X< - local manualWeldTable = {} - local manualWeldParentTable = {} - saveTheWelds(stampData.CurrentParts, manualWeldTable, manualWeldParentTable) - stampData.CurrentParts:BreakJoints() - stampData.CurrentParts:MakeJoints() - restoreTheWelds(manualWeldTable, manualWeldParentTable) - end - - -- if it's a model, we also want to fill in the playerID and playerName tags, if it has those (e.g. for the friend-only door) - playerIdTag = stampData.CurrentParts:FindFirstChild("PlayerIdTag") - playerNameTag = stampData.CurrentParts:FindFirstChild("PlayerNameTag") - if playerIdTag ~= nil then - tempPlayerValue = getPlayer() - if tempPlayerValue ~= nil then playerIdTag.Value = tempPlayerValue.userId end - end - if playerNameTag ~= nil then - if game:FindFirstChild("Players") and game.Players["LocalPlayer"] then - tempPlayerValue = game.Players.LocalPlayer - if tempPlayerValue ~= nil then playerNameTag.Value = tempPlayerValue.Name end - end - end - -- ...and tag all inserted models for subsequent origin identification - -- if no RobloxModel tag already exists, then add it. - if stampData.CurrentParts:FindFirstChild("RobloxModel") == nil then - local stringTag = Instance.new("BoolValue", stampData.CurrentParts) - stringTag.Name = "RobloxModel" - - if stampData.CurrentParts:FindFirstChild("RobloxStamper") == nil then - local stringTag2 = Instance.new("BoolValue", stampData.CurrentParts) - stringTag2.Name = "RobloxStamper" - end - end - - else - stampData.CurrentParts:BreakJoints() - if stampData.CurrentParts:FindFirstChild("RobloxStamper") == nil then - local stringTag2 = Instance.new("BoolValue", stampData.CurrentParts) - stringTag2.Name = "RobloxStamper" - end - end - - -- make sure all the joints are activated before restoring anchor states - if not createJoints then game.JointsService:CreateJoinAfterMoveJoints() end - - -- Restore the original properties for all parts being stamped - for part, transparency in pairs(stampData.TransparencyTable) do - part.Transparency = transparency - end - for part, archivable in pairs(stampData.ArchivableTable) do - part.Archivable = archivable - end - for part, material in pairs(stampData.MaterialTable) do - part.Material = material - end - for part, collide in pairs(stampData.CanCollideTable) do - part.CanCollide = collide - end - for part, anchored in pairs(stampData.AnchoredTable) do - part.Anchored = anchored - end - for decal, transparency in pairs(stampData.DecalTransparencyTable) do - decal.Transparency = transparency - end - - for part, surfaces in pairs(stampData.SurfaceTypeTable) do - loadSurfaceTypes(part, surfaces) - end - - if isMegaClusterPart() then - stampData.CurrentParts.Transparency = 0 - end - - -- re-enable all seats - setSeatEnabledStatus(stampData.CurrentParts, true) - - stampData.TransparencyTable = nil - stampData.ArchivableTable = nil - stampData.MaterialTable = nil - stampData.CanCollideTable = nil - stampData.AnchoredTable = nil - stampData.SurfaceTypeTable = nil - - -- ...and tag all inserted models for subsequent origin identification - -- if no RobloxModel tag already exists, then add it. - if stampData.CurrentParts:FindFirstChild("RobloxModel") == nil then - local stringTag = Instance.new("BoolValue", stampData.CurrentParts) - stringTag.Name = "RobloxModel" - end - - -- and make sure we don't delete it, now that it's not a ghost part - if ghostRemovalScript then ghostRemovalScript.Parent = nil end - - --Re-enable the scripts - for index,script in pairs(stampData.DisabledScripts) do - script.Disabled = false - end - - --Now that they are all marked enabled, reinsert them into the world so they start running - for index,script in pairs(stampData.DisabledScripts) do - local oldParent = script.Parent - script.Parent = nil - script:Clone().Parent = oldParent - end - - -- clear out more data - stampData.DisabledScripts = nil - stampData.Dragger = nil - stampData.CurrentParts = nil - - pcall(function() game:GetService("ChangeHistoryService"): SetWaypoint("StampedObject") end) - return true - end - - local function pauseStamper() - for i = 1, #mouseCons do -- stop the mouse from doing anything - mouseCons[i]:disconnect() - mouseCons[i] = nil - end - mouseCons = {} - - if stampData and stampData.CurrentParts then -- remove our ghost part - stampData.CurrentParts.Parent = nil - stampData.CurrentParts:Remove() - end - - resetHighScalabilityLine() - - game.JointsService:ClearJoinAfterMoveJoints() - end - - - local function prepareUnjoinableSurfaces(modelCFrame, parts, whichSurface) - local AXIS_VECTORS = {Vector3.new(1, 0, 0), Vector3.new(0, 1, 0), Vector3.new(0, 0, 1)} -- maybe last one is negative? TODO: check this! - local isPositive = 1 - if whichSurface < 0 then isPositive = isPositive * -1 whichSurface = whichSurface*-1 end - local surfaceNormal = isPositive * modelCFrame:vectorToWorldSpace(AXIS_VECTORS[whichSurface]) - - for i = 1, #parts do - local currPart = parts[i] - - -- now just need to find which surface of currPart most closely match surfaceNormal and then set that to Unjoinable - local surfaceNormalInLocalCoords = currPart.CFrame:vectorToObjectSpace(surfaceNormal) - if math.abs(surfaceNormalInLocalCoords.X) > math.abs(surfaceNormalInLocalCoords.Y) then - if math.abs(surfaceNormalInLocalCoords.X) > math.abs(surfaceNormalInLocalCoords.Z) then - if surfaceNormalInLocalCoords.X > 0 then currPart.RightSurface = "Unjoinable" else currPart.LeftSurface = "Unjoinable" end - else - if surfaceNormalInLocalCoords.Z > 0 then currPart.BackSurface = "Unjoinable" else currPart.FrontSurface = "Unjoinable" end - end - else - if math.abs(surfaceNormalInLocalCoords.Y) > math.abs(surfaceNormalInLocalCoords.Z) then - if surfaceNormalInLocalCoords.Y > 0 then currPart.TopSurface = "Unjoinable" else currPart.BottomSurface = "Unjoinable" end - else - if surfaceNormalInLocalCoords.Z > 0 then currPart.BackSurface = "Unjoinable" else currPart.FrontSurface = "Unjoinable" end - end - end - end - end - - local function resumeStamper() - clone, parts = prepareModel(modelToStamp) - - if not clone or not parts then - return - end - - -- if we have unjoinable faces, then we want to change those surfaces to be Unjoinable - local unjoinableTag = clone:FindFirstChild("UnjoinableFaces", true) - if unjoinableTag then - for unjoinableSurface in string.gmatch(unjoinableTag.Value, "[^,]*") do - if tonumber(unjoinableSurface) then - if clone:IsA("Model") then - prepareUnjoinableSurfaces(clone:GetModelCFrame(), parts, tonumber(unjoinableSurface)) - else - prepareUnjoinableSurfaces(clone.CFrame, parts, tonumber(unjoinableSurface)) - end - end - end - end - - stampData.ErrorBox = errorBox - if stampInModel then - clone.Parent = stampInModel - else - clone.Parent = game.Workspace - end - - if clone:FindFirstChild("ClusterMaterial", true) then -- extract all info from vector - clusterMaterial = clone:FindFirstChild("ClusterMaterial", true) - if (clusterMaterial:IsA("Vector3Value")) then - cellInfo.Material = clusterMaterial.Value.X - cellInfo.clusterType = clusterMaterial.Value.Y - cellInfo.clusterOrientation = clusterMaterial.Value.Z - elseif clusterMaterial:IsA("IntValue") then - cellInfo.Material = clusterMaterial.Value - end - end - - pcall(function() mouseTarget = Mouse.Target end) - - if mouseTarget and mouseTarget.Parent:FindFirstChild("RobloxModel") == nil then - game.JointsService:SetJoinAfterMoveTarget(mouseTarget) - else - game.JointsService:SetJoinAfterMoveTarget(nil) - end - game.JointsService:ShowPermissibleJoints() - - for index, object in pairs(stampData.DisabledScripts) do - if object.Name == "GhostRemovalScript" then - object.Parent = stampData.CurrentParts - end - end - - stampData.Dragger = Instance.new("Dragger") - - --Begin a movement by faking a MouseDown signal - stampData.Dragger:MouseDown(parts[1], Vector3.new(0,0,0), parts) - stampData.Dragger:MouseUp() - - DoStamperMouseMove(Mouse) - - table.insert(mouseCons,Mouse.Move:connect(function() - if movingLock or stampUpLock then return end - movingLock = true - DoStamperMouseMove(Mouse) - movingLock = false - end)) - - table.insert(mouseCons,Mouse.Button1Down:connect(function() - DoStamperMouseDown(Mouse) - end)) - - table.insert(mouseCons,Mouse.Button1Up:connect(function() - stampUpLock = true - while movingLock do wait() end - stamped.Value = DoStamperMouseUp(Mouse) - resetHighScalabilityLine() - stampUpLock = false - end)) - - stamped.Value = false - end - - local function resetStamperState(newModelToStamp) - - -- if we have a new model, swap it out - if newModelToStamp then - if not newModelToStamp:IsA("Model") and not newModelToStamp:IsA("BasePart") then - error("resetStamperState: newModelToStamp (first arg) is not nil, but not a model or part!") - end - modelToStamp = newModelToStamp - end - - -- first clear our state - pauseStamper() - -- now lets load in the new model - resumeStamper() - - end - - -- load the model initially - resetStamperState() - - - -- setup the control table we pass back to the user - control.Stamped = stamped -- BoolValue that fires when user stamps - control.Paused = false - - control.LoadNewModel = function(newStampModel) -- allows us to specify a new stamper model to be used with this stamper - if newStampModel and not newStampModel:IsA("Model") and not newStampModel:IsA("BasePart") then - error("Control.LoadNewModel: newStampModel (first arg) is not a Model or Part!") - return nil - 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 - resetStamperState() - end - - control.Pause = function() -- temporarily stops stamping, use resume to start up again - if not control.Paused then - pauseStamper() - control.Paused = true - else - print("RbxStamper Warning: Tried to call Control.Pause() when already paused") - end - end - - control.Resume = function() -- resumes stamping, if currently paused - if control.Paused then - resumeStamper() - control.Paused = false - else - print("RbxStamper Warning: Tried to call Control.Resume() without Pausing First") - end - end - - control.ResetRotation = function() -- resets the model rotation so new models are at default orientation - -- gInitial90DegreeRotations = 0 - -- Note: This function will not always work quite the way we want it to; we will have to build this out further so it works with - -- High-Scalability and with the new model orientation setting methods (model:ResetOrientationToIdentity()) [HotThoth] - end - - control.Destroy = function() -- Stops current Stamp operation and destroys control construct - for i = 1, #mouseCons do - mouseCons[i]:disconnect() - mouseCons[i] = nil - end - - if keyCon then - keyCon:disconnect() - end - - game.JointsService:ClearJoinAfterMoveJoints() - - if adorn then adorn:Destroy() end - if adornPart then adornPart:Destroy() end - if errorBox then errorBox:Destroy() end - if stampData then - if stampData["Dragger"] then - stampData.Dragger:Destroy() - end - if stampData.CurrentParts then - stampData.CurrentParts:Destroy() - end - end - if control and control["Stamped"] then - control.Stamped:Destroy() - end - control = nil - end - - return control -end - -t.Help = - function(funcNameOrFunc) - --input argument can be a string or a function. Should return a description (of arguments and expected side effects) - if funcNameOrFunc == "GetStampModel" or funcNameOrFunc == t.GetStampModel then - return "Function GetStampModel. Arguments: assetId, useAssetVersionId. assetId is the asset to load in, define useAssetVersionId as true if assetId is a version id instead of a relative assetId. Side effect: returns a model of the assetId, or a string with error message if something fails" - end - if funcNameOrFunc == "SetupStamperDragger" or funcNameOrFunc == t.SetupStamperDragger then - return "Function SetupStamperDragger. Side Effect: Creates 4x4 stamping mechanism for building out parts quickly. Arguments: ModelToStamp, Mouse, LegalStampCheckFunction. ModelToStamp should be a Model or Part, preferrably loaded from RbxStamper.GetStampModel and should have extents that are multiples of 4. Mouse should be a mouse object (obtained from things such as Tool.OnEquipped), used to drag parts around 'stamp' them out. LegalStampCheckFunction is optional, used as a callback with a table argument (table is full of instances about to be stamped). Function should return either true or false, false stopping the stamp action." - end - end - -return t diff --git a/maintenance/asset/200 b/maintenance/asset/200 deleted file mode 100644 index 1c2793c..0000000 --- a/maintenance/asset/200 +++ /dev/null @@ -1,311 +0,0 @@ - - null - nil - - - RBX1 - 0 - - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 1 - - Workspace - null - - - - null - 0 - - 160.611526 - 38.1404114 - 218.11734 - 0.964996576 - -0.1041582 - 0.240692288 - 7.4505806e-009 - 0.917752862 - 0.397152185 - -0.262262672 - -0.383250505 - 0.885628283 - - 70 - - 160.130142 - 37.3461075 - 216.346085 - 1 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 1 - - Camera - - - - - true - -0.5 - 0.5 - 0 - 0 - -0.5 - 0.5 - 4 - 0 - 194 - - -2 - 126 - -2 - 1 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 1 - - true - - 0.5 - 0.300000012 - -0.5 - 0.5 - 0 - 0 - -0.5 - 0.5 - 0 - 0 - true - 256 - Terrain - 0 - -0.5 - 0.5 - 0 - 0 - - 0 - 0 - 0 - - -0.5 - 0.5 - 3 - 0 - 0 - - 0 - 0 - 0 - - - 2044 - 252 - 2044 - - - - - - false - -0.5 - 0.5 - 0 - 0 - -0.5 - 0.5 - 4 - 0 - 194 - - 0 - 0.600000024 - 0 - 1 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 1 - - true - 0.5 - 0.300000012 - -0.5 - 0.5 - 0 - 0 - -0.5 - 0.5 - 0 - 0 - false - 256 - Baseplate - 0 - -0.5 - 0.5 - 0 - 0 - - 0 - 0 - 0 - - -0.5 - 0.5 - 3 - 0 - 0 - - 0 - 0 - 0 - - 1 - 1 - - 512 - 1.20000005 - 512 - - - - - - - StarterPack - - - - - StarterGui - true - - - - - 0 - 10 - 1 - Soundscape - 1 - - - - - CollectionService - - - - - PhysicsService - - - - - BadgeService - - - - - Geometry - - - - - RenderHooksService - - - - - SocialService - - - - - GamePassService - - - - - 1000 - Debris - - - - - Instance - - - - - Instance - - - - - CookiesService - - - - - Teleport Service - - - - - true - Players - - - - - Selection - - - - - 4286611584 - 1 - 4278190080 - 4278190080 - 4290822336 - 100000 - 0 - 41.7332993 - Lighting - 4289967032 - 14:00:00 - - - - - ChangeHistoryService - - - \ No newline at end of file diff --git a/maintenance/asset/201 b/maintenance/asset/201 deleted file mode 100644 index 7bdcdc0..0000000 --- a/maintenance/asset/201 +++ /dev/null @@ -1,242 +0,0 @@ - - null - nil - - - RBX1 - 0 - - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 1 - - Workspace - null - - - - null - 0 - - -1272.96326 - 58.6673355 - 795.372803 - 0.529889166 - 0.033121448 - -0.847419858 - 1.86264537e-009 - 0.999237061 - 0.0390552245 - 0.848066986 - -0.0206949431 - 0.529484808 - - 70 - - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 1 - - Camera - - - - - true - -0.5 - 0.5 - 0 - 0 - -0.5 - 0.5 - 4 - 0 - 194 - - -2 - 126 - -2 - 1 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 1 - - true - �ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿ�(ÿ(�ÿ�ÿ(��ÿà( �ÿà( �ÿà( �ÿà( �ÿà( �ÿà(ÿ( ÿà ÿà ÿà ÿà ÿà ÿàÿ( (ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@��(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(ÿ(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�`(!�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(!�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(!�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(!�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(!�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(ÿ(!!!!!!ÿ(!(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@�(ÿ@�ÿ@� - 0.5 - 0.300000012 - -0.5 - 0.5 - 0 - 0 - -0.5 - 0.5 - 0 - 0 - true - 256 - Terrain - 0 - -0.5 - 0.5 - 0 - 0 - - 0 - 0 - 0 - - -0.5 - 0.5 - 3 - 0 - 0 - - 0 - 0 - 0 - - - 2044 - 252 - 2044 - - - - - - - StarterPack - - - - - StarterGui - true - - - - - 0 - 10 - 1 - Soundscape - 1 - - - - - CollectionService - - - - - PhysicsService - - - - - BadgeService - - - - - Geometry - - - - - RenderHooksService - - - - - SocialService - - - - - GamePassService - - - - - 1000 - Debris - - - - - Instance - - - - - Instance - - - - - CookiesService - - - - - Teleport Service - - - - - true - Players - - - - - Selection - - - - - 4286611584 - 1 - 4278190080 - 4278190080 - 4290822336 - 100000 - 0 - 41.7332993 - Lighting - 4289967032 - 14:00:00 - - - - - ChangeHistoryService - - - \ No newline at end of file diff --git a/maintenance/asset/2409156 b/maintenance/asset/2409156 deleted file mode 100644 index 5ff576e..0000000 --- a/maintenance/asset/2409156 +++ /dev/null @@ -1 +0,0 @@ -NameMy ModelsCategoryId-151054632DescriptionA set of my models.AssetSetId-151054632CreatorNamehappyhomemanImageAssetId0SetTypeprivate
NameMy DecalsCategoryId-151054631DescriptionA set of my decals.AssetSetId-151054631CreatorNamehappyhomemanImageAssetId21002577SetTypeprivate
NameExperimentalCategoryId462226DescriptionAssetSetId462226CreatorNamehappyhomemanImageAssetId65821324SetTypeuser
NameHigh ScalabilityCategoryId433603DescriptionAssetSetId433603CreatorNamehappyhomemanImageAssetId63590456SetTypeuser
NameVehiclesCategoryId383879DescriptionAssetSetId383879CreatorNamehappyhomemanImageAssetId59188178SetTypeuser
NameGearCategoryId383878DescriptionAssetSetId383878CreatorNamehappyhomemanImageAssetId59188142SetTypeuser
NameGameplayCategoryId383875DescriptionAssetSetId383875CreatorNamehappyhomemanImageAssetId59188080SetTypeuser
\ No newline at end of file diff --git a/maintenance/asset/2409157 b/maintenance/asset/2409157 deleted file mode 100644 index 5ff576e..0000000 --- a/maintenance/asset/2409157 +++ /dev/null @@ -1 +0,0 @@ -NameMy ModelsCategoryId-151054632DescriptionA set of my models.AssetSetId-151054632CreatorNamehappyhomemanImageAssetId0SetTypeprivate
NameMy DecalsCategoryId-151054631DescriptionA set of my decals.AssetSetId-151054631CreatorNamehappyhomemanImageAssetId21002577SetTypeprivate
NameExperimentalCategoryId462226DescriptionAssetSetId462226CreatorNamehappyhomemanImageAssetId65821324SetTypeuser
NameHigh ScalabilityCategoryId433603DescriptionAssetSetId433603CreatorNamehappyhomemanImageAssetId63590456SetTypeuser
NameVehiclesCategoryId383879DescriptionAssetSetId383879CreatorNamehappyhomemanImageAssetId59188178SetTypeuser
NameGearCategoryId383878DescriptionAssetSetId383878CreatorNamehappyhomemanImageAssetId59188142SetTypeuser
NameGameplayCategoryId383875DescriptionAssetSetId383875CreatorNamehappyhomemanImageAssetId59188080SetTypeuser
\ No newline at end of file diff --git a/maintenance/asset/3 b/maintenance/asset/3 deleted file mode 100644 index 29e36be..0000000 --- a/maintenance/asset/3 +++ /dev/null @@ -1 +0,0 @@ -%3% diff --git a/maintenance/asset/300 b/maintenance/asset/300 deleted file mode 100644 index b9a4129..0000000 --- a/maintenance/asset/300 +++ /dev/null @@ -1,140 +0,0 @@ - - null - nil - - - - 0 - 0.0900000036 - 0.180000007 - 1 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 1 - - ARCHBLOXVisor - - - - false - -0.5 - 0.5 - 0 - 0 - -0.5 - 0.5 - 0 - 0 - 194 - - 49.0106659 - 0.590593636 - 27.173811 - 0.990246177 - -6.40412909e-005 - -0.139328629 - 5.6671106e-005 - 1 - -5.68651376e-005 - 0.139328644 - 4.84145821e-005 - 0.990246177 - - true - - false - - 0.5 - 0.300000012 - -0.5 - 0.5 - 0 - 0 - -0.5 - 0.5 - 0 - 0 - true - 256 - Handle - 0 - -0.5 - 0.5 - 0 - 0 - - 0 - 0 - 0 - - -0.5 - 0.5 - 0 - 0 - 0 - - 0 - 0 - 0 - - 2 - 1 - - 1 - 0.400000006 - 1 - - - - - 2 - 2 - http://www.jarfeh.xyz/asset/?id=302 - 5 - Mesh - - 0 - 0 - 0 - - - 1.01999998 - 1.01999998 - 1.01999998 - - http://www.jarfeh.xyz/asset/?id=301 - - 1 - 1 - 1 - - - - - - - 8.65838956e-009 - 0.190000057 - 0.179727763 - 1 - 7.87137555e-009 - -3.26223034e-024 - -7.87137555e-009 - 1 - -4.1444221e-016 - 0 - 4.1444221e-016 - 1 - - HatAttachment - false - - - - - \ No newline at end of file diff --git a/maintenance/asset/301 b/maintenance/asset/301 deleted file mode 100644 index 86be59833cd00438278db3690d033bb67563e219..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49236 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 RGX(e}Ev_I|DPkD#e*vf7O4k4Y diff --git a/maintenance/asset/302 b/maintenance/asset/302 deleted file mode 100644 index b7ee9f1..0000000 --- a/maintenance/asset/302 +++ /dev/null @@ -1,3 +0,0 @@ -version 1.00 -140 -[-1.16827,-0.222815,0.838872][-0.889406,-0.022847,0.456547][0.914968,0.669096,0][-1.265,0.244922,0.375417][-0.755994,0.651503,0.0633717][0.826912,0.954345,0][-1.265,-0.198513,0.353227][-0.999957,0.00705972,-0.00604897][0.827077,0.669095,0][-1.16827,0.202463,0.860155][-0.667524,0.629777,0.397232][0.914968,0.954612,0][-1.265,0.244922,0.375417][-0.755994,0.651503,0.0633717][0.826912,0.954345,0][-1.16827,-0.222815,0.838872][-0.889406,-0.022847,0.456547][0.914968,0.669096,0][-0.835923,-0.240536,1.19293][-0.729535,-0.0341841,0.683089][0.994891,0.669096,0][-1.16827,0.202463,0.860155][-0.667524,0.629777,0.397232][0.914968,0.954612,0][-1.16827,-0.222815,0.838872][-0.889406,-0.022847,0.456547][0.914968,0.669096,0][-0.835923,0.166824,1.21332][-0.722543,0.0736519,0.687391][0.997126,0.98377,0][-1.16827,0.202463,0.860155][-0.667524,0.629777,0.397232][0.914968,0.954612,0][-0.835923,-0.240536,1.19293][-0.729535,-0.0341841,0.683089][0.994891,0.669096,0][-0.480607,-0.139844,-0.819226][-0.375961,0.191381,-0.906657][0.581744,0.669094,0][-0.00231893,0.539453,-0.778446][0,0.764754,-0.644322][0.49974,0.953708,0][-0.00231891,-0.135008,-0.915828][1.32402e-007,0.199593,-0.979879][0.49974,0.669094,0][-0.480608,0.507211,-0.68017][-0.327575,0.758916,-0.562798][0.581744,0.953763,0][-0.00231893,0.539453,-0.778446][0,0.764754,-0.644322][0.49974,0.953708,0][-0.480607,-0.139844,-0.819226][-0.375961,0.191381,-0.906657][0.581744,0.669094,0][-0.892834,-0.153606,-0.54413][-0.691817,0.147639,-0.706818][0.662171,0.669094,0][-0.480608,0.507211,-0.68017][-0.327575,0.758916,-0.562798][0.581744,0.953763,0][-0.480607,-0.139844,-0.819226][-0.375961,0.191381,-0.906657][0.581744,0.669094,0][-0.892834,0.415725,-0.427265][-0.570468,0.720001,-0.395177][0.662171,0.953902,0][-0.480608,0.507211,-0.68017][-0.327575,0.758916,-0.562798][0.581744,0.953763,0][-0.892834,-0.153606,-0.54413][-0.691817,0.147639,-0.706818][0.662171,0.669094,0][-1.16827,-0.174209,-0.13242][-0.915255,0.0748559,-0.395861][0.740664,0.669095,0][-0.892834,0.415725,-0.427265][-0.570468,0.720001,-0.395177][0.662171,0.953902,0][-0.892834,-0.153606,-0.54413][-0.691817,0.147639,-0.706818][0.662171,0.669094,0][-1.16827,0.312561,-0.0461932][-0.713027,0.678937,-0.175034][0.740664,0.954112,0][-0.892834,0.415725,-0.427265][-0.570468,0.720001,-0.395177][0.662171,0.953902,0][-1.16827,-0.174209,-0.13242][-0.915255,0.0748559,-0.395861][0.740664,0.669095,0][-1.265,-0.198513,0.353227][-0.999957,0.00705972,-0.00604897][0.827077,0.669095,0][-1.16827,0.312561,-0.0461932][-0.713027,0.678937,-0.175034][0.740664,0.954112,0][-1.16827,-0.174209,-0.13242][-0.915255,0.0748559,-0.395861][0.740664,0.669095,0][-1.265,0.244922,0.375417][-0.755994,0.651503,0.0633717][0.826912,0.954345,0][-1.16827,0.312561,-0.0461932][-0.713027,0.678937,-0.175034][0.740664,0.954112,0][-1.265,-0.198513,0.353227][-0.999957,0.00705972,-0.00604897][0.827077,0.669095,0][-0.00231882,-0.140126,-1.4768][0,0.975373,-0.220561][0.247364,0.00758553,0][-0.478721,-0.0197334,-0.766954][-0.148815,0.964585,-0.217786][0.348543,0.158344,0][-0.00231891,0.00904279,-0.881366][0,0.970023,-0.243013][0.247364,0.134044,0][-0.478721,-0.0197334,-0.766954][-0.148815,0.964585,-0.217786][0.348543,0.158344,0][-0.00231882,-0.140126,-1.4768][0,0.975373,-0.220561][0.247364,0.00758553,0][-0.464728,-0.167507,-1.46919][-0.125935,0.970269,-0.206685][0.345571,0.00920022,0][-1.03628,-0.227365,-1.05844][-0.327162,0.917302,-0.226984][0.466959,0.096438,0][-1.16904,-0.074008,-0.095268][-0.406445,0.891954,-0.19804][0.49431,0.300998,0][-0.89375,-0.0391302,-0.503164][-0.34227,0.91653,-0.206939][0.436688,0.214368,0][-1.1789,-0.198513,0.353227][0.999954,-0.00738394,0.0061888][0.810588,0.54171,0][-1.1789,0.244922,0.375417][0.99968,-0.00126465,0.0252735][0.810588,0.622187,0][-1.08873,-0.221171,0.805966][0.925957,0.0188742,-0.377158][0.915862,0.541828,0][-1.08873,-0.221171,0.805966][0.925957,0.0188742,-0.377158][0.915862,0.541828,0][-1.1789,0.244922,0.375417][0.99968,-0.00126465,0.0252735][0.810588,0.622187,0][-1.08873,0.204109,0.827249][0.927759,0.0186518,-0.372713][0.915862,0.622336,0][-1.08873,-0.221171,0.805966][0.925957,0.0188742,-0.377158][0.915862,0.541828,0][-1.08873,0.204109,0.827249][0.927759,0.0186518,-0.372713][0.915862,0.622336,0][-0.835923,-0.240536,1.19293][0.837491,0.0273122,-0.545768][0.997967,0.541928,0][-0.835923,-0.240536,1.19293][0.837491,0.0273122,-0.545768][0.997967,0.541928,0][-1.08873,0.204109,0.827249][0.927759,0.0186518,-0.372713][0.915862,0.622336,0][-0.835923,0.166824,1.21332][0.837491,0.0273122,-0.545768][0.997967,0.622463,0][-0.00231892,-0.139316,-0.829837][-1.3311e-007,-0.199589,0.97988][0.500246,0.541402,0][-0.00231894,0.535151,-0.692457][-1.74607e-007,-0.206064,0.978539][0.500246,0.621834,0][-0.447659,-0.143819,-0.739783][0.376114,-0.191251,0.906621][0.566581,0.541425,0][-0.447659,-0.143819,-0.739783][0.376114,-0.191251,0.906621][0.566581,0.541425,0][-0.00231894,0.535151,-0.692457][-1.74607e-007,-0.206064,0.978539][0.500246,0.621834,0][-0.447659,0.503231,-0.600726][0.378718,-0.19234,0.905306][0.566581,0.621865,0][-0.447659,-0.143819,-0.739783][0.376114,-0.191251,0.906621][0.566581,0.541425,0][-0.447659,0.503231,-0.600726][0.378718,-0.19234,0.905306][0.566581,0.621865,0][-0.831954,-0.156648,-0.483327][0.691787,-0.147735,0.706827][0.635874,0.541492,0][-0.831954,-0.156648,-0.483327][0.691787,-0.147735,0.706827][0.635874,0.541492,0][-0.447659,0.503231,-0.600726][0.378718,-0.19234,0.905306][0.566581,0.621865,0][-0.831954,0.412685,-0.366461][0.688935,-0.141872,0.710803][0.635874,0.621942,0][-0.831954,-0.156648,-0.483327][0.691787,-0.147735,0.706827][0.635874,0.541492,0][-0.831954,0.412685,-0.366461][0.688935,-0.141872,0.710803][0.635874,0.621942,0][-1.08873,-0.175856,-0.0995118][0.915215,-0.0750618,0.395913][0.704967,0.541592,0][-1.08873,-0.175856,-0.0995118][0.915215,-0.0750618,0.395913][0.704967,0.541592,0][-0.831954,0.412685,-0.366461][0.688935,-0.141872,0.710803][0.635874,0.621942,0][-1.08873,0.310916,-0.0132849][0.914428,-0.0638842,0.399675][0.704967,0.622059,0][-1.08873,-0.175856,-0.0995118][0.915215,-0.0750618,0.395913][0.704967,0.541592,0][-1.08873,0.310916,-0.0132849][0.914428,-0.0638842,0.399675][0.704967,0.622059,0][-1.1789,-0.198513,0.353227][0.999954,-0.00738394,0.0061888][0.810588,0.54171,0][-1.1789,-0.198513,0.353227][0.999954,-0.00738394,0.0061888][0.810588,0.54171,0][-1.08873,0.310916,-0.0132849][0.914428,-0.0638842,0.399675][0.704967,0.622059,0][-1.1789,0.244922,0.375417][0.99968,-0.00126465,0.0252735][0.810588,0.622187,0][-0.464728,-0.167507,-1.46919][-0.125935,0.970269,-0.206685][0.345571,0.00920022,0][-0.719989,-0.209883,-1.41966][-0.232421,0.948444,-0.215487][0.399784,0.0197193,0][-0.478721,-0.0197334,-0.766954][-0.148815,0.964585,-0.217786][0.348543,0.158344,0][-0.719989,-0.209883,-1.41966][-0.232421,0.948444,-0.215487][0.399784,0.0197193,0][-0.89375,-0.0391302,-0.503164][-0.34227,0.91653,-0.206939][0.436688,0.214368,0][-0.478721,-0.0197334,-0.766954][-0.148815,0.964585,-0.217786][0.348543,0.158344,0][-0.719989,-0.209883,-1.41966][-0.232421,0.948444,-0.215487][0.399784,0.0197193,0][-0.922601,-0.246137,-1.28676][-0.315779,0.920169,-0.231458][0.442815,0.0479453,0][-0.89375,-0.0391302,-0.503164][-0.34227,0.91653,-0.206939][0.436688,0.214368,0][-1.03628,-0.227365,-1.05844][-0.327162,0.917302,-0.226984][0.466959,0.096438,0][-0.89375,-0.0391302,-0.503164][-0.34227,0.91653,-0.206939][0.436688,0.214368,0][-0.922601,-0.246137,-1.28676][-0.315779,0.920169,-0.231458][0.442815,0.0479453,0][1.26036,-0.198513,0.353227][0.980785,-0.00975045,0.194847][0.172892,0.669095,0][1.26036,0.244922,0.375417][0.755994,0.651503,0.0633718][0.172933,0.954345,0][1.16364,-0.222815,0.838873][0.980785,-0.00975045,0.194847][0.0837499,0.669096,0][1.16364,-0.222815,0.838873][0.846664,-0.0265961,0.531462][0.0837485,0.669096,0][1.26036,0.244922,0.375417][0.755994,0.651503,0.0633718][0.172933,0.954345,0][1.16364,0.202463,0.860155][0.667524,0.629777,0.397232][0.0837743,0.954612,0][1.16364,-0.222815,0.838873][0.846664,-0.0265961,0.531462][0.0837485,0.669096,0][1.16364,0.202463,0.860155][0.667524,0.629777,0.397232][0.0837743,0.954612,0][0.831285,-0.240536,1.19293][0.729535,-0.0341841,0.683089][0.00178784,0.669096,0][0.831285,-0.240536,1.19293][0.729535,-0.0341841,0.683089][0.00178784,0.669096,0][1.16364,0.202463,0.860155][0.667524,0.629777,0.397232][0.0837743,0.954612,0][0.831285,0.166824,1.21332][0.722543,0.0736518,0.687391][-0.000446641,0.98377,0][-0.00231891,-0.135008,-0.915828][1.32402e-007,0.199593,-0.979879][0.49974,0.669094,0][-0.00231893,0.539453,-0.778446][0,0.764754,-0.644322][0.49974,0.953708,0][0.47597,-0.139844,-0.819226][0.375961,0.191381,-0.906657][0.417736,0.669094,0][0.47597,-0.139844,-0.819226][0.375961,0.191381,-0.906657][0.417736,0.669094,0][-0.00231893,0.539453,-0.778446][0,0.764754,-0.644322][0.49974,0.953708,0][0.47597,0.507211,-0.68017][0.327575,0.758916,-0.562798][0.417736,0.953763,0][0.47597,-0.139844,-0.819226][0.375961,0.191381,-0.906657][0.417736,0.669094,0][0.47597,0.507211,-0.68017][0.327575,0.758916,-0.562798][0.417736,0.953763,0][0.888196,-0.153606,-0.54413][0.691817,0.147639,-0.706818][0.33733,0.669094,0][0.888196,-0.153606,-0.54413][0.691817,0.147639,-0.706818][0.33733,0.669094,0][0.47597,0.507211,-0.68017][0.327575,0.758916,-0.562798][0.417736,0.953763,0][0.888196,0.415725,-0.427264][0.570469,0.720001,-0.395177][0.33733,0.953902,0][0.888196,-0.153606,-0.54413][0.691817,0.147639,-0.706818][0.33733,0.669094,0][0.888196,0.415725,-0.427264][0.570469,0.720001,-0.395177][0.33733,0.953902,0][1.16364,-0.174209,-0.132419][0.915255,0.0748562,-0.39586][0.258882,0.669095,0][1.16364,-0.174209,-0.132419][0.915255,0.0748562,-0.39586][0.258882,0.669095,0][0.888196,0.415725,-0.427264][0.570469,0.720001,-0.395177][0.33733,0.953902,0][1.16364,0.312561,-0.0461928][0.713027,0.678937,-0.175034][0.258882,0.954112,0][1.16364,-0.174209,-0.132419][0.915255,0.0748562,-0.39586][0.258882,0.669095,0][1.16364,0.312561,-0.0461928][0.713027,0.678937,-0.175034][0.258882,0.954112,0][1.26036,-0.198513,0.353227][0.978123,0.0235798,-0.206687][0.172891,0.669095,0][1.26036,-0.198513,0.353227][0.978123,0.0235798,-0.206687][0.172891,0.669095,0][1.16364,0.312561,-0.0461928][0.713027,0.678937,-0.175034][0.258882,0.954112,0][1.26036,0.244922,0.375417][0.755994,0.651503,0.0633718][0.172933,0.954345,0][-0.00231891,0.00904279,-0.881366][0,0.970023,-0.243013][0.247364,0.134044,0][0.474083,-0.0197334,-0.766953][0.148815,0.964585,-0.217786][0.146184,0.158344,0][-0.00231882,-0.140126,-1.4768][0,0.975373,-0.220561][0.247364,0.00758553,0][0.460091,-0.167507,-1.46919][0.125935,0.970269,-0.206685][0.149156,0.00920022,0][-0.00231882,-0.140126,-1.4768][0,0.975373,-0.220561][0.247364,0.00758553,0][0.474083,-0.0197334,-0.766953][0.148815,0.964585,-0.217786][0.146184,0.158344,0][0.889112,-0.0391302,-0.503164][0.344776,0.915787,-0.206068][0.0580394,0.214368,0][1.16043,-0.074008,-0.0952677][0.41011,0.890586,-0.196636][0.000417214,0.300998,0][1.03164,-0.227365,-1.05844][0.327605,0.917182,-0.22683][0.0277683,0.096438,0][1.08409,-0.221171,0.805967][-0.925957,0.0188742,-0.377158][0.0846315,0.541828,0][1.17426,0.244922,0.375417][-0.99968,-0.00126463,0.0252733][0.189906,0.622187,0][1.17426,-0.198513,0.353227][-0.999954,-0.00738404,0.00618839][0.189906,0.54171,0][1.08409,0.204109,0.827249][-0.927759,0.0186519,-0.372713][0.0846315,0.622336,0][1.17426,0.244922,0.375417][-0.99968,-0.00126463,0.0252733][0.189906,0.622187,0][1.08409,-0.221171,0.805967][-0.925957,0.0188742,-0.377158][0.0846315,0.541828,0][0.831285,-0.240536,1.19293][-0.837491,0.0273122,-0.545769][0.00252654,0.541928,0][1.08409,0.204109,0.827249][-0.927759,0.0186519,-0.372713][0.0846315,0.622336,0][1.08409,-0.221171,0.805967][-0.925957,0.0188742,-0.377158][0.0846315,0.541828,0][0.831285,0.166824,1.21332][-0.837491,0.0273122,-0.545769][0.00252654,0.622463,0][1.08409,0.204109,0.827249][-0.927759,0.0186519,-0.372713][0.0846315,0.622336,0][0.831285,-0.240536,1.19293][-0.837491,0.0273122,-0.545769][0.00252654,0.541928,0][0.443022,-0.143819,-0.739783][-0.376115,-0.191251,0.906621][0.433912,0.541425,0][-0.00231894,0.535151,-0.692457][-1.74607e-007,-0.206064,0.978539][0.500246,0.621834,0][-0.00231892,-0.139316,-0.829837][-1.3311e-007,-0.199589,0.97988][0.500246,0.541402,0][0.443022,0.503231,-0.600726][-0.378718,-0.19234,0.905305][0.433912,0.621865,0][-0.00231894,0.535151,-0.692457][-1.74607e-007,-0.206064,0.978539][0.500246,0.621834,0][0.443022,-0.143819,-0.739783][-0.376115,-0.191251,0.906621][0.433912,0.541425,0][0.827316,-0.156648,-0.483326][-0.691787,-0.147735,0.706827][0.364619,0.541492,0][0.443022,0.503231,-0.600726][-0.378718,-0.19234,0.905305][0.433912,0.621865,0][0.443022,-0.143819,-0.739783][-0.376115,-0.191251,0.906621][0.433912,0.541425,0][0.827316,0.412685,-0.366461][-0.688935,-0.141872,0.710803][0.364619,0.621942,0][0.443022,0.503231,-0.600726][-0.378718,-0.19234,0.905305][0.433912,0.621865,0][0.827316,-0.156648,-0.483326][-0.691787,-0.147735,0.706827][0.364619,0.541492,0][1.08409,-0.175856,-0.0995115][-0.915215,-0.075062,0.395913][0.295526,0.541592,0][0.827316,0.412685,-0.366461][-0.688935,-0.141872,0.710803][0.364619,0.621942,0][0.827316,-0.156648,-0.483326][-0.691787,-0.147735,0.706827][0.364619,0.541492,0][1.08409,0.310916,-0.0132846][-0.914428,-0.0638844,0.399674][0.295526,0.622059,0][0.827316,0.412685,-0.366461][-0.688935,-0.141872,0.710803][0.364619,0.621942,0][1.08409,-0.175856,-0.0995115][-0.915215,-0.075062,0.395913][0.295526,0.541592,0][1.17426,-0.198513,0.353227][-0.999954,-0.00738404,0.00618839][0.189906,0.54171,0][1.08409,0.310916,-0.0132846][-0.914428,-0.0638844,0.399674][0.295526,0.622059,0][1.08409,-0.175856,-0.0995115][-0.915215,-0.075062,0.395913][0.295526,0.541592,0][1.17426,0.244922,0.375417][-0.99968,-0.00126463,0.0252733][0.189906,0.622187,0][1.08409,0.310916,-0.0132846][-0.914428,-0.0638844,0.399674][0.295526,0.622059,0][1.17426,-0.198513,0.353227][-0.999954,-0.00738404,0.00618839][0.189906,0.54171,0][0.474083,-0.0197334,-0.766953][0.148815,0.964585,-0.217786][0.146184,0.158344,0][0.715352,-0.209883,-1.41966][0.232421,0.948444,-0.215487][0.094943,0.0197193,0][0.460091,-0.167507,-1.46919][0.125935,0.970269,-0.206685][0.149156,0.00920022,0][0.474083,-0.0197334,-0.766953][0.148815,0.964585,-0.217786][0.146184,0.158344,0][0.889112,-0.0391302,-0.503164][0.344776,0.915787,-0.206068][0.0580394,0.214368,0][0.715352,-0.209883,-1.41966][0.232421,0.948444,-0.215487][0.094943,0.0197193,0][0.889112,-0.0391302,-0.503164][0.344776,0.915787,-0.206068][0.0580394,0.214368,0][0.917963,-0.246137,-1.28676][0.315779,0.920169,-0.231458][0.0519119,0.0479453,0][0.715352,-0.209883,-1.41966][0.232421,0.948444,-0.215487][0.094943,0.0197193,0][0.917963,-0.246137,-1.28676][0.315779,0.920169,-0.231458][0.0519119,0.0479453,0][0.889112,-0.0391302,-0.503164][0.344776,0.915787,-0.206068][0.0580394,0.214368,0][1.03164,-0.227365,-1.05844][0.327605,0.917182,-0.22683][0.0277683,0.096438,0][-1.16827,-0.174209,-0.13242][-0.986192,0.0509162,-0.157586][0.998356,0.634735,0][-1.16904,-0.074008,-0.095268][-0.987226,0.0388345,-0.154523][0.997727,0.662808,0][-1.03359,-0.320723,-1.02265][-0.961557,-0.106183,-0.253247][0.786448,0.634655,0][-1.16904,-0.074008,-0.095268][-0.987226,0.0388345,-0.154523][0.997727,0.662808,0][-1.03628,-0.227365,-1.05844][-0.943294,-0.142208,-0.299957][0.786144,0.662778,0][-1.03359,-0.320723,-1.02265][-0.961557,-0.106183,-0.253247][0.786448,0.634655,0][-0.464728,-0.167507,-1.46919][-0.0640033,-0.276286,-0.958942][0.605156,0.662765,0][-0.00231883,-0.229035,-1.4533][1.24436e-007,-0.25841,-0.966035][0.499322,0.634618,0][-0.468023,-0.25198,-1.44448][-0.0777739,-0.267738,-0.960348][0.605136,0.634619,0][-0.00231883,-0.229035,-1.4533][1.24436e-007,-0.25841,-0.966035][0.499322,0.634618,0][-0.464728,-0.167507,-1.46919][-0.0640033,-0.276286,-0.958942][0.605156,0.662765,0][-0.00231882,-0.140126,-1.4768][1.2461e-007,-0.255464,-0.966819][0.499322,0.662765,0][-0.468023,-0.25198,-1.44448][-0.0777739,-0.267738,-0.960348][0.605136,0.634619,0][-0.719989,-0.209883,-1.41966][-0.305715,-0.190442,-0.932883][0.671138,0.662767,0][-0.464728,-0.167507,-1.46919][-0.0640033,-0.276286,-0.958942][0.605156,0.662765,0][-0.719989,-0.209883,-1.41966][-0.305715,-0.190442,-0.932883][0.671138,0.662767,0][-0.468023,-0.25198,-1.44448][-0.0777739,-0.267738,-0.960348][0.605136,0.634619,0][-0.717953,-0.297612,-1.40341][-0.355271,-0.173886,-0.918447][0.670793,0.634624,0][-0.717953,-0.297612,-1.40341][-0.355271,-0.173886,-0.918447][0.670793,0.634624,0][-0.922601,-0.246137,-1.28676][-0.724862,-0.113006,-0.679562][0.73531,0.662771,0][-0.719989,-0.209883,-1.41966][-0.305715,-0.190442,-0.932883][0.671138,0.662767,0][-0.922601,-0.246137,-1.28676][-0.724862,-0.113006,-0.679562][0.73531,0.662771,0][-0.717953,-0.297612,-1.40341][-0.355271,-0.173886,-0.918447][0.670793,0.634624,0][-0.925783,-0.333562,-1.2714][-0.779616,-0.0807744,-0.621027][0.735263,0.634635,0][-0.925783,-0.333562,-1.2714][-0.779616,-0.0807744,-0.621027][0.735263,0.634635,0][-1.03359,-0.320723,-1.02265][-0.961557,-0.106183,-0.253247][0.786448,0.634655,0][-0.922601,-0.246137,-1.28676][-0.724862,-0.113006,-0.679562][0.73531,0.662771,0][-1.03628,-0.227365,-1.05844][-0.943294,-0.142208,-0.299957][0.786144,0.662778,0][-0.922601,-0.246137,-1.28676][-0.724862,-0.113006,-0.679562][0.73531,0.662771,0][-1.03359,-0.320723,-1.02265][-0.961557,-0.106183,-0.253247][0.786448,0.634655,0][1.02895,-0.320723,-1.02265][0.962252,-0.104101,-0.251465][0.213371,0.634654,0][1.16043,-0.074008,-0.0952677][0.984172,0.0764671,-0.159871][-0.000451628,0.662808,0][1.16364,-0.174209,-0.132419][0.982181,0.0921938,-0.163772][0.000975841,0.634733,0][1.02895,-0.320723,-1.02265][0.962252,-0.104101,-0.251465][0.213371,0.634654,0][1.03164,-0.227365,-1.05844][0.943866,-0.141637,-0.298423][0.212166,0.662778,0][1.16043,-0.074008,-0.0952677][0.984172,0.0764671,-0.159871][-0.000451628,0.662808,0][0.463385,-0.25198,-1.44448][0.077774,-0.267738,-0.960348][0.393281,0.634619,0][-0.00231883,-0.229035,-1.4533][1.24436e-007,-0.25841,-0.966035][0.499322,0.634618,0][0.460091,-0.167507,-1.46919][0.0640035,-0.276286,-0.958942][0.393487,0.662765,0][-0.00231882,-0.140126,-1.4768][1.2461e-007,-0.255464,-0.966819][0.499322,0.662765,0][0.460091,-0.167507,-1.46919][0.0640035,-0.276286,-0.958942][0.393487,0.662765,0][-0.00231883,-0.229035,-1.4533][1.24436e-007,-0.25841,-0.966035][0.499322,0.634618,0][0.460091,-0.167507,-1.46919][0.0640035,-0.276286,-0.958942][0.393487,0.662765,0][0.715352,-0.209883,-1.41966][0.305715,-0.190442,-0.932883][0.327433,0.662767,0][0.463385,-0.25198,-1.44448][0.077774,-0.267738,-0.960348][0.393281,0.634619,0][0.713315,-0.297612,-1.40341][0.355272,-0.173886,-0.918447][0.327368,0.634623,0][0.463385,-0.25198,-1.44448][0.077774,-0.267738,-0.960348][0.393281,0.634619,0][0.715352,-0.209883,-1.41966][0.305715,-0.190442,-0.932883][0.327433,0.662767,0][0.715352,-0.209883,-1.41966][0.305715,-0.190442,-0.932883][0.327433,0.662767,0][0.917963,-0.246137,-1.28676][0.724862,-0.113006,-0.679562][0.263144,0.662771,0][0.713315,-0.297612,-1.40341][0.355272,-0.173886,-0.918447][0.327368,0.634623,0][0.921145,-0.333562,-1.2714][0.779616,-0.0807743,-0.621026][0.263348,0.634635,0][0.713315,-0.297612,-1.40341][0.355272,-0.173886,-0.918447][0.327368,0.634623,0][0.917963,-0.246137,-1.28676][0.724862,-0.113006,-0.679562][0.263144,0.662771,0][0.917963,-0.246137,-1.28676][0.724862,-0.113006,-0.679562][0.263144,0.662771,0][1.02895,-0.320723,-1.02265][0.962252,-0.104101,-0.251465][0.213371,0.634654,0][0.921145,-0.333562,-1.2714][0.779616,-0.0807743,-0.621026][0.263348,0.634635,0][1.02895,-0.320723,-1.02265][0.962252,-0.104101,-0.251465][0.213371,0.634654,0][0.917963,-0.246137,-1.28676][0.724862,-0.113006,-0.679562][0.263144,0.662771,0][1.03164,-0.227365,-1.05844][0.943866,-0.141637,-0.298423][0.212166,0.662778,0][-1.265,0.244922,0.375417][-0.755994,0.651503,0.0633717][0.826912,0.954345,0][-1.08873,0.204109,0.827249][0.0139899,0.996228,0.0856393][0.914968,0.99904,0][-1.1789,0.244922,0.375417][-0.00250797,0.99222,0.12447][0.826384,0.998966,0][-1.16827,0.202463,0.860155][-0.667524,0.629777,0.397232][0.914968,0.954612,0][-1.08873,0.204109,0.827249][0.0139899,0.996228,0.0856393][0.914968,0.99904,0][-1.265,0.244922,0.375417][-0.755994,0.651503,0.0633717][0.826912,0.954345,0][-1.16827,0.202463,0.860155][-0.667524,0.629777,0.397232][0.914968,0.954612,0][-0.835923,0.166824,1.21332][-0.722543,0.0736519,0.687391][0.997126,0.98377,0][-1.08873,0.204109,0.827249][0.0139899,0.996228,0.0856393][0.914968,0.99904,0][-0.00231893,0.539453,-0.778446][0,0.764754,-0.644322][0.49974,0.953708,0][-0.447659,0.503231,-0.600726][-0.106671,0.989978,0.0925457][0.581993,0.998807,0][-0.00231894,0.535151,-0.692457][0,0.998751,0.0499672][0.49974,0.998792,0][-0.480608,0.507211,-0.68017][-0.327575,0.758916,-0.562798][0.581744,0.953763,0][-0.447659,0.503231,-0.600726][-0.106671,0.989978,0.0925457][0.581993,0.998807,0][-0.00231893,0.539453,-0.778446][0,0.764754,-0.644322][0.49974,0.953708,0][-0.480608,0.507211,-0.68017][-0.327575,0.758916,-0.562798][0.581744,0.953763,0][-0.831954,0.412685,-0.366461][-0.127217,0.976941,0.171472][0.662221,0.998845,0][-0.447659,0.503231,-0.600726][-0.106671,0.989978,0.0925457][0.581993,0.998807,0][-0.892834,0.415725,-0.427265][-0.570468,0.720001,-0.395177][0.662171,0.953902,0][-0.831954,0.412685,-0.366461][-0.127217,0.976941,0.171472][0.662221,0.998845,0][-0.480608,0.507211,-0.68017][-0.327575,0.758916,-0.562798][0.581744,0.953763,0][-0.892834,0.415725,-0.427265][-0.570468,0.720001,-0.395177][0.662171,0.953902,0][-1.08873,0.310916,-0.0132849][-0.0601806,0.980949,0.184712][0.740812,0.998903,0][-0.831954,0.412685,-0.366461][-0.127217,0.976941,0.171472][0.662221,0.998845,0][-1.16827,0.312561,-0.0461932][-0.713027,0.678937,-0.175034][0.740664,0.954112,0][-1.08873,0.310916,-0.0132849][-0.0601806,0.980949,0.184712][0.740812,0.998903,0][-0.892834,0.415725,-0.427265][-0.570468,0.720001,-0.395177][0.662171,0.953902,0][-1.16827,0.312561,-0.0461932][-0.713027,0.678937,-0.175034][0.740664,0.954112,0][-1.1789,0.244922,0.375417][-0.00250797,0.99222,0.12447][0.826384,0.998966,0][-1.08873,0.310916,-0.0132849][-0.0601806,0.980949,0.184712][0.740812,0.998903,0][-1.265,0.244922,0.375417][-0.755994,0.651503,0.0633717][0.826912,0.954345,0][-1.1789,0.244922,0.375417][-0.00250797,0.99222,0.12447][0.826384,0.998966,0][-1.16827,0.312561,-0.0461932][-0.713027,0.678937,-0.175034][0.740664,0.954112,0][1.17426,0.244922,0.375417][0.00250792,0.99222,0.12447][0.172935,0.998966,0][1.08409,0.204109,0.827249][-0.0139899,0.996228,0.0856393][0.0837742,0.99904,0][1.26036,0.244922,0.375417][0.755994,0.651503,0.0633718][0.172933,0.954345,0][1.26036,0.244922,0.375417][0.755994,0.651503,0.0633718][0.172933,0.954345,0][1.08409,0.204109,0.827249][-0.0139899,0.996228,0.0856393][0.0837742,0.99904,0][1.16364,0.202463,0.860155][0.667524,0.629777,0.397232][0.0837743,0.954612,0][1.08409,0.204109,0.827249][-0.0139899,0.996228,0.0856393][0.0837742,0.99904,0][0.831285,0.166824,1.21332][0.722543,0.0736518,0.687391][-0.000446641,0.98377,0][1.16364,0.202463,0.860155][0.667524,0.629777,0.397232][0.0837743,0.954612,0][-0.00231894,0.535151,-0.692457][0,0.998751,0.0499672][0.49974,0.998792,0][0.443022,0.503231,-0.600726][0.106671,0.989978,0.0925457][0.416532,0.998807,0][-0.00231893,0.539453,-0.778446][0,0.764754,-0.644322][0.49974,0.953708,0][-0.00231893,0.539453,-0.778446][0,0.764754,-0.644322][0.49974,0.953708,0][0.443022,0.503231,-0.600726][0.106671,0.989978,0.0925457][0.416532,0.998807,0][0.47597,0.507211,-0.68017][0.327575,0.758916,-0.562798][0.417736,0.953763,0][0.443022,0.503231,-0.600726][0.106671,0.989978,0.0925457][0.416532,0.998807,0][0.827316,0.412685,-0.366461][0.127217,0.976941,0.171472][0.337498,0.998845,0][0.47597,0.507211,-0.68017][0.327575,0.758916,-0.562798][0.417736,0.953763,0][0.47597,0.507211,-0.68017][0.327575,0.758916,-0.562798][0.417736,0.953763,0][0.827316,0.412685,-0.366461][0.127217,0.976941,0.171472][0.337498,0.998845,0][0.888196,0.415725,-0.427264][0.570469,0.720001,-0.395177][0.33733,0.953902,0][0.827316,0.412685,-0.366461][0.127217,0.976941,0.171472][0.337498,0.998845,0][1.08409,0.310916,-0.0132846][0.0601806,0.980949,0.184712][0.259003,0.998903,0][0.888196,0.415725,-0.427264][0.570469,0.720001,-0.395177][0.33733,0.953902,0][0.888196,0.415725,-0.427264][0.570469,0.720001,-0.395177][0.33733,0.953902,0][1.08409,0.310916,-0.0132846][0.0601806,0.980949,0.184712][0.259003,0.998903,0][1.16364,0.312561,-0.0461928][0.713027,0.678937,-0.175034][0.258882,0.954112,0][1.08409,0.310916,-0.0132846][0.0601806,0.980949,0.184712][0.259003,0.998903,0][1.17426,0.244922,0.375417][0.00250792,0.99222,0.12447][0.172935,0.998966,0][1.16364,0.312561,-0.0461928][0.713027,0.678937,-0.175034][0.258882,0.954112,0][1.16364,0.312561,-0.0461928][0.713027,0.678937,-0.175034][0.258882,0.954112,0][1.17426,0.244922,0.375417][0.00250792,0.99222,0.12447][0.172935,0.998966,0][1.26036,0.244922,0.375417][0.755994,0.651503,0.0633718][0.172933,0.954345,0][-1.1789,-0.198513,0.353227][0,-0.99875,-0.0499838][0.979184,0.360958,0][-1.08873,-0.221171,0.805966][-3.51524e-005,-0.998751,-0.0499636][0.961426,0.450122,0][-1.265,-0.198513,0.353227][-2.50904e-006,-0.99875,-0.0499828][0.99614,0.360958,0][-1.265,-0.198513,0.353227][-2.50904e-006,-0.99875,-0.0499828][0.99614,0.360958,0][-1.08873,-0.221171,0.805966][-3.51524e-005,-0.998751,-0.0499636][0.961426,0.450122,0][-1.16827,-0.222815,0.838872][-3.72844e-005,-0.998751,-0.0499632][0.977091,0.456603,0][-1.08873,-0.221171,0.805966][-3.51524e-005,-0.998751,-0.0499636][0.961426,0.450122,0][-0.835923,-0.240536,1.19293][-3.44508e-005,-0.998751,-0.0499564][0.911637,0.526333,0][-1.16827,-0.222815,0.838872][-3.72844e-005,-0.998751,-0.0499632][0.977091,0.456603,0][-0.00231892,-0.139316,-0.829837][0,-0.998748,-0.0500327][0.747464,0.127961,0][-0.447659,-0.143819,-0.739783][-1.47793e-006,-0.99875,-0.0499749][0.835171,0.145697,0][-0.00231891,-0.135008,-0.915828][0,-0.997012,0.0772524][0.747464,0.111026,0][-0.00231891,-0.135008,-0.915828][0,-0.997012,0.0772524][0.747464,0.111026,0][-0.447659,-0.143819,-0.739783][-1.47793e-006,-0.99875,-0.0499749][0.835171,0.145697,0][-0.480607,-0.139844,-0.819226][0.080415,-0.992846,0.0882623][0.84166,0.130051,0][-0.447659,-0.143819,-0.739783][-1.47793e-006,-0.99875,-0.0499749][0.835171,0.145697,0][-0.831954,-0.156648,-0.483327][9.27321e-006,-0.998751,-0.0499663][0.910855,0.196204,0][-0.480607,-0.139844,-0.819226][0.080415,-0.992846,0.0882623][0.84166,0.130051,0][-0.480607,-0.139844,-0.819226][0.080415,-0.992846,0.0882623][0.84166,0.130051,0][-0.831954,-0.156648,-0.483327][9.27321e-006,-0.998751,-0.0499663][0.910855,0.196204,0][-0.892834,-0.153606,-0.54413][0.182182,-0.978217,0.0995002][0.922845,0.18423,0][-0.831954,-0.156648,-0.483327][9.27321e-006,-0.998751,-0.0499663][0.910855,0.196204,0][-1.08873,-0.175856,-0.0995118][-9.74166e-007,-0.99875,-0.049981][0.961426,0.271794,0][-0.892834,-0.153606,-0.54413][0.182182,-0.978217,0.0995002][0.922845,0.18423,0][-0.892834,-0.153606,-0.54413][0.182182,-0.978217,0.0995002][0.922845,0.18423,0][-1.08873,-0.175856,-0.0995118][-9.74166e-007,-0.99875,-0.049981][0.961426,0.271794,0][-1.16827,-0.174209,-0.13242][0.0567499,-0.998316,-0.0119917][0.977091,0.265313,0][-1.08873,-0.175856,-0.0995118][-9.74166e-007,-0.99875,-0.049981][0.961426,0.271794,0][-1.1789,-0.198513,0.353227][0,-0.99875,-0.0499838][0.979184,0.360958,0][-1.16827,-0.174209,-0.13242][0.0567499,-0.998316,-0.0119917][0.977091,0.265313,0][-1.16827,-0.174209,-0.13242][0.0567499,-0.998316,-0.0119917][0.977091,0.265313,0][-1.1789,-0.198513,0.353227][0,-0.99875,-0.0499838][0.979184,0.360958,0][-1.265,-0.198513,0.353227][-2.50904e-006,-0.99875,-0.0499828][0.99614,0.360958,0][-0.00231891,-0.135008,-0.915828][0,-0.997012,0.0772524][0.747464,0.111026,0][-0.468023,-0.25198,-1.44448][0.122772,-0.976688,0.176087][0.839181,0.00691217,0][-0.00231883,-0.229035,-1.4533][0,-0.98504,0.172326][0.747464,0.00517374,0][-0.468023,-0.25198,-1.44448][0.122772,-0.976688,0.176087][0.839181,0.00691217,0][-0.00231891,-0.135008,-0.915828][0,-0.997012,0.0772524][0.747464,0.111026,0][-0.480607,-0.139844,-0.819226][0.080415,-0.992846,0.0882623][0.84166,0.130051,0][-0.892834,-0.153606,-0.54413][0.182182,-0.978217,0.0995002][0.922845,0.18423,0][-1.16827,-0.174209,-0.13242][0.0567499,-0.998316,-0.0119917][0.977091,0.265313,0][-1.03359,-0.320723,-1.02265][0.371099,-0.905231,0.206984][0.950565,0.0899884,0][-1.03359,-0.320723,-1.02265][0.371099,-0.905231,0.206984][0.950565,0.0899884,0][-0.925783,-0.333562,-1.2714][0.261474,-0.94746,0.184257][0.929334,0.0409992,0][-0.892834,-0.153606,-0.54413][0.182182,-0.978217,0.0995002][0.922845,0.18423,0][-0.892834,-0.153606,-0.54413][0.182182,-0.978217,0.0995002][0.922845,0.18423,0][-0.925783,-0.333562,-1.2714][0.261474,-0.94746,0.184257][0.929334,0.0409992,0][-0.480607,-0.139844,-0.819226][0.080415,-0.992846,0.0882623][0.84166,0.130051,0][-0.717953,-0.297612,-1.40341][0.23429,-0.9583,0.163616][0.888403,0.0149998,0][-0.480607,-0.139844,-0.819226][0.080415,-0.992846,0.0882623][0.84166,0.130051,0][-0.925783,-0.333562,-1.2714][0.261474,-0.94746,0.184257][0.929334,0.0409992,0][-0.717953,-0.297612,-1.40341][0.23429,-0.9583,0.163616][0.888403,0.0149998,0][-0.468023,-0.25198,-1.44448][0.122772,-0.976688,0.176087][0.839181,0.00691217,0][-0.480607,-0.139844,-0.819226][0.080415,-0.992846,0.0882623][0.84166,0.130051,0][1.26036,-0.198513,0.353227][2.52752e-006,-0.99875,-0.0499828][0.498788,0.360958,0][1.08409,-0.221171,0.805967][3.51854e-005,-0.998751,-0.0499636][0.533502,0.450122,0][1.17426,-0.198513,0.353227][0,-0.99875,-0.0499838][0.515744,0.360958,0][1.16364,-0.222815,0.838873][3.73184e-005,-0.998751,-0.0499632][0.517836,0.456603,0][1.08409,-0.221171,0.805967][3.51854e-005,-0.998751,-0.0499636][0.533502,0.450122,0][1.26036,-0.198513,0.353227][2.52752e-006,-0.99875,-0.0499828][0.498788,0.360958,0][1.16364,-0.222815,0.838873][3.73184e-005,-0.998751,-0.0499632][0.517836,0.456603,0][0.831285,-0.240536,1.19293][3.44828e-005,-0.998751,-0.0499563][0.583291,0.526333,0][1.08409,-0.221171,0.805967][3.51854e-005,-0.998751,-0.0499636][0.533502,0.450122,0][-0.00231891,-0.135008,-0.915828][0,-0.997012,0.0772524][0.747464,0.111026,0][0.443022,-0.143819,-0.739783][1.48984e-006,-0.99875,-0.0499749][0.659757,0.145697,0][-0.00231892,-0.139316,-0.829837][0,-0.998748,-0.0500327][0.747464,0.127961,0][0.47597,-0.139844,-0.819226][-0.080415,-0.992846,0.0882622][0.653268,0.130051,0][0.443022,-0.143819,-0.739783][1.48984e-006,-0.99875,-0.0499749][0.659757,0.145697,0][-0.00231891,-0.135008,-0.915828][0,-0.997012,0.0772524][0.747464,0.111026,0][0.47597,-0.139844,-0.819226][-0.080415,-0.992846,0.0882622][0.653268,0.130051,0][0.827316,-0.156648,-0.483326][-9.26523e-006,-0.998751,-0.0499663][0.584072,0.196204,0][0.443022,-0.143819,-0.739783][1.48984e-006,-0.99875,-0.0499749][0.659757,0.145697,0][0.888196,-0.153606,-0.54413][-0.182182,-0.978217,0.0995001][0.572083,0.18423,0][0.827316,-0.156648,-0.483326][-9.26523e-006,-0.998751,-0.0499663][0.584072,0.196204,0][0.47597,-0.139844,-0.819226][-0.080415,-0.992846,0.0882622][0.653268,0.130051,0][0.888196,-0.153606,-0.54413][-0.182182,-0.978217,0.0995001][0.572083,0.18423,0][1.08409,-0.175856,-0.0995115][9.92512e-007,-0.99875,-0.049981][0.533502,0.271794,0][0.827316,-0.156648,-0.483326][-9.26523e-006,-0.998751,-0.0499663][0.584072,0.196204,0][1.16364,-0.174209,-0.132419][-0.0567498,-0.998316,-0.0119917][0.517836,0.265313,0][1.08409,-0.175856,-0.0995115][9.92512e-007,-0.99875,-0.049981][0.533502,0.271794,0][0.888196,-0.153606,-0.54413][-0.182182,-0.978217,0.0995001][0.572083,0.18423,0][1.16364,-0.174209,-0.132419][-0.0567498,-0.998316,-0.0119917][0.517836,0.265313,0][1.17426,-0.198513,0.353227][0,-0.99875,-0.0499838][0.515744,0.360958,0][1.08409,-0.175856,-0.0995115][9.92512e-007,-0.99875,-0.049981][0.533502,0.271794,0][1.26036,-0.198513,0.353227][2.52752e-006,-0.99875,-0.0499828][0.498788,0.360958,0][1.17426,-0.198513,0.353227][0,-0.99875,-0.0499838][0.515744,0.360958,0][1.16364,-0.174209,-0.132419][-0.0567498,-0.998316,-0.0119917][0.517836,0.265313,0][-0.00231883,-0.229035,-1.4533][0,-0.98504,0.172326][0.747464,0.00517374,0][0.463385,-0.25198,-1.44448][-0.122772,-0.976688,0.176087][0.655746,0.00691217,0][-0.00231891,-0.135008,-0.915828][0,-0.997012,0.0772524][0.747464,0.111026,0][0.47597,-0.139844,-0.819226][-0.080415,-0.992846,0.0882622][0.653268,0.130051,0][-0.00231891,-0.135008,-0.915828][0,-0.997012,0.0772524][0.747464,0.111026,0][0.463385,-0.25198,-1.44448][-0.122772,-0.976688,0.176087][0.655746,0.00691217,0][1.02895,-0.320723,-1.02265][-0.371099,-0.905231,0.206984][0.544362,0.0899884,0][1.16364,-0.174209,-0.132419][-0.0567498,-0.998316,-0.0119917][0.517836,0.265313,0][0.888196,-0.153606,-0.54413][-0.182182,-0.978217,0.0995001][0.572083,0.18423,0][0.888196,-0.153606,-0.54413][-0.182182,-0.978217,0.0995001][0.572083,0.18423,0][0.921145,-0.333562,-1.2714][-0.261474,-0.94746,0.184257][0.565593,0.0409992,0][1.02895,-0.320723,-1.02265][-0.371099,-0.905231,0.206984][0.544362,0.0899884,0][0.47597,-0.139844,-0.819226][-0.080415,-0.992846,0.0882622][0.653268,0.130051,0][0.921145,-0.333562,-1.2714][-0.261474,-0.94746,0.184257][0.565593,0.0409992,0][0.888196,-0.153606,-0.54413][-0.182182,-0.978217,0.0995001][0.572083,0.18423,0][0.921145,-0.333562,-1.2714][-0.261474,-0.94746,0.184257][0.565593,0.0409992,0][0.47597,-0.139844,-0.819226][-0.080415,-0.992846,0.0882622][0.653268,0.130051,0][0.713315,-0.297612,-1.40341][-0.23429,-0.9583,0.163615][0.606524,0.0149998,0][0.47597,-0.139844,-0.819226][-0.080415,-0.992846,0.0882622][0.653268,0.130051,0][0.463385,-0.25198,-1.44448][-0.122772,-0.976688,0.176087][0.655746,0.00691217,0][0.713315,-0.297612,-1.40341][-0.23429,-0.9583,0.163615][0.606524,0.0149998,0] \ No newline at end of file diff --git a/maintenance/asset/303 b/maintenance/asset/303 deleted file mode 100644 index 3ff786e..0000000 --- a/maintenance/asset/303 +++ /dev/null @@ -1,10 +0,0 @@ - - null - nil - - - http://jarfeh.xyz/asset/?id=304 - Shirt Graphic - - - \ No newline at end of file diff --git a/maintenance/asset/304 b/maintenance/asset/304 deleted file mode 100644 index 0f47431a965055af5f8154d49643b1d0f405bc55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11931 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 Q;A|y2n)**lHD12^Uu*dOH~;_u diff --git a/maintenance/asset/305 b/maintenance/asset/305 deleted file mode 100644 index 197512e..0000000 --- a/maintenance/asset/305 +++ /dev/null @@ -1,10 +0,0 @@ - - null - nil - - - Clothing - http://jarfeh.xyz/asset/?id=4000000000000000001 - - - \ No newline at end of file diff --git a/maintenance/asset/306 b/maintenance/asset/306 deleted file mode 100644 index 9f58ecd..0000000 --- a/maintenance/asset/306 +++ /dev/null @@ -1,10 +0,0 @@ - - null - nil - - - Clothing - http://jarfeh.xyz/asset/?id=4000000000000000000 - - - \ No newline at end of file diff --git a/maintenance/asset/307 b/maintenance/asset/307 deleted file mode 100644 index 5f90be35b3184ab5e34f572f3508dad2f152fae2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3581 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
  • w#Sn9q^~dEJ`r!v(fH*B~i0+A1_(=P_d8lc~R+ z&6my>mDHipzxDI&?0)3yrBpPegUq zam_|1(BOH9G68&*vbVu23Byaq5!*gmMtp?(O3H&$Wo&Hg?PzPgj0kWMH_0)4Iv+N0+zx_(JJ1CwORv9Gd*Be$@MMYFfB;shjOfCz zu9ffG>yq9Zsh(L2z6@ineKxl{@(>j1@-apm9*I#00h(&QHW(k2T=O|@ErG$+?y4fY ze4l602rZ1_6Xc{JS?Qrr%Tj`8X3gVrV?l(*3Xo^u<*=j4$^+-q*ms9g{s~>sJFDB$ zke#`%3YjM!S0nY75b~BJ9^4vqCNiORAUYMj4T7=kC&I;wL=`5SbXKlMu`Qot{_c0O z+SF&-3Ml;tf@wL-w5oS*VH47yCSOJUM7(`!9EHx&&~M_1=gFgCJBh z-aPF+wdaAx4tzHr6*Tqo^H%6wZ4)fmsCWa?EkUexh68~MLON4wnQi)>=L8ulGJ9=H zwSCG*J#IXCj89eG-oy5m|1lpozaD2_CMtmZICJ40>vz3Zq)X2*j;RFNNDr8EoHZF% z8!G3unfa3>YdgLl59gI7n25-;k$06Vn5b+4X#`U|HH=YtGJ%13fG{@WMaXGr$(|l!G5V?gl2Ep&ME5F_>Tf}r9kmp3yn74hyP9oGvRVlhrc;rly3?FBbBtIoZClwqQX-#-fPfBv=cTQO(ibeXlq z(WG_{waF?ArpfZD0ZjjZe_o!h_yb+hf`)~)yrp zcD+Eur5*143GJ?20Rum7o#k8Us7B8?%dZN#wfE$iJ*L^6)f80R>S|A*nLDlS-0?_H zbBB_Mw)YgZsYtpX^FG-5`B?R5s^nU9!|c#ePwYssy6|rM$N{0-aQW>7F^JpOQjqTs zctpo8PD&h`9-8|MCfGNMMK!iAR~4$|w24Ys^B=Bmb$m#%F+B!JVbcaTjU`zGRS?al zjS$H8qY~##rgZx^}%!o(`Tiy`LI6OLIF*t z%(ll?i{cwFfka3fbfi&H wBbtWk#s_5XSRQ^{b{6wrXCAtps*;bv4EdZ9L^y7gKC%If4Q|7$_3y|14~Gxl(f|Me diff --git a/maintenance/asset/308 b/maintenance/asset/308 deleted file mode 100644 index bfdb0d2..0000000 --- a/maintenance/asset/308 +++ /dev/null @@ -1,14 +0,0 @@ - - null - nil - - - 5 - face - 20 - 0 - http://jarfeh.xyz/asset/?id=307 - true - - - \ No newline at end of file diff --git a/maintenance/asset/360360 b/maintenance/asset/360360 deleted file mode 100644 index af8069f..0000000 --- a/maintenance/asset/360360 +++ /dev/null @@ -1 +0,0 @@ -NameSpikes - MovingAssetId41324904AssetSetId360360AssetVersionId137995138CreatorNameROBLOXIsTrustedTrue
    NameSpikesAssetId41324903AssetSetId360360AssetVersionId137995181CreatorNameROBLOXIsTrustedTrue
    NameFire PitAssetId41324902AssetSetId360360AssetVersionId137995228CreatorNameROBLOXIsTrustedTrue
    NameFriend Only Door - HostileAssetId41324878AssetSetId360360AssetVersionId137995300CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/360362 b/maintenance/asset/360362 deleted file mode 100644 index 6d76c68..0000000 --- a/maintenance/asset/360362 +++ /dev/null @@ -1 +0,0 @@ -NameFloat Pad - SidewaysAssetId56445964AssetSetId360362AssetVersionId138011329CreatorNameROBLOXIsTrustedTrue
    NameFloat PadAssetId56445997AssetSetId360362AssetVersionId138011397CreatorNameROBLOXIsTrustedTrue
    NameElevator - 8 x 8 x 32AssetId41324885AssetSetId360362AssetVersionId138064397CreatorNameROBLOXIsTrustedTrue
    NameElevator - 8 x 8 x 16AssetId41324881AssetSetId360362AssetVersionId138064342CreatorNameROBLOXIsTrustedTrue
    NameFriend Only Door 2.0AssetId41694124AssetSetId360362AssetVersionId138011692CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/360363 b/maintenance/asset/360363 deleted file mode 100644 index 6d566f6..0000000 --- a/maintenance/asset/360363 +++ /dev/null @@ -1 +0,0 @@ -NameSpace BedAssetId56446151AssetSetId360363AssetVersionId138011735CreatorNameROBLOXIsTrustedTrue
    NameControl Panel - WallAssetId56446186AssetSetId360363AssetVersionId138011812CreatorNameROBLOXIsTrustedTrue
    NameControl Panel - FloorAssetId56446217AssetSetId360363AssetVersionId138011880CreatorNameROBLOXIsTrustedTrue
    NameChair - ShortAssetId56446234AssetSetId360363AssetVersionId138011924CreatorNameROBLOXIsTrustedTrue
    NameChair - TallAssetId56446276AssetSetId360363AssetVersionId138012000CreatorNameROBLOXIsTrustedTrue
    NameCaptain's ChairAssetId56446320AssetSetId360363AssetVersionId138012083CreatorNameROBLOXIsTrustedTrue
    NameRailingAssetId56446358AssetSetId360363AssetVersionId138012168CreatorNameROBLOXIsTrustedTrue
    NameExterior ColumnAssetId56446391AssetSetId360363AssetVersionId138012233CreatorNameROBLOXIsTrustedTrue
    NameCatwalkAssetId56446415AssetSetId360363AssetVersionId138012291CreatorNameROBLOXIsTrustedTrue
    NameSpace Window - CornerAssetId56446452AssetSetId360363AssetVersionId138012375CreatorNameROBLOXIsTrustedTrue
    NameSpace WindowAssetId56446481AssetSetId360363AssetVersionId138012434CreatorNameROBLOXIsTrustedTrue
    NameInterior Hall PanelAssetId56446512AssetSetId360363AssetVersionId138012505CreatorNameROBLOXIsTrustedTrue
    NameSpace Hallway FloorAssetId56446557AssetSetId360363AssetVersionId138012580CreatorNameROBLOXIsTrustedTrue
    NameSpace HatchAssetId56446583AssetSetId360363AssetVersionId147509468CreatorNameROBLOXIsTrustedTrue
    NameSpace Steps - CornerAssetId56446608AssetSetId360363AssetVersionId138012706CreatorNameROBLOXIsTrustedTrue
    NameSpace StepsAssetId56446629AssetSetId360363AssetVersionId138012758CreatorNameROBLOXIsTrustedTrue
    NameSpace Wall - CornerAssetId56446648AssetSetId360363AssetVersionId138012804CreatorNameROBLOXIsTrustedTrue
    NameSpace WallAssetId56446665AssetSetId360363AssetVersionId138012845CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/360365 b/maintenance/asset/360365 deleted file mode 100644 index 2f07735..0000000 --- a/maintenance/asset/360365 +++ /dev/null @@ -1 +0,0 @@ -NameFlag - RedAssetId56446867AssetSetId360365AssetVersionId138013204CreatorNameROBLOXIsTrustedTrue
    NameMedieval Desk Chair - RedAssetId56446930AssetSetId360365AssetVersionId138013360CreatorNameROBLOXIsTrustedTrue
    NameThrone - RedAssetId56446956AssetSetId360365AssetVersionId138013409CreatorNameROBLOXIsTrustedTrue
    NameCarpet - RedAssetId56446995AssetSetId360365AssetVersionId138013482CreatorNameROBLOXIsTrustedTrue
    NameCoat of Arms - BlueAssetId56447027AssetSetId360365AssetVersionId138013563CreatorNameROBLOXIsTrustedTrue
    NameFlag - BlueAssetId56447040AssetSetId360365AssetVersionId138013606CreatorNameROBLOXIsTrustedTrue
    NameMedieval Desk Chair - BlueAssetId56447106AssetSetId360365AssetVersionId138013737CreatorNameROBLOXIsTrustedTrue
    NameThrone - BlueAssetId56447149AssetSetId360365AssetVersionId138013830CreatorNameROBLOXIsTrustedTrue
    NameAged Crusader PaintingAssetId56447217AssetSetId360365AssetVersionId138013973CreatorNameROBLOXIsTrustedTrue
    NameBattle at the Castle PaintingAssetId56447250AssetSetId360365AssetVersionId138014035CreatorNameROBLOXIsTrustedTrue
    NameKnighted PaintingAssetId56447288AssetSetId360365AssetVersionId138014099CreatorNameROBLOXIsTrustedTrue
    NameLady & Knight PaintingAssetId56447356AssetSetId360365AssetVersionId138014246CreatorNameROBLOXIsTrustedTrue
    NameJousting TapestryAssetId56447444AssetSetId360365AssetVersionId138014432CreatorNameROBLOXIsTrustedTrue
    NameUnicorn TapestryAssetId56447479AssetSetId360365AssetVersionId138014524CreatorNameROBLOXIsTrustedTrue
    NameRoyal Red TapestryAssetId56447703AssetSetId360365AssetVersionId138015025CreatorNameROBLOXIsTrustedTrue
    NameWriting DeskAssetId56447744AssetSetId360365AssetVersionId138015120CreatorNameROBLOXIsTrustedTrue
    NameCastle Dining ChairAssetId56447776AssetSetId360365AssetVersionId138015187CreatorNameROBLOXIsTrustedTrue
    NameCastle Dining TableAssetId56447803AssetSetId360365AssetVersionId138015243CreatorNameROBLOXIsTrustedTrue
    NameWellAssetId56447829AssetSetId360365AssetVersionId138015312CreatorNameROBLOXIsTrustedTrue
    NameStablesAssetId56447853AssetSetId360365AssetVersionId138015361CreatorNameROBLOXIsTrustedTrue
    NameCoat of Arms - RedAssetId56446833AssetSetId360365AssetVersionId158670760CreatorNameROBLOXIsTrustedTrue
    NameLord's Entrance PaintingAssetId56447318AssetSetId360365AssetVersionId158670874CreatorNameROBLOXIsTrustedTrue
    NameTorchAssetId56447717AssetSetId360365AssetVersionId157984552CreatorNameROBLOXIsTrustedTrue
    NameCastle Carpet - BlueAssetId65894507AssetSetId360365AssetVersionId157984473CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/360369 b/maintenance/asset/360369 deleted file mode 100644 index 2ff2fe4..0000000 --- a/maintenance/asset/360369 +++ /dev/null @@ -1 +0,0 @@ -NameWeathervaneAssetId56447956AssetSetId360369AssetVersionId138015595CreatorNameROBLOXIsTrustedTrue
    NameRoof - RedAssetId56448088AssetSetId360369AssetVersionId138015843CreatorNameROBLOXIsTrustedTrue
    NameRoof - BlueAssetId56448168AssetSetId360369AssetVersionId138016003CreatorNameROBLOXIsTrustedTrue
    NameArch with railingAssetId56448208AssetSetId360369AssetVersionId138016078CreatorNameROBLOXIsTrustedTrue
    NameArchAssetId56448235AssetSetId360369AssetVersionId138016130CreatorNameROBLOXIsTrustedTrue
    NameRampart Support - DiagonalAssetId56448307AssetSetId360369AssetVersionId138016290CreatorNameROBLOXIsTrustedTrue
    NameRampart - DiagonalAssetId56448331AssetSetId360369AssetVersionId138016352CreatorNameROBLOXIsTrustedTrue
    NameRampart Support - CornerAssetId56448408AssetSetId360369AssetVersionId138016535CreatorNameROBLOXIsTrustedTrue
    NameRampart - CornerAssetId56448439AssetSetId360369AssetVersionId138016588CreatorNameROBLOXIsTrustedTrue
    NameRampart SupportAssetId56448479AssetSetId360369AssetVersionId138016669CreatorNameROBLOXIsTrustedTrue
    NameRampartAssetId56448503AssetSetId360369AssetVersionId138016724CreatorNameROBLOXIsTrustedTrue
    NameWindow - Tall CornerAssetId56448529AssetSetId360369AssetVersionId138016788CreatorNameROBLOXIsTrustedTrue
    NameWindow - TallAssetId56448556AssetSetId360369AssetVersionId138016844CreatorNameROBLOXIsTrustedTrue
    NameWindow - Cross DesignAssetId56448609AssetSetId360369AssetVersionId138016944CreatorNameROBLOXIsTrustedTrue
    NameWindow - SmallAssetId56448660AssetSetId360369AssetVersionId138017036CreatorNameROBLOXIsTrustedTrue
    NameCastle DoorAssetId56448697AssetSetId360369AssetVersionId138017113CreatorNameROBLOXIsTrustedTrue
    NameDrawbridgeAssetId56448720AssetSetId360369AssetVersionId138017182CreatorNameROBLOXIsTrustedTrue
    NameCastle Wall - CornerAssetId56448738AssetSetId360369AssetVersionId138017229CreatorNameROBLOXIsTrustedTrue
    NameCastle WallAssetId56448754AssetSetId360369AssetVersionId138017266CreatorNameROBLOXIsTrustedTrue
    NameRoblox FlagAssetId56448011AssetSetId360369AssetVersionId168423501CreatorNameROBLOXIsTrustedTrue
    NameSteeple - RedAssetId56448055AssetSetId360369AssetVersionId168423669CreatorNameROBLOXIsTrustedTrue
    NameSteeple - BlueAssetId56448122AssetSetId360369AssetVersionId168423571CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/360371 b/maintenance/asset/360371 deleted file mode 100644 index 679cb06..0000000 --- a/maintenance/asset/360371 +++ /dev/null @@ -1 +0,0 @@ -NameWood BridgeAssetId56448952AssetSetId360371AssetVersionId138017728CreatorNameROBLOXIsTrustedTrue
    NameFlowersAssetId56448980AssetSetId360371AssetVersionId138017788CreatorNameROBLOXIsTrustedTrue
    NameMailboxAssetId56449011AssetSetId360371AssetVersionId138017843CreatorNameROBLOXIsTrustedTrue
    NameStreetlightAssetId56449028AssetSetId360371AssetVersionId142449877CreatorNameROBLOXIsTrustedTrue
    NameFenceAssetId56449052AssetSetId360371AssetVersionId138017929CreatorNameROBLOXIsTrustedTrue
    NameAutumn Tree - LargeAssetId56449099AssetSetId360371AssetVersionId138018028CreatorNameROBLOXIsTrustedTrue
    NameTree - SmallAssetId56449132AssetSetId360371AssetVersionId138018107CreatorNameROBLOXIsTrustedTrue
    NameTree - MediumAssetId56449156AssetSetId360371AssetVersionId138018154CreatorNameROBLOXIsTrustedTrue
    NameTree - LargeAssetId56449188AssetSetId360371AssetVersionId138018219CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/360372 b/maintenance/asset/360372 deleted file mode 100644 index b2fe5e2..0000000 --- a/maintenance/asset/360372 +++ /dev/null @@ -1 +0,0 @@ -NameCabinets - Top SmallAssetId56449305AssetSetId360372AssetVersionId138018482CreatorNameROBLOXIsTrustedTrue
    NameCabinets - TopAssetId56449332AssetSetId360372AssetVersionId138018536CreatorNameROBLOXIsTrustedTrue
    NameOvenAssetId56449359AssetSetId360372AssetVersionId138018585CreatorNameROBLOXIsTrustedTrue
    NameDishwasherAssetId56449386AssetSetId360372AssetVersionId138018640CreatorNameROBLOXIsTrustedTrue
    NameKitchen SinkAssetId56449402AssetSetId360372AssetVersionId138018686CreatorNameROBLOXIsTrustedTrue
    NameKitchen CountersAssetId56449449AssetSetId360372AssetVersionId138018773CreatorNameROBLOXIsTrustedTrue
    NameDining ChairAssetId56449487AssetSetId360372AssetVersionId138018860CreatorNameROBLOXIsTrustedTrue
    NameDining TableAssetId56449509AssetSetId360372AssetVersionId138018911CreatorNameROBLOXIsTrustedTrue
    NameBathroom MirrorAssetId56449539AssetSetId360372AssetVersionId138018987CreatorNameROBLOXIsTrustedTrue
    NameBathroom SinkAssetId56449580AssetSetId360372AssetVersionId138019069CreatorNameROBLOXIsTrustedTrue
    NameBathtub & ShowerAssetId56449624AssetSetId360372AssetVersionId138019183CreatorNameROBLOXIsTrustedTrue
    NameEnd TableAssetId56449649AssetSetId360372AssetVersionId138019223CreatorNameROBLOXIsTrustedTrue
    NameDresser - TallAssetId56449729AssetSetId360372AssetVersionId138019384CreatorNameROBLOXIsTrustedTrue
    NameDresser - WideAssetId56449753AssetSetId360372AssetVersionId138019425CreatorNameROBLOXIsTrustedTrue
    NameBedAssetId56449778AssetSetId360372AssetVersionId138019483CreatorNameROBLOXIsTrustedTrue
    NameBookshelfAssetId56449804AssetSetId360372AssetVersionId138019533CreatorNameROBLOXIsTrustedTrue
    NameCoffee TableAssetId56449842AssetSetId360372AssetVersionId138019606CreatorNameROBLOXIsTrustedTrue
    NameStanding LampAssetId56449883AssetSetId360372AssetVersionId138019671CreatorNameROBLOXIsTrustedTrue
    NameFireplaceAssetId56449926AssetSetId360372AssetVersionId138019770CreatorNameROBLOXIsTrustedTrue
    NameCouchAssetId56449951AssetSetId360372AssetVersionId138019820CreatorNameROBLOXIsTrustedTrue
    NameToiletAssetId56449594AssetSetId360372AssetVersionId157983940CreatorNameROBLOXIsTrustedTrue
    NameFlatscreen TVAssetId56449913AssetSetId360372AssetVersionId157984052CreatorNameROBLOXIsTrustedTrue
    NameRefrigeratorAssetId65894286AssetSetId360372AssetVersionId157983991CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/360375 b/maintenance/asset/360375 deleted file mode 100644 index 0b3a9c2..0000000 --- a/maintenance/asset/360375 +++ /dev/null @@ -1 +0,0 @@ -NameChimneyAssetId56449996AssetSetId360375AssetVersionId138019902CreatorNameROBLOXIsTrustedTrue
    NameRoof - PeakAssetId56450017AssetSetId360375AssetVersionId138019961CreatorNameROBLOXIsTrustedTrue
    NameRoof - Inner CornerAssetId56450038AssetSetId360375AssetVersionId138020004CreatorNameROBLOXIsTrustedTrue
    NameRoofAssetId56450063AssetSetId360375AssetVersionId138020052CreatorNameROBLOXIsTrustedTrue
    NameWindow - SmallAssetId56450092AssetSetId360375AssetVersionId138020114CreatorNameROBLOXIsTrustedTrue
    NameWindow - Tall CornerAssetId56450197AssetSetId360375AssetVersionId138020372CreatorNameROBLOXIsTrustedTrue
    NameWindow - TallAssetId56450222AssetSetId360375AssetVersionId138020435CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/360378 b/maintenance/asset/360378 deleted file mode 100644 index b73e67e..0000000 --- a/maintenance/asset/360378 +++ /dev/null @@ -1 +0,0 @@ -NameSteps - Turn LeftAssetId56450261AssetSetId360378AssetVersionId138020529CreatorNameROBLOXIsTrustedTrue
    NameSteps - Turn RightAssetId56450290AssetSetId360378AssetVersionId138020609CreatorNameROBLOXIsTrustedTrue
    NameSteps - CornerAssetId56450320AssetSetId360378AssetVersionId138020678CreatorNameROBLOXIsTrustedTrue
    NameStepsAssetId56450340AssetSetId360378AssetVersionId138020722CreatorNameROBLOXIsTrustedTrue
    NameLadderAssetId56450238AssetSetId360378AssetVersionId144863277CreatorNameROBLOXIsTrustedTrue
    NameTrapdoor - IceAssetId41324919AssetSetId360378AssetVersionId138011451CreatorNameROBLOXIsTrustedTrue
    NameTrapdoor - SlateAssetId41324907AssetSetId360378AssetVersionId138011504CreatorNameROBLOXIsTrustedTrue
    NameTrapdoor - GrassAssetId41324912AssetSetId360378AssetVersionId138011544CreatorNameROBLOXIsTrustedTrue
    NameCorroded Truss - HorizontalAssetId59617538AssetSetId360378AssetVersionId144839684CreatorNameROBLOXIsTrustedTrue
    NameCorroded Truss - Centered VerticalAssetId59617344AssetSetId360378AssetVersionId144839254CreatorNameROBLOXIsTrustedTrue
    NameCorroded Truss - Corner VerticalAssetId59617845AssetSetId360378AssetVersionId144840347CreatorNameROBLOXIsTrustedTrue
    NameMetal Truss - HorizontalAssetId59617492AssetSetId360378AssetVersionId144839585CreatorNameROBLOXIsTrustedTrue
    NameMetal Truss - Centered VerticalAssetId59617205AssetSetId360378AssetVersionId144838964CreatorNameROBLOXIsTrustedTrue
    NameMetal Truss - Corner VerticalAssetId59617391AssetSetId360378AssetVersionId144839382CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/360380 b/maintenance/asset/360380 deleted file mode 100644 index 33009dc..0000000 --- a/maintenance/asset/360380 +++ /dev/null @@ -1 +0,0 @@ -NameBlock - BrickAssetId56450668AssetSetId360380AssetVersionId138021372CreatorNameROBLOXIsTrustedTrue
    NameBlock - SandAssetId41324966AssetSetId360380AssetVersionId138021709CreatorNameROBLOXIsTrustedTrue
    NameBlock - SlateAssetId41324945AssetSetId360380AssetVersionId138021799CreatorNameROBLOXIsTrustedTrue
    NameBlock - GraniteAssetId41324946AssetSetId360380AssetVersionId138021914CreatorNameROBLOXIsTrustedTrue
    NameBlock - MapleAssetId41324957AssetSetId360380AssetVersionId138021993CreatorNameROBLOXIsTrustedTrue
    NameBlock - MahoganyAssetId41324954AssetSetId360380AssetVersionId138022028CreatorNameROBLOXIsTrustedTrue
    NameIce - CornerAssetId56451599AssetSetId360380AssetVersionId138023443CreatorNameROBLOXIsTrustedTrue
    NameIce - Long WedgeAssetId56451638AssetSetId360380AssetVersionId138023520CreatorNameROBLOXIsTrustedTrue
    NameIce - WedgeAssetId56451658AssetSetId360380AssetVersionId138023576CreatorNameROBLOXIsTrustedTrue
    NameIce - BlockAssetId56451715AssetSetId360380AssetVersionId138023698CreatorNameROBLOXIsTrustedTrue
    NameMud - CornerAssetId56451745AssetSetId360380AssetVersionId138023763CreatorNameROBLOXIsTrustedTrue
    NameMud - Long WedgeAssetId56451777AssetSetId360380AssetVersionId138023833CreatorNameROBLOXIsTrustedTrue
    NameMud - WedgeAssetId56451808AssetSetId360380AssetVersionId138023897CreatorNameROBLOXIsTrustedTrue
    NameMud - BlockAssetId56451835AssetSetId360380AssetVersionId138023958CreatorNameROBLOXIsTrustedTrue
    NameStone - CornerAssetId56451873AssetSetId360380AssetVersionId138024059CreatorNameROBLOXIsTrustedTrue
    NameStone - Long WedgeAssetId56451909AssetSetId360380AssetVersionId138024120CreatorNameROBLOXIsTrustedTrue
    NameStone - WedgeAssetId56451936AssetSetId360380AssetVersionId138024173CreatorNameROBLOXIsTrustedTrue
    NameStone - BlockAssetId56451953AssetSetId360380AssetVersionId138024211CreatorNameROBLOXIsTrustedTrue
    NameGrass - CornerAssetId56451992AssetSetId360380AssetVersionId138024274CreatorNameROBLOXIsTrustedTrue
    NameGrass - Long WedgeAssetId56452031AssetSetId360380AssetVersionId138024331CreatorNameROBLOXIsTrustedTrue
    NameGrass - WedgeAssetId56452072AssetSetId360380AssetVersionId138024407CreatorNameROBLOXIsTrustedTrue
    NameGrass - BlockAssetId56452103AssetSetId360380AssetVersionId138024462CreatorNameROBLOXIsTrustedTrue
    NameWood - CornerAssetId56452119AssetSetId360380AssetVersionId138024511CreatorNameROBLOXIsTrustedTrue
    NameWood - Long WedgeAssetId56452145AssetSetId360380AssetVersionId138024574CreatorNameROBLOXIsTrustedTrue
    NameWood - WedgeAssetId56452182AssetSetId360380AssetVersionId138024674CreatorNameROBLOXIsTrustedTrue
    NameWood - BlockAssetId56452191AssetSetId360380AssetVersionId138024705CreatorNameROBLOXIsTrustedTrue
    NameCorner Block - PinkAssetId56452267AssetSetId360380AssetVersionId144837753CreatorNameROBLOXIsTrustedTrue
    NameBlock - PinkAssetId56452293AssetSetId360380AssetVersionId144837709CreatorNameROBLOXIsTrustedTrue
    NameCorner Block - MagentaAssetId56452312AssetSetId360380AssetVersionId144837659CreatorNameROBLOXIsTrustedTrue
    NameBlock - MagentaAssetId56452342AssetSetId360380AssetVersionId144837614CreatorNameROBLOXIsTrustedTrue
    NameCorner Block - PurpleAssetId56452381AssetSetId360380AssetVersionId144837468CreatorNameROBLOXIsTrustedTrue
    NameBlock - PurpleAssetId56452411AssetSetId360380AssetVersionId144837425CreatorNameROBLOXIsTrustedTrue
    NameCorner Block - CyanAssetId56452438AssetSetId360380AssetVersionId144837571CreatorNameROBLOXIsTrustedTrue
    NameBlock - CyanAssetId56452470AssetSetId360380AssetVersionId144837526CreatorNameROBLOXIsTrustedTrue
    NameCorner Block - BlueAssetId56452507AssetSetId360380AssetVersionId144837862CreatorNameROBLOXIsTrustedTrue
    NameBlock - BlueAssetId56452539AssetSetId360380AssetVersionId144837808CreatorNameROBLOXIsTrustedTrue
    NameCorner Block - Dark GreenAssetId56452573AssetSetId360380AssetVersionId144837975CreatorNameROBLOXIsTrustedTrue
    NameBlock - Dark GreenAssetId56452610AssetSetId360380AssetVersionId144837924CreatorNameROBLOXIsTrustedTrue
    NameCorner Block - GreenAssetId56452628AssetSetId360380AssetVersionId144838051CreatorNameROBLOXIsTrustedTrue
    NameBlock - GreenAssetId56452651AssetSetId360380AssetVersionId144838008CreatorNameROBLOXIsTrustedTrue
    NameCorner Block - YellowAssetId56452687AssetSetId360380AssetVersionId144838136CreatorNameROBLOXIsTrustedTrue
    NameBlock - YellowAssetId56452718AssetSetId360380AssetVersionId144838096CreatorNameROBLOXIsTrustedTrue
    NameCorner Block - OrangeAssetId56452752AssetSetId360380AssetVersionId144838246CreatorNameROBLOXIsTrustedTrue
    NameBlock - OrangeAssetId56452768AssetSetId360380AssetVersionId144838210CreatorNameROBLOXIsTrustedTrue
    NameCorner Block - RedAssetId56452798AssetSetId360380AssetVersionId144838317CreatorNameROBLOXIsTrustedTrue
    NameBlock - RedAssetId56452821AssetSetId360380AssetVersionId144838286CreatorNameROBLOXIsTrustedTrue
    NameCorner Block - WhiteAssetId56452849AssetSetId360380AssetVersionId144838406CreatorNameROBLOXIsTrustedTrue
    NameBlock - WhiteAssetId56452868AssetSetId360380AssetVersionId144838363CreatorNameROBLOXIsTrustedTrue
    NameCorner Block - GrayAssetId56452995AssetSetId360380AssetVersionId144838478CreatorNameROBLOXIsTrustedTrue
    NameBlock - GrayAssetId56453012AssetSetId360380AssetVersionId144838439CreatorNameROBLOXIsTrustedTrue
    NameCorner Block - BlackAssetId56453030AssetSetId360380AssetVersionId144837348CreatorNameROBLOXIsTrustedTrue
    NameBlock - BlackAssetId56453053AssetSetId360380AssetVersionId144837285CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/38037265 b/maintenance/asset/38037265 deleted file mode 100644 index 354855a..0000000 --- a/maintenance/asset/38037265 +++ /dev/null @@ -1,392 +0,0 @@ - - null - nil - - - false - - Health - function waitForChild(parent, childName) - local child = parent:findFirstChild(childName) - if child then return child end - while true do - child = parent.ChildAdded:wait() - if child.Name==childName then return child end - end -end - --- declarations -local Figure = script.Parent -local Head = waitForChild(Figure, "Head") -local Humanoid = waitForChild(Figure, "Humanoid") -local regening = false - --- regeneration -function regenHealth() - if regening then return end - regening = true - while Humanoid.Health < Humanoid.MaxHealth do - local s = wait(1) - local health = Humanoid.Health - if health > 0 and health < Humanoid.MaxHealth then - local newHealthDelta = 0.01 * s * Humanoid.MaxHealth - health = health + newHealthDelta - Humanoid.Health = math.min(health,Humanoid.MaxHealth) - end - end - if Humanoid.Health > Humanoid.MaxHealth then - Humanoid.Health = Humanoid.MaxHealth - end - regening = false -end - -Humanoid.HealthChanged:connect(regenHealth) - - true - - - - - false - - HealthScript v3.1 - local HealthGUI_prototype = script:FindFirstChild("HealthGUI") -local lastHealth = 100 -local lastHealth2 = 100 -local maxWidth = 0.96 - -local humanoid = script.Parent.Humanoid - -if (humanoid == nil) then - print("ERROR: no humanoid found in 'HealthScript v3.1'") -end - - -function CreateGUI() - local p = game.Players:GetPlayerFromCharacter(humanoid.Parent) - HealthGUI_prototype.Parent = p.PlayerGui -end - -function UpdateGUI(health) - tray = HealthGUI_prototype.tray - local width = (health / humanoid.MaxHealth) * maxWidth - local height = 0.83 - local lastX = tray.bar.Position.X.Scale - local x = 0.019 + (maxWidth - width) - local y = 0.1 - - tray.bar.Position = UDim2.new(x,0,y, 0) - tray.bar.Size = UDim2.new(width, 0, height, 0) - -- If more than 1/4 health, bar = green. Else, bar = red. - if( (health / humanoid.MaxHealth) > 0.25 ) then - tray.barRed.Size = UDim2.new(0, 0, 0, 0) - else - tray.barRed.Position = tray.bar.Position - tray.barRed.Size = tray.bar.Size - tray.bar.Size = UDim2.new(0, 0, 0, 0) - end - - if ( (lastHealth - health) > (humanoid.MaxHealth / 10) ) then - lastHealth = health - - if humanoid.Health ~= humanoid.MaxHealth then - delay(0,function() - AnimateHurtOverlay() - end) - delay(0,function() - AnimateBars(x, y, lastX, height) - end) - end - else - lastHealth = health - end -end - - -function HealthChanged(health) - UpdateGUI(health) - if ( (lastHealth2 - health) > (humanoid.MaxHealth / 10) ) then - lastHealth2 = health - else - lastHealth2 = health - end -end - -function AnimateBars(x, y, lastX, height) - tray = HealthGUI_prototype.tray - local width = math.abs(x - lastX) - if( x > lastX ) then - x = lastX - end - tray.bar2.Position = UDim2.new(x,0, y, 0) - tray.bar2.Size = UDim2.new(width, 0, height, 0) - tray.bar2.BackgroundTransparency = 0 - local GBchannels = 1 - local j = 0.2 - - local i_total = 30 - for i=1,i_total do - -- Increment Values - if (GBchannels < 0.2) then - j = -j - end - GBchannels = GBchannels + j - if (i > (i_total - 10)) then - tray.bar2.BackgroundTransparency = tray.bar2.BackgroundTransparency + 0.1 - end - tray.bar2.BackgroundColor3 = Color3.new(1, GBchannels, GBchannels) - - wait(0.02) - end -end - -function AnimateHurtOverlay() - -- Start: - -- overlay.Position = UDim2.new(0, 0, 0, -22) - -- overlay.Size = UDim2.new(1, 0, 1.15, 30) - - -- Finish: - -- overlay.Position = UDim2.new(-2, 0, -2, -22) - -- overlay.Size = UDim2.new(4.5, 0, 4.65, 30) - - overlay = HealthGUI_prototype.hurtOverlay - overlay.Position = UDim2.new(-2, 0, -2, -22) - overlay.Size = UDim2.new(4.5, 0, 4.65, 30) - -- Animate In, fast - local i_total = 2 - local wiggle_total = 0 - local wiggle_i = 0.02 - for i=1,i_total do - overlay.Position = UDim2.new( (-2 + (2 * (i/i_total)) + wiggle_total/2), 0, (-2 + (2 * (i/i_total)) + wiggle_total/2), -22 ) - overlay.Size = UDim2.new( (4.5 - (3.5 * (i/i_total)) + wiggle_total), 0, (4.65 - (3.5 * (i/i_total)) + wiggle_total), 30 ) - wait(0.01) - end - - i_total = 30 - - wait(0.03) - - -- Animate Out, slow - for i=1,i_total do - if( math.abs(wiggle_total) > (wiggle_i * 3) ) then - wiggle_i = -wiggle_i - end - wiggle_total = wiggle_total + wiggle_i - overlay.Position = UDim2.new( (0 - (2 * (i/i_total)) + wiggle_total/2), 0, (0 - (2 * (i/i_total)) + wiggle_total/2), -22 ) - overlay.Size = UDim2.new( (1 + (3.5 * (i/i_total)) + wiggle_total), 0, (1.15 + (3.5 * (i/i_total)) + wiggle_total), 30 ) - wait(0.01) - end - - -- Hide after we're done - overlay.Position = UDim2.new(10, 0, 0, 0) -end - -CreateGUI() -humanoid.HealthChanged:connect(HealthChanged) -humanoid.Died:connect(function() HealthChanged(0) end) - true - - - - HealthGUI - true - - - - false - 4290164919 - 1 - 4279970357 - 1 - false - http://www.jarfeh.xyz/asset/?id=34854607 - hurtOverlay - - 2 - 0 - 0 - -22 - - - 1 - 0 - 1.1500001 - 30 - - 0 - true - 1 - true - - - - - false - 4285215356 - 1 - 4279970357 - 1 - false - tray - - 0.5 - -44 - 1 - -26 - - - 0 - 170 - 0 - 18 - - 2 - 0 - true - 1 - true - - - - false - 4294967295 - 1 - 4279970357 - 1 - false - http://www.jarfeh.xyz/asset/?id=35238000 - bkg - - 0 - 0 - 0 - 0 - - - 1 - 0 - 1 - 0 - - 0 - true - 1 - true - - - - - false - 4294967295 - 1 - 4279970357 - 1 - false - http://www.jarfeh.xyz/asset/?id=35238036 - barRed - - 0.0189999994 - 0 - 0.100000001 - 0 - - - 0 - 0 - 0 - 0 - - 0 - true - 1 - true - - - - - false - 4294967295 - 1.00000012 - 4279970357 - 0 - false - bar2 - - 0.0189999994 - 0 - 0.100000001 - 0 - - - 0.192000002 - 0 - 0.829999983 - 0 - - 0 - 0 - true - 1 - true - - - - - false - 4294967295 - 1 - 4279970357 - 1 - false - http://www.jarfeh.xyz/asset/?id=35238053 - bar - - 0.0189999994 - 0 - 0.100000001 - 0 - - - 0.959999979 - 0 - 0.829999983 - 0 - - 0 - true - 1 - true - - - - - false - 4294967295 - 1 - 4279970357 - 0 - false - http://www.jarfeh.xyz/asset/?id=34816363 - label - - 0.680000007 - 0 - 0.300000012 - 0 - - - 0.25 - 0 - 0.349999994 - 0 - - 0 - true - 1 - true - - - - - - \ No newline at end of file diff --git a/maintenance/asset/383875 b/maintenance/asset/383875 deleted file mode 100644 index a2098dd..0000000 --- a/maintenance/asset/383875 +++ /dev/null @@ -1 +0,0 @@ -NameSmall Neutral SpawnAssetId59524197AssetSetId383875AssetVersionId144864324CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/383878 b/maintenance/asset/383878 deleted file mode 100644 index 3975e71..0000000 --- a/maintenance/asset/383878 +++ /dev/null @@ -1 +0,0 @@ -NameTrowel DispenserAssetId59524124AssetSetId383878AssetVersionId171986570CreatorNameROBLOXIsTrustedTrue
    NameSuperball DispenserAssetId59524102AssetSetId383878AssetVersionId171986758CreatorNameROBLOXIsTrustedTrue
    NameSlingshot DispenserAssetId59524079AssetSetId383878AssetVersionId171986806CreatorNameROBLOXIsTrustedTrue
    NameRocket Launcher DispenserAssetId59524044AssetSetId383878AssetVersionId171986853CreatorNameROBLOXIsTrustedTrue
    NameTimebomb DispenserAssetId59524006AssetSetId383878AssetVersionId171986652CreatorNameROBLOXIsTrustedTrue
    NameSword DispenserAssetId59524162AssetSetId383878AssetVersionId171986713CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/383879 b/maintenance/asset/383879 deleted file mode 100644 index b4be4a5..0000000 --- a/maintenance/asset/383879 +++ /dev/null @@ -1 +0,0 @@ -NameBusAssetId59524699AssetSetId383879AssetVersionId144837133CreatorNameROBLOXIsTrustedTrue
    NameRacecarAssetId59524640AssetSetId383879AssetVersionId144837042CreatorNameROBLOXIsTrustedTrue
    NameTruckAssetId59524606AssetSetId383879AssetVersionId144836955CreatorNameROBLOXIsTrustedTrue
    NameCarAssetId59524676AssetSetId383879AssetVersionId144837102CreatorNameROBLOXIsTrustedTrue
    NameJeepAssetId59524622AssetSetId383879AssetVersionId146134623CreatorNameROBLOXIsTrustedTrue
    NameUFOAssetId59524729AssetSetId383879AssetVersionId154615236CreatorNameROBLOXIsTrustedTrue
    NamePolice CarAssetId59524656AssetSetId383879AssetVersionId161973480CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/4 b/maintenance/asset/4 deleted file mode 100644 index 7780f6d..0000000 --- a/maintenance/asset/4 +++ /dev/null @@ -1,110 +0,0 @@ -%4% -local controlFrame = script.Parent:FindFirstChild("ControlFrame") - -if not controlFrame then return end - -local topLeftControl = controlFrame:FindFirstChild("TopLeftControl") -local bottomLeftControl = controlFrame:FindFirstChild("BottomLeftControl") -local bottomRightControl = controlFrame:FindFirstChild("BottomRightControl") - - -local frameTip = Instance.new("TextLabel") -frameTip.Name = "ToolTip" -frameTip.Text = "" -frameTip.Font = Enum.Font.ArialBold -frameTip.FontSize = Enum.FontSize.Size12 -frameTip.TextColor3 = Color3.new(1,1,1) -frameTip.BorderSizePixel = 0 -frameTip.ZIndex = 10 -frameTip.Size = UDim2.new(2,0,1,0) -frameTip.Position = UDim2.new(1,0,0,0) -frameTip.BackgroundColor3 = Color3.new(0,0,0) -frameTip.BackgroundTransparency = 1 -frameTip.TextTransparency = 1 -frameTip.TextWrap = true - -local inside = Instance.new("BoolValue") -inside.Name = "inside" -inside.Value = false -inside.Parent = frameTip - -function setUpListeners(frameToListen) - local fadeSpeed = 0.1 - frameToListen.Parent.MouseEnter:connect(function() - if frameToListen:FindFirstChild("inside") then - frameToListen.inside.Value = true - wait(1.2) - if frameToListen.inside.Value then - while frameToListen.inside.Value and frameToListen.BackgroundTransparency > 0 do - frameToListen.BackgroundTransparency = frameToListen.BackgroundTransparency - fadeSpeed - frameToListen.TextTransparency = frameToListen.TextTransparency - fadeSpeed - wait() - end - end - end - end) - function killTip(killFrame) - killFrame.inside.Value = false - killFrame.BackgroundTransparency = 1 - killFrame.TextTransparency = 1 - end - frameToListen.Parent.MouseLeave:connect(function() killTip(frameToListen) end) - frameToListen.Parent.MouseButton1Click:connect(function() killTip(frameToListen) end) -end - -function createSettingsButtonTip(parent) - if parent == nil then - parent = bottomLeftControl:FindFirstChild("SettingsButton") - end - - local toolTip = frameTip:clone() - toolTip.RobloxLocked = true - toolTip.Text = "Settings/Leave Game" - toolTip.Position = UDim2.new(0,0,0,-18) - toolTip.Size = UDim2.new(0,120,0,20) - toolTip.Parent = parent - setUpListeners(toolTip) -end - -wait(5) -- make sure we are loaded in, won't need tool tips for first 5 seconds anyway - ----------------- set up Bottom Left Tool Tips ------------------------- - -local bottomLeftChildren = bottomLeftControl:GetChildren() -local hasSettingsTip = false - -for i = 1, #bottomLeftChildren do - - if bottomLeftChildren[i].Name == "Exit" then - local exitTip = frameTip:clone() - exitTip.RobloxLocked = true - exitTip.Text = "Leave Place" - exitTip.Position = UDim2.new(0,0,-1,0) - exitTip.Size = UDim2.new(1,0,1,0) - exitTip.Parent = bottomLeftChildren[i] - setUpListeners(exitTip) - elseif bottomLeftChildren[i].Name == "SettingsButton" then - hasSettingsTip = true - createSettingsButtonTip(bottomLeftChildren[i]) - end -end - ----------------- set up Bottom Right Tool Tips ------------------------- - -local bottomRightChildren = bottomRightControl:GetChildren() - -for i = 1, #bottomRightChildren do - if bottomRightChildren[i].Name:find("Camera") ~= nil then - local cameraTip = frameTip:clone() - cameraTip.RobloxLocked = true - cameraTip.Text = "Camera View" - if bottomRightChildren[i].Name:find("Zoom") then - cameraTip.Position = UDim2.new(-1,0,-1.5) - else - cameraTip.Position = UDim2.new(0,0,-1.5,0) - end - cameraTip.Size = UDim2.new(2,0,1.25,0) - cameraTip.Parent = bottomRightChildren[i] - setUpListeners(cameraTip) - end -end diff --git a/maintenance/asset/400 b/maintenance/asset/400 deleted file mode 100644 index 6a600d87e6159c75ec1c74a2945966d2c3a2b877..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205990 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�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

    t^WKpU>uQwhuK$a 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%0DbR7S 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

    y#9NJEh) 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 -J^3XVm`xpLO`0Xc8S#E|G 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�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�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£Vo-3{_RIU!;q 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%0A!kRd+*;@=L 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

    f2T&--7U4v$JrK^4xC5+jgf`L)EL=`u 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 z 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
  • -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 SpikeAssetId60793117AssetSetId400993AssetVersionId153094337CreatorNameROBLOXIsTrustedTrue
    NameButton (Wiring Only)AssetId58970275AssetSetId400993AssetVersionId147355705CreatorNameROBLOXIsTrustedTrue
    NameFlame Thrower (Wiring Only)AssetId58970146AssetSetId400993AssetVersionId153094491CreatorNameROBLOXIsTrustedTrue
    NameInvisible TriggerAssetId63132409AssetSetId400993AssetVersionId152003176CreatorNameROBLOXIsTrustedTrue
    NameWiring LeverAssetId63132445AssetSetId400993AssetVersionId155921932CreatorNameROBLOXIsTrustedTrue
    NameWiring DoorAssetId63132465AssetSetId400993AssetVersionId161727181CreatorNameROBLOXIsTrustedTrue
    NameIncineratorAssetId65819725AssetSetId400993AssetVersionId157818814CreatorNameROBLOXIsTrustedTrue
    NameLampAssetId65819756AssetSetId400993AssetVersionId157818876CreatorNameROBLOXIsTrustedTrue
    NameAND GateAssetId65819780AssetSetId400993AssetVersionId157818927CreatorNameROBLOXIsTrustedTrue
    NameOR GateAssetId65819804AssetSetId400993AssetVersionId157818966CreatorNameROBLOXIsTrustedTrue
    NameInverterAssetId65819911AssetSetId400993AssetVersionId157819180CreatorNameROBLOXIsTrustedTrue
    NameRepeaterAssetId65819925AssetSetId400993AssetVersionId157819225CreatorNameROBLOXIsTrustedTrue
    NameDelayAssetId65819947AssetSetId400993AssetVersionId157819272CreatorNameROBLOXIsTrustedTrue
    NameConveyer BeltAssetId65819976AssetSetId400993AssetVersionId161843087CreatorNameROBLOXIsTrustedTrue
    NameEnergy CoreAssetId65820011AssetSetId400993AssetVersionId157819411CreatorNameROBLOXIsTrustedTrue
    NameFloat PadAssetId65820060AssetSetId400993AssetVersionId161843167CreatorNameROBLOXIsTrustedTrue
    NameSideways Float PadAssetId65820095AssetSetId400993AssetVersionId161843140CreatorNameROBLOXIsTrustedTrue
    NameMagic BallAssetId65820129AssetSetId400993AssetVersionId157819643CreatorNameROBLOXIsTrustedTrue
    NameEnergy ButtonAssetId65820169AssetSetId400993AssetVersionId157819713CreatorNameROBLOXIsTrustedTrue
    NameAppearing PlatformAssetId67572059AssetSetId400993AssetVersionId161726541CreatorNameROBLOXIsTrustedTrue
    NameIris DoorAssetId67572213AssetSetId400993AssetVersionId161726910CreatorNameROBLOXIsTrustedTrue
    NameLazer TriggerAssetId67572224AssetSetId400993AssetVersionId165626002CreatorNameROBLOXIsTrustedTrue
    NameLight SwitchAssetId67572237AssetSetId400993AssetVersionId161726974CreatorNameROBLOXIsTrustedTrue
    NameAirlock DoorAssetId67572258AssetSetId400993AssetVersionId161727016CreatorNameROBLOXIsTrustedTrue
    NameWired TrapAssetId67572320AssetSetId400993AssetVersionId161727154CreatorNameROBLOXIsTrustedTrue
    NameTimerAssetId67572398AssetSetId400993AssetVersionId161727342CreatorNameROBLOXIsTrustedTrue
    NameSpeakerAssetId69281057AssetSetId400993AssetVersionId165623061CreatorNameROBLOXIsTrustedTrue
    NameClick ButtonAssetId69281032AssetSetId400993AssetVersionId165625890CreatorNameROBLOXIsTrustedTrue
    NameDrawbridgeAssetId69276460AssetSetId400993AssetVersionId165612353CreatorNameROBLOXIsTrustedTrue
    NameBoomboxAssetId69281292AssetSetId400993AssetVersionId165623674CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/401 b/maintenance/asset/401 deleted file mode 100644 index 31c64ac..0000000 --- a/maintenance/asset/401 +++ /dev/null @@ -1,10 +0,0 @@ - - null - nil - - - Clothing - http://jarfeh.xyz/asset/?id=400 - - - \ No newline at end of file diff --git a/maintenance/asset/433570 b/maintenance/asset/433570 deleted file mode 100644 index d4073c1..0000000 --- a/maintenance/asset/433570 +++ /dev/null @@ -1 +0,0 @@ -NameCastle DoorAssetId56448697AssetSetId433570AssetVersionId138017113CreatorNameROBLOXIsTrustedTrue
    NameSpace HatchAssetId56446583AssetSetId433570AssetVersionId147509468CreatorNameROBLOXIsTrustedTrue
    NameboomboxAssetId63132395AssetSetId433570AssetVersionId161852161CreatorNameROBLOXIsTrustedTrue
    NameWiring LeverAssetId63132445AssetSetId433570AssetVersionId155921932CreatorNameROBLOXIsTrustedTrue
    NamePortraitAssetId67572390AssetSetId433570AssetVersionId161727326CreatorNameROBLOXIsTrustedTrue
    NamePlace PictureAssetId67572378AssetSetId433570AssetVersionId161727301CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/433603 b/maintenance/asset/433603 deleted file mode 100644 index 3f97b79..0000000 --- a/maintenance/asset/433603 +++ /dev/null @@ -1 +0,0 @@ -NameMegaSandAssetId63590698AssetSetId433603AssetVersionId152955828CreatorNameROBLOXIsTrustedTrue
    NameMegaGrassAssetId63590695AssetSetId433603AssetVersionId152955824CreatorNameROBLOXIsTrustedTrue
    NameMegaBrickAssetId65962665AssetSetId433603AssetVersionId158139521CreatorNameROBLOXIsTrustedTrue
    NameStone BlockAssetId67994803AssetSetId433603AssetVersionId162679585CreatorNameROBLOXIsTrustedTrue
    NamePlastic (red)AssetId67994798AssetSetId433603AssetVersionId162679576CreatorNameROBLOXIsTrustedTrue
    NamePlastic (blue)AssetId67994786AssetSetId433603AssetVersionId162679555CreatorNameROBLOXIsTrustedTrue
    NamePlankAssetId67994775AssetSetId433603AssetVersionId162679533CreatorNameROBLOXIsTrustedTrue
    NameLogAssetId67994759AssetSetId433603AssetVersionId162679504CreatorNameROBLOXIsTrustedTrue
    NameIronAssetId67994750AssetSetId433603AssetVersionId162679489CreatorNameROBLOXIsTrustedTrue
    NameGravelAssetId67994743AssetSetId433603AssetVersionId162679474CreatorNameROBLOXIsTrustedTrue
    NameGraniteAssetId67994740AssetSetId433603AssetVersionId162679467CreatorNameROBLOXIsTrustedTrue
    NameGoldAssetId67994731AssetSetId433603AssetVersionId162679444CreatorNameROBLOXIsTrustedTrue
    NameCinder BlockAssetId67994724AssetSetId433603AssetVersionId162679428CreatorNameROBLOXIsTrustedTrue
    NameCementAssetId67994719AssetSetId433603AssetVersionId162679422CreatorNameROBLOXIsTrustedTrue
    NameAsphaltAssetId67994712AssetSetId433603AssetVersionId162679411CreatorNameROBLOXIsTrustedTrue
    NameAluminumAssetId67994706AssetSetId433603AssetVersionId162679401CreatorNameROBLOXIsTrustedTrue
    NameWaterAssetId82717697AssetSetId433603AssetVersionId195589381CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/438059 b/maintenance/asset/438059 deleted file mode 100644 index 4c24c59..0000000 --- a/maintenance/asset/438059 +++ /dev/null @@ -1 +0,0 @@ -NamePresentAssetId67187816AssetSetId438059AssetVersionId160879612CreatorNameROBLOXIsTrustedTrue
    NameChristmas TreeAssetId67187806AssetSetId438059AssetVersionId160879591CreatorNameROBLOXIsTrustedTrue
    NameSnowmanAssetId67187780AssetSetId438059AssetVersionId160879543CreatorNameROBLOXIsTrustedTrue
    NameWreathAssetId67187797AssetSetId438059AssetVersionId160879573CreatorNameROBLOXIsTrustedTrue
    NameMenorahAssetId67187771AssetSetId438059AssetVersionId160879529CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/462226 b/maintenance/asset/462226 deleted file mode 100644 index 28ada08..0000000 --- a/maintenance/asset/462226 +++ /dev/null @@ -1 +0,0 @@ -NameC4 ExplosiveAssetId65819994AssetSetId462226AssetVersionId161726840CreatorNameROBLOXIsTrustedTrue
    NameTesla CoilAssetId67625690AssetSetId462226AssetVersionId165690977CreatorNameROBLOXIsTrustedTrue
    \ No newline at end of file diff --git a/maintenance/asset/5 b/maintenance/asset/5 deleted file mode 100644 index a7e5ed9..0000000 --- a/maintenance/asset/5 +++ /dev/null @@ -1,2002 +0,0 @@ -%5% -local function waitForChild(instance, name) - while not instance:FindFirstChild(name) do - instance.ChildAdded:wait() - end -end - -local function waitForProperty(instance, property) - while not instance[property] do - instance.Changed:wait() - end -end - --- A Few Script Globals -local gui -if script.Parent:FindFirstChild("ControlFrame") then - gui = script.Parent:FindFirstChild("ControlFrame") -else - gui = script.Parent -end - -local helpButton = nil -local updateCameraDropDownSelection = nil -local updateVideoCaptureDropDownSelection = nil -local tweenTime = 0.2 - -local mouseLockLookScreenUrl = "http://www.jarfeh.xyz/asset?id=54071825" -local classicLookScreenUrl = "http://www.jarfeh.xyz/Asset?id=45915798" - -local hasGraphicsSlider = (game:GetService("CoreGui").Version >= 5) -local GraphicsQualityLevels = 10 -- how many levels we allow on graphics slider -local recordingVideo = false - -local currentMenuSelection = nil -local lastMenuSelection = {} - -local defaultPosition = UDim2.new(0,0,0,0) -local newGuiPlaces = {0,41324860} - -local centerDialogs = {} -local mainShield = nil - -local macClient = false -local success, isMac = pcall(function() return not game.GuiService.IsWindows end) -macClient = success and isMac - -local function Color3I(r,g,b) - return Color3.new(r/255,g/255,b/255) -end - -local function robloxLock(instance) - instance.RobloxLocked = true - children = instance:GetChildren() - if children then - for i, child in ipairs(children) do - robloxLock(child) - end - end -end - -function resumeGameFunction(shield) - shield.Settings:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - delay(tweenTime,function() - shield.Visible = false - for i = 1, #centerDialogs do - centerDialogs[i].Visible = false - game.GuiService:RemoveCenterDialog(centerDialogs[i]) - end - game.GuiService:RemoveCenterDialog(shield) - settingsButton.Active = true - currentMenuSelection = nil - lastMenuSelection = {} - end) -end - -function goToMenu(container,menuName, moveDirection,size,position) - if type(menuName) ~= "string" then return end - - table.insert(lastMenuSelection,currentMenuSelection) - if menuName == "GameMainMenu" then - lastMenuSelection = {} - end - - local containerChildren = container:GetChildren() - local selectedMenu = false - for i = 1, #containerChildren do - if containerChildren[i].Name == menuName then - containerChildren[i].Visible = true - currentMenuSelection = {container = container,name = menuName, direction = moveDirection, lastSize = size} - selectedMenu = true - if size and position then - containerChildren[i]:TweenSizeAndPosition(size,position,Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - elseif size then - containerChildren[i]:TweenSizeAndPosition(size,UDim2.new(0.5,-size.X.Offset/2,0.5,-size.Y.Offset/2),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - else - containerChildren[i]:TweenPosition(UDim2.new(0,0,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - end - else - if moveDirection == "left" then - containerChildren[i]:TweenPosition(UDim2.new(-1,-525,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - elseif moveDirection == "right" then - containerChildren[i]:TweenPosition(UDim2.new(1,525,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - elseif moveDirection == "up" then - containerChildren[i]:TweenPosition(UDim2.new(0,0,-1,-400),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - elseif moveDirection == "down" then - containerChildren[i]:TweenPosition(UDim2.new(0,0,1,400),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - end - delay(tweenTime,function() - containerChildren[i].Visible = false - end) - end - end -end - -function resetLocalCharacter() - local player = game.Players.LocalPlayer - if player then - if player.Character and player.Character:FindFirstChild("Humanoid") then - player.Character.Humanoid.Health = 0 - end - end -end - -local function createTextButton(text,style,fontSize,buttonSize,buttonPosition) - local newTextButton = Instance.new("TextButton") - newTextButton.Font = Enum.Font.Arial - newTextButton.FontSize = fontSize - newTextButton.Size = buttonSize - newTextButton.Position = buttonPosition - newTextButton.Style = style - newTextButton.TextColor3 = Color3.new(1,1,1) - newTextButton.Text = text - return newTextButton -end - -local function CreateTextButtons(frame, buttons, yPos, ySize) - if #buttons < 1 then - error("Must have more than one button") - end - - local buttonNum = 1 - local buttonObjs = {} - - local function toggleSelection(button) - for i, obj in ipairs(buttonObjs) do - if obj == button then - obj.Style = Enum.ButtonStyle.RobloxButtonDefault - else - obj.Style = Enum.ButtonStyle.RobloxButton - end - end - end - - for i, obj in ipairs(buttons) do - local button = Instance.new("TextButton") - button.Name = "Button" .. buttonNum - button.Font = Enum.Font.Arial - button.FontSize = Enum.FontSize.Size18 - button.AutoButtonColor = true - button.Style = Enum.ButtonStyle.RobloxButton - button.Text = obj.Text - button.TextColor3 = Color3.new(1,1,1) - button.MouseButton1Click:connect(function() toggleSelection(button) obj.Function() end) - button.Parent = frame - buttonObjs[buttonNum] = button - - buttonNum = buttonNum + 1 - end - - toggleSelection(buttonObjs[1]) - - local numButtons = buttonNum-1 - - if numButtons == 1 then - frame.Button1.Position = UDim2.new(0.35, 0, yPos.Scale, yPos.Offset) - frame.Button1.Size = UDim2.new(.4,0,ySize.Scale, ySize.Offset) - elseif numButtons == 2 then - frame.Button1.Position = UDim2.new(0.1, 0, yPos.Scale, yPos.Offset) - frame.Button1.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) - - frame.Button2.Position = UDim2.new(0.55, 0, yPos.Scale, yPos.Offset) - frame.Button2.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) - elseif numButtons >= 3 then - local spacing = .1 / numButtons - local buttonSize = .9 / numButtons - - buttonNum = 1 - while buttonNum <= numButtons do - buttonObjs[buttonNum].Position = UDim2.new(spacing*buttonNum + (buttonNum-1) * buttonSize, 0, yPos.Scale, yPos.Offset) - buttonObjs[buttonNum].Size = UDim2.new(buttonSize, 0, ySize.Scale, ySize.Offset) - buttonNum = buttonNum + 1 - end - end -end - -function setRecordGui(recording, stopRecordButton, recordVideoButton) - if recording then - stopRecordButton.Visible = true - recordVideoButton.Text = "Stop Recording" - else - stopRecordButton.Visible = false - recordVideoButton.Text = "Record Video" - end -end - -function recordVideoClick(recordVideoButton, stopRecordButton) - recordingVideo = not recordingVideo - setRecordGui(recordingVideo, stopRecordButton, recordVideoButton) -end - -function backToGame(buttonClicked, shield, settingsButton) - buttonClicked.Parent.Parent.Parent.Parent.Visible = false - shield.Visible = false - for i = 1, #centerDialogs do - game.GuiService:RemoveCenterDialog(centerDialogs[i]) - centerDialogs[i].Visible = false - end - centerDialogs = {} - game.GuiService:RemoveCenterDialog(shield) - settingsButton.Active = true -end - -function setDisabledState(guiObject) - if not guiObject then return end - - if guiObject:IsA("TextLabel") then - guiObject.TextTransparency = 0.9 - elseif guiObject:IsA("TextButton") then - guiObject.TextTransparency = 0.9 - guiObject.Active = false - else - if guiObject["ClassName"] then - print("setDisabledState() got object of unsupported type. object type is ",guiObject.ClassName) - end - end -end - -local function createHelpDialog(baseZIndex) - - if helpButton == nil then - if gui:FindFirstChild("TopLeftControl") and gui.TopLeftControl:FindFirstChild("Help") then - helpButton = gui.TopLeftControl.Help - elseif gui:FindFirstChild("BottomRightControl") and gui.BottomRightControl:FindFirstChild("Help") then - helpButton = gui.BottomRightControl.Help - end - end - - local shield = Instance.new("Frame") - shield.Name = "HelpDialogShield" - shield.Active = true - shield.Visible = false - shield.Size = UDim2.new(1,0,1,0) - shield.BackgroundColor3 = Color3I(51,51,51) - shield.BorderColor3 = Color3I(27,42,53) - shield.BackgroundTransparency = 0.4 - shield.ZIndex = baseZIndex + 1 - - local helpDialog = Instance.new("Frame") - helpDialog.Name = "HelpDialog" - helpDialog.Style = Enum.FrameStyle.RobloxRound - helpDialog.Position = UDim2.new(.2, 0, .2, 0) - helpDialog.Size = UDim2.new(0.6, 0, 0.6, 0) - helpDialog.Active = true - helpDialog.Parent = shield - - local titleLabel = Instance.new("TextLabel") - titleLabel.Name = "Title" - titleLabel.Text = "Keyboard & Mouse Controls" - titleLabel.Font = Enum.Font.ArialBold - titleLabel.FontSize = Enum.FontSize.Size36 - titleLabel.Position = UDim2.new(0, 0, 0.025, 0) - titleLabel.Size = UDim2.new(1, 0, 0, 40) - titleLabel.TextColor3 = Color3.new(1,1,1) - titleLabel.BackgroundTransparency = 1 - titleLabel.Parent = helpDialog - - local buttonRow = Instance.new("Frame") - buttonRow.Name = "Buttons" - buttonRow.Position = UDim2.new(0.1, 0, .07, 40) - buttonRow.Size = UDim2.new(0.8, 0, 0, 45) - buttonRow.BackgroundTransparency = 1 - buttonRow.Parent = helpDialog - - local imageFrame = Instance.new("Frame") - imageFrame.Name = "ImageFrame" - imageFrame.Position = UDim2.new(0.05, 0, 0.075, 80) - imageFrame.Size = UDim2.new(0.9, 0, .9, -120) - imageFrame.BackgroundTransparency = 1 - imageFrame.Parent = helpDialog - - local layoutFrame = Instance.new("Frame") - layoutFrame.Name = "LayoutFrame" - layoutFrame.Position = UDim2.new(0.5, 0, 0, 0) - layoutFrame.Size = UDim2.new(1.5, 0, 1, 0) - layoutFrame.BackgroundTransparency = 1 - layoutFrame.SizeConstraint = Enum.SizeConstraint.RelativeYY - layoutFrame.Parent = imageFrame - - local image = Instance.new("ImageLabel") - image.Name = "Image" - if UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then - image.Image = mouseLockLookScreenUrl - else - image.Image = classicLookScreenUrl - end - image.Position = UDim2.new(-0.5, 0, 0, 0) - image.Size = UDim2.new(1, 0, 1, 0) - image.BackgroundTransparency = 1 - image.Parent = layoutFrame - - local buttons = {} - buttons[1] = {} - buttons[1].Text = "Look" - buttons[1].Function = function() - if UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then - image.Image = mouseLockLookScreenUrl - else - image.Image = classicLookScreenUrl - end - end - buttons[2] = {} - buttons[2].Text = "Move" - buttons[2].Function = function() - image.Image = "http://jarfeh.xyz/asset/?id=45915811" - end - buttons[3] = {} - buttons[3].Text = "Gear" - buttons[3].Function = function() - image.Image = "http://jarfeh.xyz/asset/?id=45917596" - end - buttons[4] = {} - buttons[4].Text = "Zoom" - buttons[4].Function = function() - image.Image = "http://jarfeh.xyz/asset/?id=45915825" - end - - CreateTextButtons(buttonRow, buttons, UDim.new(0, 0), UDim.new(1,0)) - - - -- set up listeners for type of mouse mode, but keep constructing gui at same time - delay(0, function() - waitForChild(gui,"UserSettingsShield") - waitForChild(gui.UserSettingsShield,"Settings") - waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") - waitForChild(gui.UserSettingsShield.Settings.SettingsStyle, "GameSettingsMenu") - waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu, "CameraField") - waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField, "DropDownMenuButton") - gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Changed:connect(function(prop) - if prop ~= "Text" then return end - if buttonRow.Button1.Style == Enum.ButtonStyle.RobloxButtonDefault then -- only change if this is the currently selected panel - if gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Text == "Classic" then - image.Image = classicLookScreenUrl - else - image.Image = mouseLockLookScreenUrl - end - end - end) - end) - - - local okBtn = Instance.new("TextButton") - okBtn.Name = "OkBtn" - okBtn.Text = "OK" - okBtn.Modal = true - okBtn.Size = UDim2.new(0.3, 0, 0, 45) - okBtn.Position = UDim2.new(0.35, 0, .975, -50) - okBtn.Font = Enum.Font.Arial - okBtn.FontSize = Enum.FontSize.Size18 - okBtn.BackgroundTransparency = 1 - okBtn.TextColor3 = Color3.new(1,1,1) - okBtn.Style = Enum.ButtonStyle.RobloxButtonDefault - okBtn.MouseButton1Click:connect( - function() - shield.Visible = false - game.GuiService:RemoveCenterDialog(shield) - end) - okBtn.Parent = helpDialog - - robloxLock(shield) - return shield -end - -local function createLeaveConfirmationMenu(baseZIndex,shield) - local frame = Instance.new("Frame") - frame.Name = "LeaveConfirmationMenu" - frame.BackgroundTransparency = 1 - frame.Size = UDim2.new(1,0,1,0) - frame.Position = UDim2.new(0,0,2,400) - frame.ZIndex = baseZIndex + 4 - - local yesButton = createTextButton("Leave",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,313,0.8,0)) - yesButton.Name = "YesButton" - yesButton.ZIndex = baseZIndex + 4 - yesButton.Parent = frame - yesButton.Modal = true - yesButton:SetVerb("Exit") - - local noButton = createTextButton("Stay",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,90,0.8,0)) - noButton.Name = "NoButton" - noButton.Parent = frame - noButton.ZIndex = baseZIndex + 4 - noButton.MouseButton1Click:connect(function() - goToMenu(shield.Settings.SettingsStyle,"GameMainMenu","down",UDim2.new(0,525,0,430)) - shield.Settings:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - end) - - local leaveText = Instance.new("TextLabel") - leaveText.Name = "LeaveText" - leaveText.Text = "Leave this game?" - leaveText.Size = UDim2.new(1,0,0.8,0) - leaveText.TextWrap = true - leaveText.TextColor3 = Color3.new(1,1,1) - leaveText.Font = Enum.Font.ArialBold - leaveText.FontSize = Enum.FontSize.Size36 - leaveText.BackgroundTransparency = 1 - leaveText.ZIndex = baseZIndex + 4 - leaveText.Parent = frame - - return frame -end - -local function createResetConfirmationMenu(baseZIndex,shield) - local frame = Instance.new("Frame") - frame.Name = "ResetConfirmationMenu" - frame.BackgroundTransparency = 1 - frame.Size = UDim2.new(1,0,1,0) - frame.Position = UDim2.new(0,0,2,400) - frame.ZIndex = baseZIndex + 4 - - local yesButton = createTextButton("Reset",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,313,0,299)) - yesButton.Name = "YesButton" - yesButton.ZIndex = baseZIndex + 4 - yesButton.Parent = frame - yesButton.Modal = true - yesButton.MouseButton1Click:connect(function() - resumeGameFunction(shield) - resetLocalCharacter() - end) - - local noButton = createTextButton("Cancel",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,90,0,299)) - noButton.Name = "NoButton" - noButton.Parent = frame - noButton.ZIndex = baseZIndex + 4 - noButton.MouseButton1Click:connect(function() - goToMenu(shield.Settings.SettingsStyle,"GameMainMenu","down",UDim2.new(0,525,0,430)) - shield.Settings:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - end) - - local resetCharacterText = Instance.new("TextLabel") - resetCharacterText.Name = "ResetCharacterText" - resetCharacterText.Text = "Are you sure you want to reset your character?" - resetCharacterText.Size = UDim2.new(1,0,0.8,0) - resetCharacterText.TextWrap = true - resetCharacterText.TextColor3 = Color3.new(1,1,1) - resetCharacterText.Font = Enum.Font.ArialBold - resetCharacterText.FontSize = Enum.FontSize.Size36 - resetCharacterText.BackgroundTransparency = 1 - resetCharacterText.ZIndex = baseZIndex + 4 - resetCharacterText.Parent = frame - - local fineResetCharacterText = resetCharacterText:Clone() - fineResetCharacterText.Name = "FineResetCharacterText" - fineResetCharacterText.Text = "You will be put back on a spawn point" - fineResetCharacterText.Size = UDim2.new(0,303,0,18) - fineResetCharacterText.Position = UDim2.new(0, 109, 0, 215) - fineResetCharacterText.FontSize = Enum.FontSize.Size18 - fineResetCharacterText.Parent = frame - - return frame -end - -local function createGameMainMenu(baseZIndex, shield) - local gameMainMenuFrame = Instance.new("Frame") - gameMainMenuFrame.Name = "GameMainMenu" - gameMainMenuFrame.BackgroundTransparency = 1 - gameMainMenuFrame.Size = UDim2.new(1,0,1,0) - gameMainMenuFrame.ZIndex = baseZIndex + 4 - gameMainMenuFrame.Parent = settingsFrame - - -- GameMainMenu Children - - local gameMainMenuTitle = Instance.new("TextLabel") - gameMainMenuTitle.Name = "Title" - gameMainMenuTitle.Text = "Game Menu" - gameMainMenuTitle.BackgroundTransparency = 1 - gameMainMenuTitle.TextStrokeTransparency = 0 - gameMainMenuTitle.Font = Enum.Font.ArialBold - gameMainMenuTitle.FontSize = Enum.FontSize.Size36 - gameMainMenuTitle.Size = UDim2.new(1,0,0,36) - gameMainMenuTitle.Position = UDim2.new(0,0,0,4) - gameMainMenuTitle.TextColor3 = Color3.new(1,1,1) - gameMainMenuTitle.ZIndex = baseZIndex + 4 - gameMainMenuTitle.Parent = gameMainMenuFrame - - local robloxHelpButton = createTextButton("Help",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,164,0,50),UDim2.new(0,82,0,256)) - robloxHelpButton.Name = "HelpButton" - robloxHelpButton.ZIndex = baseZIndex + 4 - robloxHelpButton.Parent = gameMainMenuFrame - helpButton = robloxHelpButton - - local helpDialog = createHelpDialog(baseZIndex) - helpDialog.Parent = gui - - helpButton.MouseButton1Click:connect( - function() - table.insert(centerDialogs,helpDialog) - game.GuiService:AddCenterDialog(helpDialog, Enum.CenterDialogType.ModalDialog, - --ShowFunction - function() - helpDialog.Visible = true - mainShield.Visible = false - end, - --HideFunction - function() - helpDialog.Visible = false - end) - end) - helpButton.Active = true - - local helpShortcut = Instance.new("TextLabel") - helpShortcut.Name = "HelpShortcutText" - helpShortcut.Text = "F1" - helpShortcut.Visible = false - helpShortcut.BackgroundTransparency = 1 - helpShortcut.Font = Enum.Font.Arial - helpShortcut.FontSize = Enum.FontSize.Size12 - helpShortcut.Position = UDim2.new(0,85,0,0) - helpShortcut.Size = UDim2.new(0,30,0,30) - helpShortcut.TextColor3 = Color3.new(0,1,0) - helpShortcut.ZIndex = baseZIndex + 4 - helpShortcut.Parent = robloxHelpButton - - local screenshotButton = createTextButton("Screenshot",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,168,0,50),UDim2.new(0,254,0,256)) - screenshotButton.Name = "ScreenshotButton" - screenshotButton.ZIndex = baseZIndex + 4 - screenshotButton.Parent = gameMainMenuFrame - screenshotButton.Visible = not macClient - screenshotButton:SetVerb("Screenshot") - - local screenshotShortcut = helpShortcut:clone() - screenshotShortcut.Name = "ScreenshotShortcutText" - screenshotShortcut.Text = "PrintSc" - screenshotShortcut.Position = UDim2.new(0,118,0,0) - screenshotShortcut.Visible = true - screenshotShortcut.Parent = screenshotButton - - - local recordVideoButton = createTextButton("Record Video",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,168,0,50),UDim2.new(0,254,0,306)) - recordVideoButton.Name = "RecordVideoButton" - recordVideoButton.ZIndex = baseZIndex + 4 - recordVideoButton.Parent = gameMainMenuFrame - recordVideoButton.Visible = not macClient - recordVideoButton:SetVerb("RecordToggle") - - local recordVideoShortcut = helpShortcut:clone() - recordVideoShortcut.Visible = hasGraphicsSlider - recordVideoShortcut.Name = "RecordVideoShortcutText" - recordVideoShortcut.Text = "F12" - recordVideoShortcut.Position = UDim2.new(0,120,0,0) - recordVideoShortcut.Parent = recordVideoButton - - local stopRecordButton = Instance.new("ImageButton") - stopRecordButton.Name = "StopRecordButton" - stopRecordButton.BackgroundTransparency = 1 - stopRecordButton.Image = "rbxasset://textures/ui/RecordStop.png" - stopRecordButton.Size = UDim2.new(0,59,0,27) - stopRecordButton:SetVerb("RecordToggle") - - stopRecordButton.MouseButton1Click:connect(function() recordVideoClick(recordVideoButton, stopRecordButton) end) - stopRecordButton.Visible = false - stopRecordButton.Parent = gui - - local reportAbuseButton = createTextButton("Report Abuse",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,164,0,50),UDim2.new(0,82,0,306)) - reportAbuseButton.Name = "ReportAbuseButton" - reportAbuseButton.ZIndex = baseZIndex + 4 - reportAbuseButton.Parent = gameMainMenuFrame - - local leaveGameButton = createTextButton("Leave Game",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,358)) - leaveGameButton.Name = "LeaveGameButton" - leaveGameButton.ZIndex = baseZIndex + 4 - leaveGameButton.Parent = gameMainMenuFrame - - local resumeGameButton = createTextButton("Resume Game",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,54)) - resumeGameButton.Name = "resumeGameButton" - resumeGameButton.ZIndex = baseZIndex + 4 - resumeGameButton.Parent = gameMainMenuFrame - resumeGameButton.Modal = true - resumeGameButton.MouseButton1Click:connect(function() resumeGameFunction(shield) end) - - local gameSettingsButton = createTextButton("Game Settings",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,156)) - gameSettingsButton.Name = "SettingsButton" - gameSettingsButton.ZIndex = baseZIndex + 4 - gameSettingsButton.Parent = gameMainMenuFrame - - if game:FindFirstChild("LoadingGuiService") and #game.LoadingGuiService:GetChildren() > 0 then - local gameSettingsButton = createTextButton("Game Instructions",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,207)) - gameSettingsButton.Name = "GameInstructions" - gameSettingsButton.ZIndex = baseZIndex + 4 - gameSettingsButton.Parent = gameMainMenuFrame - gameSettingsButton.MouseButton1Click:connect(function() - if game:FindFirstChild("Players") and game.Players["LocalPlayer"] then - local loadingGui = game.Players.LocalPlayer:FindFirstChild("PlayerLoadingGui") - if loadingGui then - loadingGui.Visible = true - end - end - end) - end - - local resetButton = createTextButton("Reset Character",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,105)) - resetButton.Name = "ResetButton" - resetButton.ZIndex = baseZIndex + 4 - resetButton.Parent = gameMainMenuFrame - - return gameMainMenuFrame -end - -local function createGameSettingsMenu(baseZIndex, shield) - local gameSettingsMenuFrame = Instance.new("Frame") - gameSettingsMenuFrame.Name = "GameSettingsMenu" - gameSettingsMenuFrame.BackgroundTransparency = 1 - gameSettingsMenuFrame.Size = UDim2.new(1,0,1,0) - gameSettingsMenuFrame.ZIndex = baseZIndex + 4 - - local title = Instance.new("TextLabel") - title.Name = "Title" - title.Text = "Settings" - title.Size = UDim2.new(1,0,0,48) - title.Position = UDim2.new(0,9,0,-9) - title.Font = Enum.Font.ArialBold - title.FontSize = Enum.FontSize.Size36 - title.TextColor3 = Color3.new(1,1,1) - title.ZIndex = baseZIndex + 4 - title.BackgroundTransparency = 1 - title.Parent = gameSettingsMenuFrame - - local fullscreenText = Instance.new("TextLabel") - fullscreenText.Name = "FullscreenText" - fullscreenText.Text = "Fullscreen Mode" - fullscreenText.Size = UDim2.new(0,124,0,18) - fullscreenText.Position = UDim2.new(0,62,0,145) - fullscreenText.Font = Enum.Font.Arial - fullscreenText.FontSize = Enum.FontSize.Size18 - fullscreenText.TextColor3 = Color3.new(1,1,1) - fullscreenText.ZIndex = baseZIndex + 4 - fullscreenText.BackgroundTransparency = 1 - fullscreenText.Parent = gameSettingsMenuFrame - - local fullscreenShortcut = Instance.new("TextLabel") - fullscreenShortcut.Visible = hasGraphicsSlider - fullscreenShortcut.Name = "FullscreenShortcutText" - fullscreenShortcut.Text = "F11" - fullscreenShortcut.BackgroundTransparency = 1 - fullscreenShortcut.Font = Enum.Font.Arial - fullscreenShortcut.FontSize = Enum.FontSize.Size12 - fullscreenShortcut.Position = UDim2.new(0,186,0,141) - fullscreenShortcut.Size = UDim2.new(0,30,0,30) - fullscreenShortcut.TextColor3 = Color3.new(0,1,0) - fullscreenShortcut.ZIndex = baseZIndex + 4 - fullscreenShortcut.Parent = gameSettingsMenuFrame - - local studioText = Instance.new("TextLabel") - studioText.Visible = false - studioText.Name = "StudioText" - studioText.Text = "Studio Mode" - studioText.Size = UDim2.new(0,95,0,18) - studioText.Position = UDim2.new(0,62,0,179) - studioText.Font = Enum.Font.Arial - studioText.FontSize = Enum.FontSize.Size18 - studioText.TextColor3 = Color3.new(1,1,1) - studioText.ZIndex = baseZIndex + 4 - studioText.BackgroundTransparency = 1 - studioText.Parent = gameSettingsMenuFrame - - local studioShortcut = fullscreenShortcut:clone() - studioShortcut.Name = "StudioShortcutText" - studioShortcut.Visible = false -- TODO: turn back on when f2 hack is fixed - studioShortcut.Text = "F2" - studioShortcut.Position = UDim2.new(0,154,0,175) - studioShortcut.Parent = gameSettingsMenuFrame - - local studioCheckbox = nil - - if hasGraphicsSlider then - local qualityText = Instance.new("TextLabel") - qualityText.Name = "QualityText" - qualityText.Text = "Graphics Quality" - qualityText.Size = UDim2.new(0,128,0,18) - qualityText.Position = UDim2.new(0,30,0,239) - qualityText.Font = Enum.Font.Arial - qualityText.FontSize = Enum.FontSize.Size18 - qualityText.TextColor3 = Color3.new(1,1,1) - qualityText.ZIndex = baseZIndex + 4 - qualityText.BackgroundTransparency = 1 - qualityText.Parent = gameSettingsMenuFrame - - local autoText = qualityText:clone() - autoText.Name = "AutoText" - autoText.Text = "Auto" - autoText.Position = UDim2.new(0,183,0,214) - autoText.TextColor3 = Color3.new(128/255,128/255,128/255) - autoText.Size = UDim2.new(0,34,0,18) - autoText.Parent = gameSettingsMenuFrame - - local fasterText = autoText:clone() - fasterText.Name = "FasterText" - fasterText.Text = "Faster" - fasterText.Position = UDim2.new(0,185,0,274) - fasterText.TextColor3 = Color3.new(95,95,95) - fasterText.FontSize = Enum.FontSize.Size14 - fasterText.Parent = gameSettingsMenuFrame - - local fasterShortcut = fullscreenShortcut:clone() - fasterShortcut.Name = "FasterShortcutText" - fasterShortcut.Text = "F10 + Shift" - fasterShortcut.Position = UDim2.new(0,185,0,283) - fasterShortcut.Parent = gameSettingsMenuFrame - - local betterQualityText = autoText:clone() - betterQualityText.Name = "BetterQualityText" - betterQualityText.Text = "Better Quality" - betterQualityText.TextWrap = true - betterQualityText.Size = UDim2.new(0,41,0,28) - betterQualityText.Position = UDim2.new(0,390,0,269) - betterQualityText.TextColor3 = Color3.new(95,95,95) - betterQualityText.FontSize = Enum.FontSize.Size14 - betterQualityText.Parent = gameSettingsMenuFrame - - local betterQualityShortcut = fullscreenShortcut:clone() - betterQualityShortcut.Name = "BetterQualityShortcut" - betterQualityShortcut.Text = "F10" - betterQualityShortcut.Position = UDim2.new(0,394,0,288) - betterQualityShortcut.Parent = gameSettingsMenuFrame - - local autoGraphicsButton = createTextButton("X",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,187,0,239)) - autoGraphicsButton.Name = "AutoGraphicsButton" - autoGraphicsButton.ZIndex = baseZIndex + 4 - autoGraphicsButton.Parent = gameSettingsMenuFrame - - local graphicsSlider, graphicsLevel = RbxGui.CreateSlider(GraphicsQualityLevels,150,UDim2.new(0, 230, 0, 280)) -- graphics - 1 because slider starts at 1 instead of 0 - graphicsSlider.Parent = gameSettingsMenuFrame - graphicsSlider.Bar.ZIndex = baseZIndex + 4 - graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 - graphicsLevel.Value = math.floor((settings().Rendering:GetMaxQualityLevel() - 1)/2) - - local graphicsSetter = Instance.new("TextBox") - graphicsSetter.Name = "GraphicsSetter" - graphicsSetter.BackgroundColor3 = Color3.new(0,0,0) - graphicsSetter.BorderColor3 = Color3.new(128/255,128/255,128/255) - graphicsSetter.Size = UDim2.new(0,50,0,25) - graphicsSetter.Position = UDim2.new(0,450,0,269) - graphicsSetter.TextColor3 = Color3.new(1,1,1) - graphicsSetter.Font = Enum.Font.Arial - graphicsSetter.FontSize = Enum.FontSize.Size18 - graphicsSetter.Text = "Auto" - graphicsSetter.ZIndex = 1 - graphicsSetter.TextWrap = true - graphicsSetter.Parent = gameSettingsMenuFrame - - local isAutoGraphics = true - if not UserSettings().GameSettings:InStudioMode() then - isAutoGraphics = (UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic) - else - settings().Rendering.EnableFRM = false - end - - local listenToGraphicsLevelChange = true - - local function setAutoGraphicsGui(active) - if active then - isAutoGraphics = true - autoGraphicsButton.Text = "X" - betterQualityText.ZIndex = 1 - betterQualityShortcut.ZIndex = 1 - fasterShortcut.ZIndex = 1 - fasterText.ZIndex = 1 - graphicsSlider.Bar.ZIndex = 1 - graphicsSlider.Bar.Slider.ZIndex = 1 - graphicsSetter.ZIndex = 1 - graphicsSetter.Text = "Auto" - else - isAutoGraphics = false - autoGraphicsButton.Text = "" - graphicsSlider.Bar.ZIndex = baseZIndex + 4 - graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 - betterQualityShortcut.ZIndex = baseZIndex + 4 - fasterShortcut.ZIndex = baseZIndex + 4 - betterQualityText.ZIndex = baseZIndex + 4 - fasterText.ZIndex = baseZIndex + 4 - graphicsSetter.ZIndex = baseZIndex + 4 - end - end - - local function goToAutoGraphics() - setAutoGraphicsGui(true) - - UserSettings().GameSettings.SavedQualityLevel = Enum.SavedQualitySetting.Automatic - - settings().Rendering.QualityLevel = Enum.QualityLevel.Automatic - end - - local function setGraphicsQualityLevel(newLevel) - local percentage = newLevel/GraphicsQualityLevels - local newSetting = math.floor((settings().Rendering:GetMaxQualityLevel() - 1) * percentage) - if newSetting == 20 then -- Level 20 is the same as level 21, except it doesn't render ambient occlusion - newSetting = 21 - elseif newLevel == 1 then -- make sure we can go to lowest settings (for terrible computers) - newSetting = 1 - elseif newSetting > settings().Rendering:GetMaxQualityLevel() then - newSetting = settings().Rendering:GetMaxQualityLevel() - 1 - end - - UserSettings().GameSettings.SavedQualityLevel = newLevel - settings().Rendering.QualityLevel = newSetting - end - - local function goToManualGraphics(explicitLevel) - setAutoGraphicsGui(false) - - if explicitLevel then - graphicsLevel.Value = explicitLevel - else - graphicsLevel.Value = math.floor((settings().Rendering.AutoFRMLevel/(settings().Rendering:GetMaxQualityLevel() - 1)) * GraphicsQualityLevels) - end - - if explicitLevel == graphicsLevel.Value then -- make sure we are actually in right graphics mode - setGraphicsQualityLevel(graphicsLevel.Value) - end - - if not explicitLevel then - UserSettings().GameSettings.SavedQualityLevel = graphicsLevel.Value - end - graphicsSetter.Text = tostring(graphicsLevel.Value) - end - - local function showAutoGraphics() - autoText.ZIndex = baseZIndex + 4 - autoGraphicsButton.ZIndex = baseZIndex + 4 - end - - local function hideAutoGraphics() - autoText.ZIndex = 1 - autoGraphicsButton.ZIndex = 1 - end - - local function showManualGraphics() - graphicsSlider.Bar.ZIndex = baseZIndex + 4 - graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 - betterQualityShortcut.ZIndex = baseZIndex + 4 - fasterShortcut.ZIndex = baseZIndex + 4 - betterQualityText.ZIndex = baseZIndex + 4 - fasterText.ZIndex = baseZIndex + 4 - graphicsSetter.ZIndex = baseZIndex + 4 - end - - local function hideManualGraphics() - betterQualityText.ZIndex = 1 - betterQualityShortcut.ZIndex = 1 - fasterShortcut.ZIndex = 1 - fasterText.ZIndex = 1 - graphicsSlider.Bar.ZIndex = 1 - graphicsSlider.Bar.Slider.ZIndex = 1 - graphicsSetter.ZIndex = 1 - end - - local function translateSavedQualityLevelToInt(savedQualityLevel) - if savedQualityLevel == Enum.SavedQualitySetting.Automatic then - return 0 - elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel1 then - return 1 - elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel2 then - return 2 - elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel3 then - return 3 - elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel4 then - return 4 - elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel5 then - return 5 - elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel6 then - return 6 - elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel7 then - return 7 - elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel8 then - return 8 - elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel9 then - return 9 - elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel10 then - return 10 - end - end - - local function enableGraphicsWidget() - settings().Rendering.EnableFRM = true - - isAutoGraphics = (UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic) - if isAutoGraphics then - showAutoGraphics() - goToAutoGraphics() - else - showAutoGraphics() - showManualGraphics() - goToManualGraphics(translateSavedQualityLevelToInt(UserSettings().GameSettings.SavedQualityLevel)) - end - end - - local function disableGraphicsWidget() - hideManualGraphics() - hideAutoGraphics() - settings().Rendering.EnableFRM = false - end - - graphicsSetter.FocusLost:connect(function() - if isAutoGraphics then - graphicsSetter.Text = tostring(graphicsLevel.Value) - return - end - - local newGraphicsValue = tonumber(graphicsSetter.Text) - if newGraphicsValue == nil then - graphicsSetter.Text = tostring(graphicsLevel.Value) - return - end - - if newGraphicsValue < 1 then newGraphicsValue = 1 - elseif newGraphicsValue >= settings().Rendering:GetMaxQualityLevel() then - newGraphicsValue = settings().Rendering:GetMaxQualityLevel() - 1 - end - - graphicsLevel.Value = newGraphicsValue - setGraphicsQualityLevel(graphicsLevel.Value) - graphicsSetter.Text = tostring(graphicsLevel.Value) - end) - - graphicsLevel.Changed:connect(function(prop) - if isAutoGraphics then return end - if not listenToGraphicsLevelChange then return end - - graphicsSetter.Text = tostring(graphicsLevel.Value) - setGraphicsQualityLevel(graphicsLevel.Value) - end) - - -- setup our graphic mode on load - if UserSettings().GameSettings:InStudioMode() or UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic then - if UserSettings().GameSettings:InStudioMode() then - settings().Rendering.EnableFRM = false - disableGraphicsWidget() - else - settings().Rendering.EnableFRM = true - goToAutoGraphics() - end - else - settings().Rendering.EnableFRM = true - goToManualGraphics(translateSavedQualityLevelToInt(UserSettings().GameSettings.SavedQualityLevel)) - end - - autoGraphicsButton.MouseButton1Click:connect(function() - if UserSettings().GameSettings:InStudioMode() and not game.Players.LocalPlayer then return end - - if not isAutoGraphics then - goToAutoGraphics() - else - goToManualGraphics(graphicsLevel.Value) - end - end) - - local lastUpdate = nil - game.GraphicsQualityChangeRequest:connect(function(graphicsIncrease) - if isAutoGraphics then return end -- only can set graphics in manual mode - - if graphicsIncrease then - if (graphicsLevel.Value + 1) > GraphicsQualityLevels then return end - graphicsLevel.Value = graphicsLevel.Value + 1 - graphicsSetter.Text = tostring(graphicsLevel.Value) - setGraphicsQualityLevel(graphicsLevel.Value) - - game:GetService("GuiService"):SendNotification("Graphics Quality", - "Increased to (" .. graphicsSetter.Text .. ")", - "", - 2, - function() - end) - else - if (graphicsLevel.Value - 1) <= 0 then return end - graphicsLevel.Value = graphicsLevel.Value - 1 - graphicsSetter.Text = tostring(graphicsLevel.Value) - setGraphicsQualityLevel(graphicsLevel.Value) - - game:GetService("GuiService"):SendNotification("Graphics Quality", - "Decreased to (" .. graphicsSetter.Text .. ")", - "", - 2, - function() - end) - end - end) - - game.Players.PlayerAdded:connect(function(player) - if player == game.Players.LocalPlayer and UserSettings().GameSettings:InStudioMode() then - enableGraphicsWidget() - end - end) - game.Players.PlayerRemoving:connect(function(player) - if player == game.Players.LocalPlayer and UserSettings().GameSettings:InStudioMode() then - disableGraphicsWidget() - end - end) - - studioCheckbox = createTextButton("",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,30,0,176)) - studioCheckbox.Name = "StudioCheckbox" - studioCheckbox.ZIndex = baseZIndex + 4 - --studioCheckbox.Parent = gameSettingsMenuFrame -- todo: enable when studio h4x aren't an issue anymore - studioCheckbox:SetVerb("TogglePlayMode") - studioCheckbox.Visible = false -- todo: enabled when studio h4x aren't an issue anymore - - local wasManualGraphics = (settings().Rendering.QualityLevel ~= Enum.QualityLevel.Automatic) - if UserSettings().GameSettings:InStudioMode() and not game.Players.LocalPlayer then - studioCheckbox.Text = "X" - disableGraphicsWidget() - elseif UserSettings().GameSettings:InStudioMode() then - studioCheckbox.Text = "X" - enableGraphicsWidget() - end - if hasGraphicsSlider then - UserSettings().GameSettings.StudioModeChanged:connect(function(isStudioMode) - if isStudioMode then - wasManualGraphics = (settings().Rendering.QualityLevel ~= Enum.QualityLevel.Automatic) - goToAutoGraphics() - studioCheckbox.Text = "X" - autoGraphicsButton.ZIndex = 1 - autoText.ZIndex = 1 - else - if wasManualGraphics then - goToManualGraphics() - end - studioCheckbox.Text = "" - autoGraphicsButton.ZIndex = baseZIndex + 4 - autoText.ZIndex = baseZIndex + 4 - end - end) - else - studioCheckbox.MouseButton1Click:connect(function() - if not studioCheckbox.Active then return end - - if studioCheckbox.Text == "" then - studioCheckbox.Text = "X" - else - studioCheckbox.Text = "" - end - end) - end - end - - local fullscreenCheckbox = createTextButton("",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,30,0,144)) - fullscreenCheckbox.Name = "FullscreenCheckbox" - fullscreenCheckbox.ZIndex = baseZIndex + 4 - fullscreenCheckbox.Parent = gameSettingsMenuFrame - fullscreenCheckbox:SetVerb("ToggleFullScreen") - if UserSettings().GameSettings:InFullScreen() then fullscreenCheckbox.Text = "X" end - if hasGraphicsSlider then - UserSettings().GameSettings.FullscreenChanged:connect(function(isFullscreen) - if isFullscreen then - fullscreenCheckbox.Text = "X" - else - fullscreenCheckbox.Text = "" - end - end) - else - fullscreenCheckbox.MouseButton1Click:connect(function() - if fullscreenCheckbox.Text == "" then - fullscreenCheckbox.Text = "X" - else - fullscreenCheckbox.Text = "" - end - end) - end - - if game:FindFirstChild("NetworkClient") then -- we are playing online - setDisabledState(studioText) - setDisabledState(studioShortcut) - setDisabledState(studioCheckbox) - end - - local backButton - if hasGraphicsSlider then - backButton = createTextButton("OK",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,180,0,50),UDim2.new(0,170,0,330)) - backButton.Modal = true - else - backButton = createTextButton("OK",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,180,0,50),UDim2.new(0,170,0,270)) - backButton.Modal = true - end - - backButton.Name = "BackButton" - backButton.ZIndex = baseZIndex + 4 - backButton.Parent = gameSettingsMenuFrame - - local syncVideoCaptureSetting = nil - - if not macClient then - local videoCaptureLabel = Instance.new("TextLabel") - videoCaptureLabel.Name = "VideoCaptureLabel" - videoCaptureLabel.Text = "After Capturing Video" - videoCaptureLabel.Font = Enum.Font.Arial - videoCaptureLabel.FontSize = Enum.FontSize.Size18 - videoCaptureLabel.Position = UDim2.new(0,32,0,100) - videoCaptureLabel.Size = UDim2.new(0,164,0,18) - videoCaptureLabel.BackgroundTransparency = 1 - videoCaptureLabel.TextColor3 = Color3I(255,255,255) - videoCaptureLabel.TextXAlignment = Enum.TextXAlignment.Left - videoCaptureLabel.ZIndex = baseZIndex + 4 - videoCaptureLabel.Parent = gameSettingsMenuFrame - - local videoNames = {} - local videoNameToItem = {} - videoNames[1] = "Just Save to Disk" - videoNameToItem[videoNames[1]] = Enum.UploadSetting["Never"] - videoNames[2] = "Upload to YouTube" - videoNameToItem[videoNames[2]] = Enum.UploadSetting["Ask me first"] - - local videoCaptureDropDown = nil - videoCaptureDropDown, updateVideoCaptureDropDownSelection = RbxGui.CreateDropDownMenu(videoNames, - function(text) - UserSettings().GameSettings.VideoUploadPromptBehavior = videoNameToItem[text] - end) - videoCaptureDropDown.Name = "VideoCaptureField" - videoCaptureDropDown.ZIndex = baseZIndex + 4 - videoCaptureDropDown.DropDownMenuButton.ZIndex = baseZIndex + 4 - videoCaptureDropDown.DropDownMenuButton.Icon.ZIndex = baseZIndex + 4 - videoCaptureDropDown.Position = UDim2.new(0, 270, 0, 94) - videoCaptureDropDown.Size = UDim2.new(0,200,0,32) - videoCaptureDropDown.Parent = gameSettingsMenuFrame - - syncVideoCaptureSetting = function() - if UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Never"] then - updateVideoCaptureDropDownSelection(videoNames[1]) - elseif UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Ask me first"] then - updateVideoCaptureDropDownSelection(videoNames[2]) - else - UserSettings().GameSettings.VideoUploadPromptBehavior = Enum.UploadSetting["Ask me first"] - updateVideoCaptureDropDownSelection(videoNames[2]) - end - end - end - - local cameraLabel = Instance.new("TextLabel") - cameraLabel.Name = "CameraLabel" - cameraLabel.Text = "Character & Camera Controls" - cameraLabel.Font = Enum.Font.Arial - cameraLabel.FontSize = Enum.FontSize.Size18 - cameraLabel.Position = UDim2.new(0,31,0,58) - cameraLabel.Size = UDim2.new(0,224,0,18) - cameraLabel.TextColor3 = Color3I(255,255,255) - cameraLabel.TextXAlignment = Enum.TextXAlignment.Left - cameraLabel.BackgroundTransparency = 1 - cameraLabel.ZIndex = baseZIndex + 4 - cameraLabel.Parent = gameSettingsMenuFrame - - local mouseLockLabel = game.CoreGui.RobloxGui:FindFirstChild("MouseLockLabel",true) - - local enumItems = Enum.ControlMode:GetEnumItems() - local enumNames = {} - local enumNameToItem = {} - for i,obj in ipairs(enumItems) do - enumNames[i] = obj.Name - enumNameToItem[obj.Name] = obj - end - - local cameraDropDown - cameraDropDown, updateCameraDropDownSelection = RbxGui.CreateDropDownMenu(enumNames, - function(text) - UserSettings().GameSettings.ControlMode = enumNameToItem[text] - - pcall(function() - if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then - mouseLockLabel.Visible = true - elseif mouseLockLabel then - mouseLockLabel.Visible = false - end - end) - end) - cameraDropDown.Name = "CameraField" - cameraDropDown.ZIndex = baseZIndex + 4 - cameraDropDown.DropDownMenuButton.ZIndex = baseZIndex + 4 - cameraDropDown.DropDownMenuButton.Icon.ZIndex = baseZIndex + 4 - cameraDropDown.Position = UDim2.new(0, 270, 0, 52) - cameraDropDown.Size = UDim2.new(0,200,0,32) - cameraDropDown.Parent = gameSettingsMenuFrame - - return gameSettingsMenuFrame -end - -if LoadLibrary then - RbxGui = LoadLibrary("RbxGui") - local baseZIndex = 0 -if UserSettings then - - local createSettingsDialog = function() - waitForChild(gui,"BottomLeftControl") - settingsButton = gui.BottomLeftControl:FindFirstChild("SettingsButton") - - if settingsButton == nil then - settingsButton = Instance.new("ImageButton") - settingsButton.Name = "SettingsButton" - settingsButton.Image = "rbxasset://textures/ui/SettingsButton.png" - settingsButton.BackgroundTransparency = 1 - settingsButton.Active = false - settingsButton.Size = UDim2.new(0,54,0,46) - settingsButton.Position = UDim2.new(0,2,0,50) - settingsButton.Parent = gui.BottomLeftControl - end - - local shield = Instance.new("TextButton") - shield.Text = "" - shield.Name = "UserSettingsShield" - shield.Active = true - shield.AutoButtonColor = false - shield.Visible = false - shield.Size = UDim2.new(1,0,1,0) - shield.BackgroundColor3 = Color3I(51,51,51) - shield.BorderColor3 = Color3I(27,42,53) - shield.BackgroundTransparency = 0.4 - shield.ZIndex = baseZIndex + 2 - mainShield = shield - - local frame = Instance.new("Frame") - frame.Name = "Settings" - frame.Position = UDim2.new(0.5, -262, -0.5, -200) - frame.Size = UDim2.new(0, 525, 0, 430) - frame.BackgroundTransparency = 1 - frame.Active = true - frame.Parent = shield - - local settingsFrame = Instance.new("Frame") - settingsFrame.Name = "SettingsStyle" - settingsFrame.Size = UDim2.new(1, 0, 1, 0) - settingsFrame.Style = Enum.FrameStyle.RobloxRound - settingsFrame.Active = true - settingsFrame.ZIndex = baseZIndex + 3 - settingsFrame.Parent = frame - - local gameMainMenu = createGameMainMenu(baseZIndex, shield) - gameMainMenu.Parent = settingsFrame - - gameMainMenu.ScreenshotButton.MouseButton1Click:connect(function() - backToGame(gameMainMenu.ScreenshotButton, shield, settingsButton) - end) - - gameMainMenu.RecordVideoButton.MouseButton1Click:connect(function() - recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton) - backToGame(gameMainMenu.RecordVideoButton, shield, settingsButton) - end) - - if settings():FindFirstChild("Game Options") then - pcall(function() - settings():FindFirstChild("Game Options").VideoRecordingChangeRequest:connect(function(recording) - recordingVideo = recording - setRecordGui(recording, gui.StopRecordButton, gameMainMenu.RecordVideoButton) - end) - end) - end - - game.CoreGui.RobloxGui.Changed:connect(function(prop) -- We have stopped recording when we resize - if prop == "AbsoluteSize" and recordingVideo then - recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton) - end - end) - - function localPlayerChange() - gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer - if game.Players.LocalPlayer then - settings().Rendering.EnableFRM = true - elseif UserSettings().GameSettings:InStudioMode() then - settings().Rendering.EnableFRM = false - end - end - - gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer - if game.Players.LocalPlayer ~= nil then - game.Players.LocalPlayer.Changed:connect(function() - localPlayerChange() - end) - else - delay(0,function() - waitForProperty(game.Players,"LocalPlayer") - gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer - game.Players.LocalPlayer.Changed:connect(function() - localPlayerChange() - end) - end) - end - - gameMainMenu.ReportAbuseButton.Visible = game:FindFirstChild("NetworkClient") - if not gameMainMenu.ReportAbuseButton.Visible then - game.ChildAdded:connect(function(child) - if child:IsA("NetworkClient") then - gameMainMenu.ReportAbuseButton.Visible = game:FindFirstChild("NetworkClient") - end - end) - end - - gameMainMenu.ResetButton.MouseButton1Click:connect(function() - goToMenu(settingsFrame,"ResetConfirmationMenu","up",UDim2.new(0,525,0,370)) - end) - - gameMainMenu.LeaveGameButton.MouseButton1Click:connect(function() - goToMenu(settingsFrame,"LeaveConfirmationMenu","down",UDim2.new(0,525,0,300)) - end) - - if game.CoreGui.Version >= 4 then -- we can use escape! - game:GetService("GuiService").EscapeKeyPressed:connect(function() - if currentMenuSelection == nil then - game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, - --showFunction - function() - settingsButton.Active = false - updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name) - - if syncVideoCaptureSetting then - syncVideoCaptureSetting() - end - - goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) - shield.Visible = true - shield.Active = true - settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - end, - --hideFunction - function() - settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - shield.Visible = false - settingsButton.Active = true - end) - elseif #lastMenuSelection > 0 then - if #centerDialogs > 0 then - for i = 1, #centerDialogs do - game.GuiService:RemoveCenterDialog(centerDialogs[i]) - centerDialogs[i].Visible = false - end - centerDialogs = {} - end - - goToMenu(lastMenuSelection[#lastMenuSelection]["container"],lastMenuSelection[#lastMenuSelection]["name"], - lastMenuSelection[#lastMenuSelection]["direction"],lastMenuSelection[#lastMenuSelection]["lastSize"]) - - table.remove(lastMenuSelection,#lastMenuSelection) - if #lastMenuSelection == 1 then -- apparently lua can't reduce count to 0... T_T - lastMenuSelection = {} - end - else - resumeGameFunction(shield) - end - end) - end - - local gameSettingsMenu = createGameSettingsMenu(baseZIndex, shield) - gameSettingsMenu.Visible = false - gameSettingsMenu.Parent = settingsFrame - - gameMainMenu.SettingsButton.MouseButton1Click:connect(function() - goToMenu(settingsFrame,"GameSettingsMenu","left",UDim2.new(0,525,0,350)) - end) - - gameSettingsMenu.BackButton.MouseButton1Click:connect(function() - goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) - end) - - local resetConfirmationWindow = createResetConfirmationMenu(baseZIndex, shield) - resetConfirmationWindow.Visible = false - resetConfirmationWindow.Parent = settingsFrame - - local leaveConfirmationWindow = createLeaveConfirmationMenu(baseZIndex,shield) - leaveConfirmationWindow.Visible = false - leaveConfirmationWindow.Parent = settingsFrame - - robloxLock(shield) - - settingsButton.MouseButton1Click:connect( - function() - game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, - --showFunction - function() - settingsButton.Active = false - updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name) - - if syncVideoCaptureSetting then - syncVideoCaptureSetting() - end - - goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) - shield.Visible = true - settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - end, - --hideFunction - function() - settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) - shield.Visible = false - settingsButton.Active = true - end) - end) - - return shield - end - - delay(0, function() - createSettingsDialog().Parent = gui - - gui.BottomLeftControl.SettingsButton.Active = true - gui.BottomLeftControl.SettingsButton.Position = UDim2.new(0,2,0,-2) - - if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then - mouseLockLabel.Visible = true - elseif mouseLockLabel then - mouseLockLabel.Visible = false - end - - -- our script has loaded, get rid of older buttons now - local leaveGameButton = gui.BottomLeftControl:FindFirstChild("Exit") - if leaveGameButton then leaveGameButton:Remove() end - - local toolButton = gui.BottomLeftControl:FindFirstChild("ToolButton") - if toolButton then toolButton:Remove() end - - local topLeft = gui:FindFirstChild("TopLeftControl") - if topLeft then topLeft:Remove() end - - local toggle = gui.BottomLeftControl:FindFirstChild("TogglePlayMode") - if toggle then toggle:Remove() end - - local bottomRightChildren = gui.BottomRightControl:GetChildren() - for i = 1, #bottomRightChildren do - if not string.find(bottomRightChildren[i].Name,"Camera") then - bottomRightChildren[i]:Remove() - end - end - end) - -end --UserSettings call - -local createSaveDialogs = function() - local shield = Instance.new("TextButton") - shield.Text = "" - shield.AutoButtonColor = false - shield.Name = "SaveDialogShield" - shield.Active = true - shield.Visible = false - shield.Size = UDim2.new(1,0,1,0) - shield.BackgroundColor3 = Color3I(51,51,51) - shield.BorderColor3 = Color3I(27,42,53) - shield.BackgroundTransparency = 0.4 - shield.ZIndex = baseZIndex+1 - - local clearAndResetDialog - local save - local saveLocal - local dontSave - local cancel - - local messageBoxButtons = {} - messageBoxButtons[1] = {} - messageBoxButtons[1].Text = "Save" - messageBoxButtons[1].Style = Enum.ButtonStyle.RobloxButtonDefault - messageBoxButtons[1].Function = function() save() end - messageBoxButtons[2] = {} - messageBoxButtons[2].Text = "Cancel" - messageBoxButtons[2].Function = function() cancel() end - messageBoxButtons[3] = {} - messageBoxButtons[3].Text = "Don't Save" - messageBoxButtons[3].Function = function() dontSave() end - - local saveDialogMessageBox = RbxGui.CreateStyledMessageDialog("Unsaved Changes", "Save your changes to ROBLOX before leaving?", "Confirm", messageBoxButtons) - saveDialogMessageBox.Visible = true - saveDialogMessageBox.Parent = shield - - - local errorBoxButtons = {} - - local buttonOffset = 1 - if game.LocalSaveEnabled then - errorBoxButtons[buttonOffset] = {} - errorBoxButtons[buttonOffset].Text = "Save to Disk" - errorBoxButtons[buttonOffset].Function = function() saveLocal() end - buttonOffset = buttonOffset + 1 - end - errorBoxButtons[buttonOffset] = {} - errorBoxButtons[buttonOffset].Text = "Keep Playing" - errorBoxButtons[buttonOffset].Function = function() cancel() end - errorBoxButtons[buttonOffset+1] = {} - errorBoxButtons[buttonOffset+1].Text = "Don't Save" - errorBoxButtons[buttonOffset+1].Function = function() dontSave() end - - local errorDialogMessageBox = RbxGui.CreateStyledMessageDialog("Upload Failed", "Sorry, we could not save your changes to ROBLOX.", "Error", errorBoxButtons) - errorDialogMessageBox.Visible = false - errorDialogMessageBox.Parent = shield - - local spinnerDialog = Instance.new("Frame") - spinnerDialog.Name = "SpinnerDialog" - spinnerDialog.Style = Enum.FrameStyle.RobloxRound - spinnerDialog.Size = UDim2.new(0, 350, 0, 150) - spinnerDialog.Position = UDim2.new(.5, -175, .5, -75) - spinnerDialog.Visible = false - spinnerDialog.Active = true - spinnerDialog.Parent = shield - - local waitingLabel = Instance.new("TextLabel") - waitingLabel.Name = "WaitingLabel" - waitingLabel.Text = "Saving to ROBLOX..." - waitingLabel.Font = Enum.Font.ArialBold - waitingLabel.FontSize = Enum.FontSize.Size18 - waitingLabel.Position = UDim2.new(0.5, 25, 0.5, 0) - waitingLabel.TextColor3 = Color3.new(1,1,1) - waitingLabel.Parent = spinnerDialog - - local spinnerFrame = Instance.new("Frame") - spinnerFrame.Name = "Spinner" - spinnerFrame.Size = UDim2.new(0, 80, 0, 80) - spinnerFrame.Position = UDim2.new(0.5, -150, 0.5, -40) - spinnerFrame.BackgroundTransparency = 1 - spinnerFrame.Parent = spinnerDialog - - local spinnerIcons = {} - local spinnerNum = 1 - while spinnerNum <= 8 do - local spinnerImage = Instance.new("ImageLabel") - spinnerImage.Name = "Spinner"..spinnerNum - spinnerImage.Size = UDim2.new(0, 16, 0, 16) - spinnerImage.Position = UDim2.new(.5+.3*math.cos(math.rad(45*spinnerNum)), -8, .5+.3*math.sin(math.rad(45*spinnerNum)), -8) - spinnerImage.BackgroundTransparency = 1 - spinnerImage.Image = "http://jarfeh.xyz/asset/?id=45880710" - spinnerImage.Parent = spinnerFrame - - spinnerIcons[spinnerNum] = spinnerImage - spinnerNum = spinnerNum + 1 - end - - save = function() - saveDialogMessageBox.Visible = false - - --Show the spinner dialog - spinnerDialog.Visible = true - local spin = true - --Make it spin - delay(0, function() - local spinPos = 0 - while spin do - local pos = 0 - - while pos < 8 do - if pos == spinPos or pos == ((spinPos+1)%8) then - spinnerIcons[pos+1].Image = "http://jarfeh.xyz/asset/?id=45880668" - else - spinnerIcons[pos+1].Image = "http://jarfeh.xyz/asset/?id=45880710" - end - - pos = pos + 1 - end - spinPos = (spinPos + 1) % 8 - wait(0.2) - end - end) - - --Do the save while the spinner is going, function will wait - local result = game:SaveToRoblox() - if not result then - --Try once more - result = game:SaveToRoblox() - end - - --Hide the spinner dialog - spinnerDialog.Visible = false - --And cause the delay thread to stop - spin = false - - --Now process the result - if result then - --Success, close - game:FinishShutdown(false) - clearAndResetDialog() - else - --Failure, show the second dialog prompt - errorDialogMessageBox.Visible = true - end - end - - saveLocal = function() - errorDialogMessageBox.Visible = false - game:FinishShutdown(true) - clearAndResetDialog() - end - - dontSave = function() - saveDialogMessageBox.Visible = false - errorDialogMessageBox.Visible = false - game:FinishShutdown(false) - clearAndResetDialog() - end - cancel = function() - saveDialogMessageBox.Visible = false - errorDialogMessageBox.Visible = false - clearAndResetDialog() - end - - clearAndResetDialog = function() - saveDialogMessageBox.Visible = true - errorDialogMessageBox.Visible = false - spinnerDialog.Visible = false - shield.Visible = false - game.GuiService:RemoveCenterDialog(shield) - end - - robloxLock(shield) - shield.Visible = false - return shield -end - -local createReportAbuseDialog = function() - --Only show things if we are a NetworkClient - waitForChild(game,"NetworkClient") - - waitForChild(game,"Players") - waitForProperty(game.Players, "LocalPlayer") - local localPlayer = game.Players.LocalPlayer - - local reportAbuseButton - waitForChild(gui,"UserSettingsShield") - waitForChild(gui.UserSettingsShield, "Settings") - waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") - waitForChild(gui.UserSettingsShield.Settings.SettingsStyle,"GameMainMenu") - waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton") - reportAbuseButton = gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton - - local shield = Instance.new("TextButton") - shield.Name = "ReportAbuseShield" - shield.Text = "" - shield.AutoButtonColor = false - shield.Active = true - shield.Visible = false - shield.Size = UDim2.new(1,0,1,0) - shield.BackgroundColor3 = Color3I(51,51,51) - shield.BorderColor3 = Color3I(27,42,53) - shield.BackgroundTransparency = 0.4 - shield.ZIndex = baseZIndex + 1 - - local closeAndResetDialgo - - local messageBoxButtons = {} - messageBoxButtons[1] = {} - messageBoxButtons[1].Text = "Ok" - messageBoxButtons[1].Modal = true - messageBoxButtons[1].Function = function() closeAndResetDialog() end - local calmingMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "Our moderators will review the chat logs and determine what happened. The other user is probably just trying to make you mad.\n\nIf anyone used swear words, inappropriate language, or threatened you in real life, please report them for Bad Words or Threats", messageBoxButtons) - calmingMessageBox.Visible = false - calmingMessageBox.Parent = shield - - local normalMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "Our moderators will review the chat logs and determine what happened.", messageBoxButtons) - normalMessageBox.Visible = false - normalMessageBox.Parent = shield - - local frame = Instance.new("Frame") - frame.Name = "Settings" - frame.Position = UDim2.new(0.5, -250, 0.5, -200) - frame.Size = UDim2.new(0.0, 500, 0.0, 400) - frame.BackgroundTransparency = 1 - frame.Active = true - frame.Parent = shield - - local settingsFrame = Instance.new("Frame") - settingsFrame.Name = "ReportAbuseStyle" - settingsFrame.Size = UDim2.new(1, 0, 1, 0) - settingsFrame.Style = Enum.FrameStyle.RobloxRound - settingsFrame.Active = true - settingsFrame.ZIndex = baseZIndex + 1 - settingsFrame.Parent = frame - - local title = Instance.new("TextLabel") - title.Name = "Title" - title.Text = "Report Abuse" - title.TextColor3 = Color3I(221,221,221) - title.Position = UDim2.new(0.5, 0, 0, 30) - title.Font = Enum.Font.ArialBold - title.FontSize = Enum.FontSize.Size36 - title.ZIndex = baseZIndex + 2 - title.Parent = settingsFrame - - local description = Instance.new("TextLabel") - description.Name = "Description" - description.Text = "This will send a complete report to a moderator. The moderator will review the chat log and take appropriate action." - description.TextColor3 = Color3I(221,221,221) - description.Position = UDim2.new(0, 0, 0, 55) - description.Size = UDim2.new(1, 0, 0, 40) - description.BackgroundTransparency = 1 - description.Font = Enum.Font.Arial - description.FontSize = Enum.FontSize.Size18 - description.TextWrap = true - description.ZIndex = baseZIndex + 2 - description.TextXAlignment = Enum.TextXAlignment.Left - description.TextYAlignment = Enum.TextYAlignment.Top - description.Parent = settingsFrame - - local playerLabel = Instance.new("TextLabel") - playerLabel.Name = "PlayerLabel" - playerLabel.Text = "Which player?" - playerLabel.BackgroundTransparency = 1 - playerLabel.Font = Enum.Font.Arial - playerLabel.FontSize = Enum.FontSize.Size18 - playerLabel.Position = UDim2.new(0.025,0,0,100) - playerLabel.Size = UDim2.new(0.4,0,0,36) - playerLabel.TextColor3 = Color3I(255,255,255) - playerLabel.TextXAlignment = Enum.TextXAlignment.Left - playerLabel.ZIndex = baseZIndex + 2 - playerLabel.Parent = settingsFrame - - local abusingPlayer = nil - local abuse = nil - local submitReportButton = nil - - local updatePlayerSelection = nil - local createPlayersDropDown = function() - local players = game:GetService("Players") - local playerNames = {} - local nameToPlayer = {} - local children = players:GetChildren() - local pos = 1 - if children then - for i, player in ipairs(children) do - if player:IsA("Player") and player ~= localPlayer then - playerNames[pos] = player.Name - nameToPlayer[player.Name] = player - pos = pos + 1 - end - end - end - local playerDropDown = nil - playerDropDown, updatePlayerSelection = RbxGui.CreateDropDownMenu(playerNames, - function(playerName) - abusingPlayer = nameToPlayer[playerName] - if abuse and abusingPlayer then - submitReportButton.Active = true - end - end) - playerDropDown.Name = "PlayersComboBox" - playerDropDown.ZIndex = baseZIndex + 2 - playerDropDown.Position = UDim2.new(.425, 0, 0, 102) - playerDropDown.Size = UDim2.new(.55,0,0,32) - - return playerDropDown - end - - local abuseLabel = Instance.new("TextLabel") - abuseLabel.Name = "AbuseLabel" - abuseLabel.Text = "What did they do?" - abuseLabel.Font = Enum.Font.Arial - abuseLabel.BackgroundTransparency = 1 - abuseLabel.FontSize = Enum.FontSize.Size18 - abuseLabel.Position = UDim2.new(0.025,0,0,140) - abuseLabel.Size = UDim2.new(0.4,0,0,36) - abuseLabel.TextColor3 = Color3I(255,255,255) - abuseLabel.TextXAlignment = Enum.TextXAlignment.Left - abuseLabel.ZIndex = baseZIndex + 2 - abuseLabel.Parent = settingsFrame - - local abuses = {"Bad Words or Threats","Bad Username","Talking about Dating","Account Trading or Sharing","Asking Personal Questions","Rude or Mean Behavior","False Reporting Me"} - local abuseDropDown, updateAbuseSelection = RbxGui.CreateDropDownMenu(abuses, - function(abuseText) - abuse = abuseText - if abuse and abusingPlayer then - submitReportButton.Active = true - end - end, true) - abuseDropDown.Name = "AbuseComboBox" - abuseDropDown.ZIndex = baseZIndex + 2 - abuseDropDown.Position = UDim2.new(0.425, 0, 0, 142) - abuseDropDown.Size = UDim2.new(0.55,0,0,32) - abuseDropDown.Parent = settingsFrame - - local shortDescriptionLabel = Instance.new("TextLabel") - shortDescriptionLabel.Name = "ShortDescriptionLabel" - shortDescriptionLabel.Text = "Short Description: (optional)" - shortDescriptionLabel.Font = Enum.Font.Arial - shortDescriptionLabel.FontSize = Enum.FontSize.Size18 - shortDescriptionLabel.Position = UDim2.new(0.025,0,0,180) - shortDescriptionLabel.Size = UDim2.new(0.95,0,0,36) - shortDescriptionLabel.TextColor3 = Color3I(255,255,255) - shortDescriptionLabel.TextXAlignment = Enum.TextXAlignment.Left - shortDescriptionLabel.BackgroundTransparency = 1 - shortDescriptionLabel.ZIndex = baseZIndex + 2 - shortDescriptionLabel.Parent = settingsFrame - - local shortDescriptionWrapper = Instance.new("Frame") - shortDescriptionWrapper.Name = "ShortDescriptionWrapper" - shortDescriptionWrapper.Position = UDim2.new(0.025,0,0,220) - shortDescriptionWrapper.Size = UDim2.new(0.95,0,1,-310) - shortDescriptionWrapper.BackgroundColor3 = Color3I(0,0,0) - shortDescriptionWrapper.BorderSizePixel = 0 - shortDescriptionWrapper.ZIndex = baseZIndex + 2 - shortDescriptionWrapper.Parent = settingsFrame - - local shortDescriptionBox = Instance.new("TextBox") - shortDescriptionBox.Name = "TextBox" - shortDescriptionBox.Text = "" - shortDescriptionBox.ClearTextOnFocus = false - shortDescriptionBox.Font = Enum.Font.Arial - shortDescriptionBox.FontSize = Enum.FontSize.Size18 - shortDescriptionBox.Position = UDim2.new(0,3,0,3) - shortDescriptionBox.Size = UDim2.new(1,-6,1,-6) - shortDescriptionBox.TextColor3 = Color3I(255,255,255) - shortDescriptionBox.TextXAlignment = Enum.TextXAlignment.Left - shortDescriptionBox.TextYAlignment = Enum.TextYAlignment.Top - shortDescriptionBox.TextWrap = true - shortDescriptionBox.BackgroundColor3 = Color3I(0,0,0) - shortDescriptionBox.BorderSizePixel = 0 - shortDescriptionBox.ZIndex = baseZIndex + 2 - shortDescriptionBox.Parent = shortDescriptionWrapper - - submitReportButton = Instance.new("TextButton") - submitReportButton.Name = "SubmitReportBtn" - submitReportButton.Active = false - submitReportButton.Modal = true - submitReportButton.Font = Enum.Font.Arial - submitReportButton.FontSize = Enum.FontSize.Size18 - submitReportButton.Position = UDim2.new(0.1, 0, 1, -80) - submitReportButton.Size = UDim2.new(0.35,0,0,50) - submitReportButton.AutoButtonColor = true - submitReportButton.Style = Enum.ButtonStyle.RobloxButtonDefault - submitReportButton.Text = "Submit Report" - submitReportButton.TextColor3 = Color3I(255,255,255) - submitReportButton.ZIndex = baseZIndex + 2 - submitReportButton.Parent = settingsFrame - - submitReportButton.MouseButton1Click:connect(function() - if submitReportButton.Active then - if abuse and abusingPlayer then - frame.Visible = false - game.Players:ReportAbuse(abusingPlayer, abuse, shortDescriptionBox.Text) - if abuse == "Rude or Mean Behavior" or abuse == "False Reporting Me" then - calmingMessageBox.Visible = true - else - normalMessageBox.Visible = true - end - else - closeAndResetDialog() - end - end - end) - - local cancelButton = Instance.new("TextButton") - cancelButton.Name = "CancelBtn" - cancelButton.Font = Enum.Font.Arial - cancelButton.FontSize = Enum.FontSize.Size18 - cancelButton.Position = UDim2.new(0.55, 0, 1, -80) - cancelButton.Size = UDim2.new(0.35,0,0,50) - cancelButton.AutoButtonColor = true - cancelButton.Style = Enum.ButtonStyle.RobloxButtonDefault - cancelButton.Text = "Cancel" - cancelButton.TextColor3 = Color3I(255,255,255) - cancelButton.ZIndex = baseZIndex + 2 - cancelButton.Parent = settingsFrame - - closeAndResetDialog = function() - --Delete old player combo box - local oldComboBox = settingsFrame:FindFirstChild("PlayersComboBox") - if oldComboBox then - oldComboBox.Parent = nil - end - - abusingPlayer = nil updatePlayerSelection(nil) - abuse = nil updateAbuseSelection(nil) - submitReportButton.Active = false - shortDescriptionBox.Text = "" - frame.Visible = true - calmingMessageBox.Visible = false - normalMessageBox.Visible = false - shield.Visible = false - reportAbuseButton.Active = true - game.GuiService:RemoveCenterDialog(shield) - end - - cancelButton.MouseButton1Click:connect(closeAndResetDialog) - - reportAbuseButton.MouseButton1Click:connect( - function() - createPlayersDropDown().Parent = settingsFrame - table.insert(centerDialogs,shield) - game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, - --ShowFunction - function() - reportAbuseButton.Active = false - shield.Visible = true - mainShield.Visible = false - end, - --HideFunction - function() - reportAbuseButton.Active = true - shield.Visible = false - end) - end) - - robloxLock(shield) - return shield -end - ---Spawn a thread for the Save dialogs -local isSaveDialogSupported = pcall(function() local var = game.LocalSaveEnabled end) -if isSaveDialogSupported then - delay(0, - function() - local saveDialogs = createSaveDialogs() - saveDialogs.Parent = gui - - game.RequestShutdown = function() - table.insert(centerDialogs,saveDialogs) - game.GuiService:AddCenterDialog(saveDialogs, Enum.CenterDialogType.QuitDialog, - --ShowFunction - function() - saveDialogs.Visible = true - end, - --HideFunction - function() - saveDialogs.Visible = false - end) - - return true - end - end) -end - ---Spawn a thread for the Report Abuse dialogs -delay(0, - function() - createReportAbuseDialog().Parent = gui - waitForChild(gui,"UserSettingsShield") - waitForChild(gui.UserSettingsShield, "Settings") - waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") - waitForChild(gui.UserSettingsShield.Settings.SettingsStyle,"GameMainMenu") - waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton") - gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton.Active = true - end) - ---Spawn a thread for Chat Bar -local coreGuiVersion = game.CoreGui.Version -local success, luaChat = pcall(function() return game.GuiService.UseLuaChat end) -if success and luaChat then - - delay(0, - function() - waitForChild(game, "Players") - waitForProperty(game.Players, "LocalPlayer") - - local advancedChatBarSupported = game.Players.LocalPlayer.ChatMode - local chatBar, toggleHotKey = createChatBar() - - if advancedChatBarSupported then - local function toggleChatBar(chatMode) - if chatMode == Enum.ChatMode.Menu then - chatBar.Parent = nil - game.GuiService:SetGlobalSizeOffsetPixel(0,0) - toggleHotKey(false) - elseif chatMode == Enum.ChatMode.TextAndMenu then - chatBar.Parent = gui - game.GuiService:SetGlobalSizeOffsetPixel(0,-22) - toggleHotKey(true) - end - end - game.Players.LocalPlayer.Changed:connect( - function(prop) - if prop == "ChatMode" then - toggleChatBar(game.Players.LocalPlayer.ChatMode) - end - end) - toggleChatBar(game.Players.LocalPlayer.ChatMode) - else - chatBar.Parent = gui - game.GuiService:SetGlobalSizeOffsetPixel(0,-22) - end - end) -end - - -local BurningManPlaceID = 41324860 --- TODO: remove click to walk completely if testing shows we don't need it --- Removes click to walk option from Burning Man -delay(0, - function() - waitForChild(game,"NetworkClient") - waitForChild(game,"Players") - waitForProperty(game.Players, "LocalPlayer") - waitForProperty(game.Players.LocalPlayer, "Character") - waitForChild(game.Players.LocalPlayer.Character, "Humanoid") - waitForProperty(game, "PlaceId") - - if game.PlaceId == BurningManPlaceID then - game.Players.LocalPlayer.Character.Humanoid:SetClickToWalkEnabled(false) - game.Players.LocalPlayer.CharacterAdded:connect(function(character) - waitForChild(character, "Humanoid") - character.Humanoid:SetClickToWalkEnabled(false) - end) - end - end) - -end --LoadLibrary if \ No newline at end of file diff --git a/maintenance/asset/6 b/maintenance/asset/6 deleted file mode 100644 index 9564830..0000000 --- a/maintenance/asset/6 +++ /dev/null @@ -1,561 +0,0 @@ -%6% -function waitForProperty(instance, name) - while not instance[name] do - instance.Changed:wait() - end -end - -function waitForChild(instance, name) - while not instance:FindFirstChild(name) do - instance.ChildAdded:wait() - end -end - - -local mainFrame -local choices = {} -local lastChoice -local choiceMap = {} -local currentConversationDialog -local currentConversationPartner -local currentAbortDialogScript - -local tooFarAwayMessage = "You are too far away to chat!" -local tooFarAwaySize = 300 -local characterWanderedOffMessage = "Chat ended because you walked away" -local characterWanderedOffSize = 350 -local conversationTimedOut = "Chat ended because you didn't reply" -local conversationTimedOutSize = 350 - -local player -local screenGui -local chatNotificationGui -local messageDialog -local timeoutScript -local reenableDialogScript -local dialogMap = {} -local dialogConnections = {} - -local gui = nil -waitForChild(game,"CoreGui") -waitForChild(game.CoreGui,"RobloxGui") -if game.CoreGui.RobloxGui:FindFirstChild("ControlFrame") then - gui = game.CoreGui.RobloxGui.ControlFrame -else - gui = game.CoreGui.RobloxGui -end - -function currentTone() - if currentConversationDialog then - return currentConversationDialog.Tone - else - return Enum.DialogTone.Neutral - end -end - - -function createChatNotificationGui() - chatNotificationGui = Instance.new("BillboardGui") - chatNotificationGui.Name = "ChatNotificationGui" - chatNotificationGui.ExtentsOffset = Vector3.new(0,1,0) - chatNotificationGui.Size = UDim2.new(4, 0, 5.42857122, 0) - chatNotificationGui.SizeOffset = Vector2.new(0,0) - chatNotificationGui.StudsOffset = Vector3.new(0.4, 4.3, 0) - chatNotificationGui.Enabled = true - chatNotificationGui.RobloxLocked = true - chatNotificationGui.Active = true - - local image = Instance.new("ImageLabel") - image.Name = "Image" - image.Active = false - image.BackgroundTransparency = 1 - image.Position = UDim2.new(0,0,0,0) - image.Size = UDim2.new(1.0,0,1.0,0) - image.Image = "" - image.RobloxLocked = true - image.Parent = chatNotificationGui - - - local button = Instance.new("ImageButton") - button.Name = "Button" - button.AutoButtonColor = false - button.Position = UDim2.new(0.0879999995, 0, 0.0529999994, 0) - button.Size = UDim2.new(0.829999983, 0, 0.460000008, 0) - button.Image = "" - button.BackgroundTransparency = 1 - button.RobloxLocked = true - button.Parent = image -end - -function getChatColor(tone) - if tone == Enum.DialogTone.Neutral then - return Enum.ChatColor.Blue - elseif tone == Enum.DialogTone.Friendly then - return Enum.ChatColor.Green - elseif tone == Enum.DialogTone.Enemy then - return Enum.ChatColor.Red - end -end - -function styleChoices(tone) - for i, obj in pairs(choices) do - resetColor(obj, tone) - end - resetColor(lastChoice, tone) -end - -function styleMainFrame(tone) - if tone == Enum.DialogTone.Neutral then - mainFrame.Style = Enum.FrameStyle.ChatBlue - mainFrame.Tail.Image = "rbxasset://textures/chatBubble_botBlue_tailRight.png" - elseif tone == Enum.DialogTone.Friendly then - mainFrame.Style = Enum.FrameStyle.ChatGreen - mainFrame.Tail.Image = "rbxasset://textures/chatBubble_botGreen_tailRight.png" - elseif tone == Enum.DialogTone.Enemy then - mainFrame.Style = Enum.FrameStyle.ChatRed - mainFrame.Tail.Image = "rbxasset://textures/chatBubble_botRed_tailRight.png" - end - - styleChoices(tone) -end -function setChatNotificationTone(gui, purpose, tone) - if tone == Enum.DialogTone.Neutral then - gui.Image.Image = "rbxasset://textures/chatBubble_botBlue_notify_bkg.png" - elseif tone == Enum.DialogTone.Friendly then - gui.Image.Image = "rbxasset://textures/chatBubble_botGreen_notify_bkg.png" - elseif tone == Enum.DialogTone.Enemy then - gui.Image.Image = "rbxasset://textures/chatBubble_botRed_notify_bkg.png" - end - if purpose == Enum.DialogPurpose.Quest then - gui.Image.Button.Image = "rbxasset://textures/chatBubble_bot_notify_bang.png" - elseif purpose == Enum.DialogPurpose.Help then - gui.Image.Button.Image = "rbxasset://textures/chatBubble_bot_notify_question.png" - elseif purpose == Enum.DialogPurpose.Shop then - gui.Image.Button.Image = "rbxasset://textures/chatBubble_bot_notify_money.png" - end -end - -function createMessageDialog() - messageDialog = Instance.new("Frame"); - messageDialog.Name = "DialogScriptMessage" - messageDialog.Style = Enum.FrameStyle.RobloxRound - messageDialog.Visible = false - - local text = Instance.new("TextLabel") - text.Name = "Text" - text.Position = UDim2.new(0,0,0,-1) - text.Size = UDim2.new(1,0,1,0) - text.FontSize = Enum.FontSize.Size14 - text.BackgroundTransparency = 1 - text.TextColor3 = Color3.new(1,1,1) - text.RobloxLocked = true - text.Parent = messageDialog -end - -function showMessage(msg, size) - messageDialog.Text.Text = msg - messageDialog.Size = UDim2.new(0,size,0,40) - messageDialog.Position = UDim2.new(0.5, -size/2, 0.5, -40) - messageDialog.Visible = true - wait(2) - messageDialog.Visible = false -end - -function variableDelay(str) - local length = math.min(string.len(str), 100) - wait(0.75 + ((length/75) * 1.5)) -end - -function resetColor(frame, tone) - if tone == Enum.DialogTone.Neutral then - frame.BackgroundColor3 = Color3.new(0/255, 0/255, 179/255) - frame.Number.TextColor3 = Color3.new(45/255, 142/255, 245/255) - elseif tone == Enum.DialogTone.Friendly then - frame.BackgroundColor3 = Color3.new(0/255, 77/255, 0/255) - frame.Number.TextColor3 = Color3.new(0/255, 190/255, 0/255) - elseif tone == Enum.DialogTone.Enemy then - frame.BackgroundColor3 = Color3.new(140/255, 0/255, 0/255) - frame.Number.TextColor3 = Color3.new(255/255,88/255, 79/255) - end -end - -function highlightColor(frame, tone) - if tone == Enum.DialogTone.Neutral then - frame.BackgroundColor3 = Color3.new(2/255, 108/255, 255/255) - frame.Number.TextColor3 = Color3.new(1, 1, 1) - elseif tone == Enum.DialogTone.Friendly then - frame.BackgroundColor3 = Color3.new(0/255, 128/255, 0/255) - frame.Number.TextColor3 = Color3.new(1, 1, 1) - elseif tone == Enum.DialogTone.Enemy then - frame.BackgroundColor3 = Color3.new(204/255, 0/255, 0/255) - frame.Number.TextColor3 = Color3.new(1, 1, 1) - end -end - -function wanderDialog() - print("Wander") - mainFrame.Visible = false - endDialog() - showMessage(characterWanderedOffMessage, characterWanderedOffSize) -end - -function timeoutDialog() - print("Timeout") - mainFrame.Visible = false - endDialog() - showMessage(conversationTimedOut, conversationTimedOutSize) -end -function normalEndDialog() - print("Done") - endDialog() -end - -function endDialog() - if currentAbortDialogScript then - currentAbortDialogScript:Remove() - currentAbortDialogScript = nil - end - - local dialog = currentConversationDialog - currentConversationDialog = nil - if dialog and dialog.InUse then - local reenableScript = reenableDialogScript:Clone() - reenableScript.archivable = false - reenableScript.Disabled = false - reenableScript.Parent = dialog - end - - for dialog, gui in pairs(dialogMap) do - if dialog and gui then - gui.Enabled = not dialog.InUse - end - end - - currentConversationPartner = nil -end - -function sanitizeMessage(msg) - if string.len(msg) == 0 then - return "..." - else - return msg - end -end - -function selectChoice(choice) - renewKillswitch(currentConversationDialog) - - --First hide the Gui - mainFrame.Visible = false - if choice == lastChoice then - game.Chat:Chat(game.Players.LocalPlayer.Character, "Goodbye!", getChatColor(currentTone())) - - normalEndDialog() - else - local dialogChoice = choiceMap[choice] - - game.Chat:Chat(game.Players.LocalPlayer.Character, sanitizeMessage(dialogChoice.UserDialog), getChatColor(currentTone())) - wait(1) - currentConversationDialog:SignalDialogChoiceSelected(player, dialogChoice) - game.Chat:Chat(currentConversationPartner, sanitizeMessage(dialogChoice.ResponseDialog), getChatColor(currentTone())) - - variableDelay(dialogChoice.ResponseDialog) - presentDialogChoices(currentConversationPartner, dialogChoice:GetChildren()) - end -end - -function newChoice(numberText) - local frame = Instance.new("TextButton") - frame.BackgroundColor3 = Color3.new(0/255, 0/255, 179/255) - frame.AutoButtonColor = false - frame.BorderSizePixel = 0 - frame.Text = "" - frame.MouseEnter:connect(function() highlightColor(frame, currentTone()) end) - frame.MouseLeave:connect(function() resetColor(frame, currentTone()) end) - frame.MouseButton1Click:connect(function() selectChoice(frame) end) - frame.RobloxLocked = true - - local number = Instance.new("TextLabel") - number.Name = "Number" - number.TextColor3 = Color3.new(127/255, 212/255, 255/255) - number.Text = numberText - number.FontSize = Enum.FontSize.Size14 - number.BackgroundTransparency = 1 - number.Position = UDim2.new(0,4,0,2) - number.Size = UDim2.new(0,20,0,24) - number.TextXAlignment = Enum.TextXAlignment.Left - number.TextYAlignment = Enum.TextYAlignment.Top - number.RobloxLocked = true - number.Parent = frame - - local prompt = Instance.new("TextLabel") - prompt.Name = "UserPrompt" - prompt.BackgroundTransparency = 1 - prompt.TextColor3 = Color3.new(1,1,1) - prompt.FontSize = Enum.FontSize.Size14 - prompt.Position = UDim2.new(0,28, 0, 2) - prompt.Size = UDim2.new(1,-32, 1, -4) - prompt.TextXAlignment = Enum.TextXAlignment.Left - prompt.TextYAlignment = Enum.TextYAlignment.Top - prompt.TextWrap = true - prompt.RobloxLocked = true - prompt.Parent = frame - - return frame -end -function initialize(parent) - choices[1] = newChoice("1)") - choices[2] = newChoice("2)") - choices[3] = newChoice("3)") - choices[4] = newChoice("4)") - - lastChoice = newChoice("5)") - lastChoice.UserPrompt.Text = "Goodbye!" - lastChoice.Size = UDim2.new(1,0,0,28) - - mainFrame = Instance.new("Frame") - mainFrame.Name = "UserDialogArea" - mainFrame.Size = UDim2.new(0, 350, 0, 200) - mainFrame.Style = Enum.FrameStyle.ChatBlue - mainFrame.Visible = false - - imageLabel = Instance.new("ImageLabel") - imageLabel.Name = "Tail" - imageLabel.Size = UDim2.new(0,62,0,53) - imageLabel.Position = UDim2.new(1,8,0.25) - imageLabel.Image = "rbxasset://textures/chatBubble_botBlue_tailRight.png" - imageLabel.BackgroundTransparency = 1 - imageLabel.RobloxLocked = true - imageLabel.Parent = mainFrame - - for n, obj in pairs(choices) do - obj.RobloxLocked = true - obj.Parent = mainFrame - end - lastChoice.RobloxLocked = true - lastChoice.Parent = mainFrame - - mainFrame.RobloxLocked = true - mainFrame.Parent = parent -end - -function presentDialogChoices(talkingPart, dialogChoices) - if not currentConversationDialog then - return - end - - currentConversationPartner = talkingPart - sortedDialogChoices = {} - for n, obj in pairs(dialogChoices) do - if obj:IsA("DialogChoice") then - table.insert(sortedDialogChoices, obj) - end - end - table.sort(sortedDialogChoices, function(a,b) return a.Name < b.Name end) - - if #sortedDialogChoices == 0 then - normalEndDialog() - return - end - - local pos = 1 - local yPosition = 0 - choiceMap = {} - for n, obj in pairs(choices) do - obj.Visible = false - end - - for n, obj in pairs(sortedDialogChoices) do - if pos <= #choices then - --3 lines is the maximum, set it to that temporarily - choices[pos].Size = UDim2.new(1, 0, 0, 24*3) - choices[pos].UserPrompt.Text = obj.UserDialog - local height = math.ceil(choices[pos].UserPrompt.TextBounds.Y/24)*24 - - choices[pos].Position = UDim2.new(0, 0, 0, yPosition) - choices[pos].Size = UDim2.new(1, 0, 0, height) - choices[pos].Visible = true - - choiceMap[choices[pos]] = obj - - yPosition = yPosition + height - pos = pos + 1 - end - end - - lastChoice.Position = UDim2.new(0,0,0,yPosition) - lastChoice.Number.Text = pos .. ")" - - mainFrame.Size = UDim2.new(0, 350, 0, yPosition+24+32) - mainFrame.Position = UDim2.new(0,20,0.0, -mainFrame.Size.Y.Offset-20) - styleMainFrame(currentTone()) - mainFrame.Visible = true -end - -function doDialog(dialog) - while not Instance.Lock(dialog, player) do - wait() - end - - if dialog.InUse then - Instance.Unlock(dialog) - return - else - dialog.InUse = true - Instance.Unlock(dialog) - end - - currentConversationDialog = dialog - game.Chat:Chat(dialog.Parent, dialog.InitialPrompt, getChatColor(dialog.Tone)) - variableDelay(dialog.InitialPrompt) - - presentDialogChoices(dialog.Parent, dialog:GetChildren()) -end - -function renewKillswitch(dialog) - if currentAbortDialogScript then - currentAbortDialogScript:Remove() - currentAbortDialogScript = nil - end - - currentAbortDialogScript = timeoutScript:Clone() - currentAbortDialogScript.archivable = false - currentAbortDialogScript.Disabled = false - currentAbortDialogScript.Parent = dialog -end - -function checkForLeaveArea() - while currentConversationDialog do - if currentConversationDialog.Parent and (player:DistanceFromCharacter(currentConversationDialog.Parent.Position) >= currentConversationDialog.ConversationDistance) then - wanderDialog() - end - wait(1) - end -end - -function startDialog(dialog) - if dialog.Parent and dialog.Parent:IsA("BasePart") then - if player:DistanceFromCharacter(dialog.Parent.Position) >= dialog.ConversationDistance then - showMessage(tooFarAwayMessage, tooFarAwaySize) - return - end - - for dialog, gui in pairs(dialogMap) do - if dialog and gui then - gui.Enabled = false - end - end - - renewKillswitch(dialog) - - delay(1, checkForLeaveArea) - doDialog(dialog) - end -end - -function removeDialog(dialog) - if dialogMap[dialog] then - dialogMap[dialog]:Remove() - dialogMap[dialog] = nil - end - if dialogConnections[dialog] then - dialogConnections[dialog]:disconnect() - dialogConnections[dialog] = nil - end -end - -function addDialog(dialog) - if dialog.Parent then - if dialog.Parent:IsA("BasePart") then - local chatGui = chatNotificationGui:clone() - chatGui.Enabled = not dialog.InUse - chatGui.Adornee = dialog.Parent - chatGui.RobloxLocked = true - chatGui.Parent = game.CoreGui - chatGui.Image.Button.MouseButton1Click:connect(function() startDialog(dialog) end) - setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone) - - dialogMap[dialog] = chatGui - - dialogConnections[dialog] = dialog.Changed:connect(function(prop) - if prop == "Parent" and dialog.Parent then - --This handles the reparenting case, seperate from removal case - removeDialog(dialog) - addDialog(dialog) - elseif prop == "InUse" then - chatGui.Enabled = not currentConversationDialog and not dialog.InUse - if dialog == currentConversationDialog then - timeoutDialog() - end - elseif prop == "Tone" or prop == "Purpose" then - setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone) - end - end) - else -- still need to listen to parent changes even if current parent is not a BasePart - dialogConnections[dialog] = dialog.Changed:connect(function(prop) - if prop == "Parent" and dialog.Parent then - --This handles the reparenting case, seperate from removal case - removeDialog(dialog) - addDialog(dialog) - end - end) - end - end -end - -function fetchScripts() - local model = game:GetService("InsertService"):LoadAsset(39226062) - if type(model) == "string" then -- load failed, lets try again - wait(0.1) - model = game:GetService("InsertService"):LoadAsset(39226062) - end - if type(model) == "string" then -- not going to work, lets bail - return - end - - waitForChild(model,"TimeoutScript") - timeoutScript = model.TimeoutScript - waitForChild(model,"ReenableDialogScript") - reenableDialogScript = model.ReenableDialogScript -end - -function onLoad() - waitForProperty(game.Players, "LocalPlayer") - player = game.Players.LocalPlayer - waitForProperty(player, "Character") - - --print("Fetching Scripts") - fetchScripts() - - --print("Creating Guis") - createChatNotificationGui() - - --print("Creating MessageDialog") - createMessageDialog() - messageDialog.RobloxLocked = true - messageDialog.Parent = gui - - --print("Waiting for BottomLeftControl") - waitForChild(gui, "BottomLeftControl") - - --print("Initializing Frame") - local frame = Instance.new("Frame") - frame.Name = "DialogFrame" - frame.Position = UDim2.new(0,0,0,0) - frame.Size = UDim2.new(0,0,0,0) - frame.BackgroundTransparency = 1 - frame.RobloxLocked = true - frame.Parent = gui.BottomLeftControl - initialize(frame) - - --print("Adding Dialogs") - game.CollectionService.ItemAdded:connect(function(obj) if obj:IsA("Dialog") then addDialog(obj) end end) - game.CollectionService.ItemRemoved:connect(function(obj) if obj:IsA("Dialog") then removeDialog(obj) end end) - for i, obj in pairs(game.CollectionService:GetCollection("Dialog")) do - if obj:IsA("Dialog") then - addDialog(obj) - end - end -end - -onLoad() \ No newline at end of file diff --git a/maintenance/asset/7 b/maintenance/asset/7 deleted file mode 100644 index ed579a4..0000000 --- a/maintenance/asset/7 +++ /dev/null @@ -1,73 +0,0 @@ -%7% ---build our gui - -local popupFrame = Instance.new("Frame") -popupFrame.Position = UDim2.new(0.5,-165,0.5,-175) -popupFrame.Size = UDim2.new(0,330,0,350) -popupFrame.Style = Enum.FrameStyle.RobloxRound -popupFrame.ZIndex = 4 -popupFrame.Name = "Popup" -popupFrame.Visible = false -popupFrame.Parent = script.Parent - -local darken = popupFrame:clone() -darken.Size = UDim2.new(1,16,1,16) -darken.Position = UDim2.new(0,-8,0,-8) -darken.Name = "Darken" -darken.ZIndex = 1 -darken.Parent = popupFrame - -local acceptButton = Instance.new("TextButton") -acceptButton.Position = UDim2.new(0,20,0,270) -acceptButton.Size = UDim2.new(0,100,0,50) -acceptButton.Font = Enum.Font.ArialBold -acceptButton.FontSize = Enum.FontSize.Size24 -acceptButton.Style = Enum.ButtonStyle.RobloxButton -acceptButton.TextColor3 = Color3.new(248/255,248/255,248/255) -acceptButton.Text = "Yes" -acceptButton.ZIndex = 5 -acceptButton.Name = "AcceptButton" -acceptButton.Parent = popupFrame - -local declineButton = acceptButton:clone() -declineButton.Position = UDim2.new(1,-120,0,270) -declineButton.Text = "No" -declineButton.Name = "DeclineButton" -declineButton.Parent = popupFrame - -local okButton = acceptButton:clone() -okButton.Name = "OKButton" -okButton.Text = "OK" -okButton.Position = UDim2.new(0.5,-50,0,270) -okButton.Visible = false -okButton.Parent = popupFrame - -local popupImage = Instance.new("ImageLabel") -popupImage.BackgroundTransparency = 1 -popupImage.Position = UDim2.new(0.5,-140,0,0) -popupImage.Size = UDim2.new(0,280,0,280) -popupImage.ZIndex = 3 -popupImage.Name = "PopupImage" -popupImage.Parent = popupFrame - -local backing = Instance.new("ImageLabel") -backing.BackgroundTransparency = 1 -backing.Size = UDim2.new(1,0,1,0) -backing.Image = "http://www.jarfeh.xyz/asset/?id=47574181" -backing.Name = "Backing" -backing.ZIndex = 2 -backing.Parent = popupImage - -local popupText = Instance.new("TextLabel") -popupText.Name = "PopupText" -popupText.Size = UDim2.new(1,0,0.8,0) -popupText.Font = Enum.Font.ArialBold -popupText.FontSize = Enum.FontSize.Size36 -popupText.BackgroundTransparency = 1 -popupText.Text = "Hello I'm a popup" -popupText.TextColor3 = Color3.new(248/255,248/255,248/255) -popupText.TextWrap = true -popupText.ZIndex = 5 -popupText.Parent = popupFrame - -script:remove() \ No newline at end of file diff --git a/maintenance/asset/8 b/maintenance/asset/8 deleted file mode 100644 index 075ab5d..0000000 --- a/maintenance/asset/8 +++ /dev/null @@ -1,215 +0,0 @@ -%8% -function waitForProperty(instance, property) - while not instance[property] do - instance.Changed:wait() - end -end -function waitForChild(instance, name) - while not instance:FindFirstChild(name) do - instance.ChildAdded:wait() - end -end - -waitForProperty(game.Players,"LocalPlayer") -waitForChild(script.Parent,"Popup") -waitForChild(script.Parent.Popup,"AcceptButton") -script.Parent.Popup.AcceptButton.Modal = true - -local localPlayer = game.Players.LocalPlayer -local acceptedTeleport = Instance.new("IntValue") - -local friendRequestBlacklist = {} - -local teleportEnabled = true - -local makePopupInvisible = function() - if script.Parent.Popup then script.Parent.Popup.Visible = false end -end - -function makeFriend(fromPlayer,toPlayer) - - local popup = script.Parent:FindFirstChild("Popup") - if popup == nil then return end -- there is no popup! - if popup.Visible then return end -- currently popping something, abort! - if friendRequestBlacklist[fromPlayer] then return end -- previously cancelled friend request, we don't want it! - - popup.PopupText.Text = "Accept Friend Request from " .. tostring(fromPlayer.Name) .. "?" - popup.PopupImage.Image = "http://www.jarfeh.xyz/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=352&y=352" - - showTwoButtons() - popup.Visible = true - popup.AcceptButton.Text = "Accept" - popup.DeclineButton.Text = "Decline" - popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) - - local yesCon, noCon - - yesCon = popup.AcceptButton.MouseButton1Click:connect(function() - popup.Visible = false - toPlayer:RequestFriendship(fromPlayer) - if yesCon then yesCon:disconnect() end - if noCon then noCon:disconnect() end - popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) - end) - - noCon = popup.DeclineButton.MouseButton1Click:connect(function() - popup.Visible = false - toPlayer:RevokeFriendship(fromPlayer) - friendRequestBlacklist[fromPlayer] = true - print("pop up blacklist") - if yesCon then yesCon:disconnect() end - if noCon then noCon:disconnect() end - popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) - end) -end - - -game.Players.FriendRequestEvent:connect(function(fromPlayer,toPlayer,event) - - -- if this doesn't involve me, then do nothing - if fromPlayer ~= localPlayer and toPlayer ~= localPlayer then return end - - if fromPlayer == localPlayer then - if event == Enum.FriendRequestEvent.Accept then - game:GetService("GuiService"):SendNotification("You are Friends", - "With " .. toPlayer.Name .. "!", - "http://www.jarfeh.xyz/thumbs/avatar.ashx?userId="..tostring(toPlayer.userId).."&x=48&y=48", - 5, - function() - - end) - end - elseif toPlayer == localPlayer then - if event == Enum.FriendRequestEvent.Issue then - if friendRequestBlacklist[fromPlayer] then return end -- previously cancelled friend request, we don't want it! - game:GetService("GuiService"):SendNotification("Friend Request", - "From " .. fromPlayer.Name, - "http://www.jarfeh.xyz/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=48&y=48", - 8, - function() - makeFriend(fromPlayer,toPlayer) - end) - elseif event == Enum.FriendRequestEvent.Accept then - game:GetService("GuiService"):SendNotification("You are Friends", - "With " .. fromPlayer.Name .. "!", - "http://www.jarfeh.xyz/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=48&y=48", - 5, - function() - - end) - end - end -end) - -function showOneButton() - local popup = script.Parent:FindFirstChild("Popup") - if popup then - popup.OKButton.Visible = true - popup.DeclineButton.Visible = false - popup.AcceptButton.Visible = false - end -end - -function showTwoButtons() - local popup = script.Parent:FindFirstChild("Popup") - if popup then - popup.OKButton.Visible = false - popup.DeclineButton.Visible = true - popup.AcceptButton.Visible = true - end -end - -if teleportEnabled then - game:GetService("TeleportService").ErrorCallback = function(message) - local popup = script.Parent:FindFirstChild("Popup") - showOneButton() - popup.PopupText.Text = message - local clickCon - clickCon = popup.OKButton.MouseButton1Click:connect(function() - if clickCon then clickCon:disconnect() end - game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup")) - popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) - end) - game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog, - --ShowFunction - function() - showOneButton() - script.Parent:FindFirstChild("Popup").Visible = true - popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) - end, - --HideFunction - function() - popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) - end) - - end - game:GetService("TeleportService").ConfirmationCallback = function(message, placeId, spawnName) - local popup = script.Parent:FindFirstChild("Popup") - popup.PopupText.Text = message - popup.PopupImage.Image = "" - - local yesCon, noCon - - local function killCons() - if yesCon then yesCon:disconnect() end - if noCon then noCon:disconnect() end - game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup")) - popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) - end - - yesCon = popup.AcceptButton.MouseButton1Click:connect(function() - killCons() - local success, err = pcall(function() game:GetService("TeleportService"):TeleportImpl(placeId,spawnName) end) - if not success then - showOneButton() - popup.PopupText.Text = err - local clickCon - clickCon = popup.OKButton.MouseButton1Click:connect(function() - if clickCon then clickCon:disconnect() end - game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup")) - popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) - end) - game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog, - --ShowFunction - function() - showOneButton() - script.Parent:FindFirstChild("Popup").Visible = true - popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) - end, - --HideFunction - function() - popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) - end) - end - end) - - noCon = popup.DeclineButton.MouseButton1Click:connect(function() - killCons() - local success = pcall(function() game:GetService("TeleportService"):TeleportCancel() end) - end) - - local centerDialogSuccess = pcall(function() game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog, - --ShowFunction - function() - showTwoButtons() - popup.AcceptButton.Text = "Leave" - popup.DeclineButton.Text = "Stay" - script.Parent:FindFirstChild("Popup").Visible = true - popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) - end, - --HideFunction - function() - popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) - end) - end) - - if centerDialogSuccess == false then - script.Parent:FindFirstChild("Popup").Visible = true - popup.AcceptButton.Text = "Leave" - popup.DeclineButton.Text = "Stay" - popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) - end - return true - - end -end \ No newline at end of file diff --git a/maintenance/asset/9 b/maintenance/asset/9 deleted file mode 100644 index 035e38a..0000000 --- a/maintenance/asset/9 +++ /dev/null @@ -1,939 +0,0 @@ -%9% ---[[ - //FileName: ChatScript.LUA - //Written by: Sorcus - //Description: Code for lua side chat on ROBLOX. Supports Scrolling. - //NOTE: If you find any bugs or inaccuracies PM Sorcus on ROBLOX or @Canavus on Twitter -]] - --- Utility functions + Globals -local function WaitForChild(parent, childName) - while parent:FindFirstChild(childName) == nil do - wait() - end - return parent[childName] -end - -local function typedef(obj) - return obj -end - -while Game.Players.LocalPlayer == nil do wait() end - -local Player = Game.Players.LocalPlayer -while Player.Character == nil do wait() end -local RbxUtility = LoadLibrary('RbxUtility') -local Gui = typedef(RbxUtility) -local Camera = Game.Workspace.CurrentCamera - --- Services -local CoreGuiService = Game:GetService('CoreGui') -local PlayersService = Game:GetService('Players') -local DebrisService= Game:GetService('Debris') -local GuiService = Game:GetService('GuiService') - --- Lua Enums -local Enums do - Enums = {} - local EnumName = {} -- used as unique key for enum name - local enum_mt = { - __call = function(self,value) - return self[value] or self[tonumber(value)] - end; - __index = { - GetEnumItems = function(self) - local t = {} - for i,item in pairs(self) do - if type(i) == 'number' then - t[#t+1] = item - end - end - table.sort(t,function(a,b) return a.Value < b.Value end) - return t - end; - }; - __tostring = function(self) - return "Enum." .. self[EnumName] - end; - } - local item_mt = { - __call = function(self,value) - return value == self or value == self.Name or value == self.Value - end; - __tostring = function(self) - return "Enum." .. self[EnumName] .. "." .. self.Name - end; - } - function CreateEnum(enumName) - return function(t) - local e = {[EnumName] = enumName} - for i,name in pairs(t) do - local item = setmetatable({Name=name,Value=i,Enum=e,[EnumName]=enumName},item_mt) - e[i] = item - e[name] = item - e[item] = item - end - Enums[enumName] = e - return setmetatable(e, enum_mt) - end - end -end ---------------------------------------------------- ------------------- Input class -------------------- -local Input = { - Mouse = Player:GetMouse(), - Speed = 0, - Simulating = false, - - Configuration = { - DefaultSpeed = 1 - }, - UserIsScrolling = false - } - ---------------------------------------------------- ------------------- Chat class -------------------- -local Chat = { - - ChatColors = { - BrickColor.new("Bright red"), - BrickColor.new("Bright blue"), - BrickColor.new("Earth green"), - BrickColor.new("Bright violet"), - BrickColor.new("Bright orange"), - BrickColor.new("Bright yellow"), - BrickColor.new("Light reddish violet"), - BrickColor.new("Brick yellow"), - }, - - Gui = nil, - Frame = nil, - RenderFrame = nil, - TapToChatLabel = nil, - ClickToChatButton = nil, - - ScrollingLock = false, - EventListener = nil, - - -- This is actually a ring buffer - -- Meaning at hitting the historyLength it wraps around - -- Reuses the text objects, so chat atmost uses 100 text objects - MessageQueue = {}, - - -- Stores all the values for configuring chat - Configuration = { - FontSize = Enum.FontSize.Size10, -- 10 is good - -- Also change this when you are changing the above, this is suboptimal but so is our interface to find FontSize - NumFontSize = 10, - HistoryLength = 50, -- stores up to 50 of the last chat messages for you to scroll through, - Size = UDim2.new(0.38, 0, 0.20, 0), - MessageColor = Color3.new(1, 1, 1), - XScale = 0.025, - LifeTime = 45, - Position = UDim2.new(0, 2, 0.05, 0), - DefaultTweenSpeed = 0.15, - }, - - -- This could be redone by just using the previous and next fields of the Queue - -- But the iterators cause issues, will be optimized later - SlotPositions_List = {}, - -- To precompute and store all player null strings since its an expensive process - CachedSpaceStrings_List = {}, - MouseOnFrame = false, - GotFocus = false, - - SafeChat_List = { - ['Use the Chat menu to talk to me.'] = {'/sc 0', true}, - ['I can only see menu chats.'] = {'/sc 1', true}, - ['Hello'] = { - ['Hi'] = {'/sc 2_0', true, ['Hi there!'] = true, ['Hi everyone'] = true}, - ['Howdy'] = {'/sc 2_1', true, ['Howdy partner!'] = true}, - ['Greetings'] = {'/sc 2_2', true, ['Greetings everyone'] = true, ['Greetings Robloxians!'] = true, ['Seasons greetings!'] = true}, - ['Welcome'] = {'/sc 2_3', true, ['Welcome to my place'] = true, ['Welcome to my barbeque'] = true, ['Welcome to our base'] = true}, - ['Hey there!'] = {'/sc 2_4', true}, - ['What\'s up?'] = {'/sc 2_5', true, ['How are you doing?'] = true, ['How\'s it going?'] = true, ['What\'s new?'] = true}, - ['Good day'] = {'/sc 2_6', true, ['Good morning'] = true, ['Good evening'] = true, ['Good afternoon'] = true, ['Good night'] = true}, - ['Silly'] = {'/sc 2_7', true, ['Waaaaaaaz up?!'] = true, ['Hullo!'] = true, ['Behold greatness, mortals!'] = true, ['Pardon me, is this Sparta?'] = true, ['THIS IS SPARTAAAA!'] = true}, - ['Happy Holidays!'] = {'/sc 2_8', true, ['Happy New Year!'] = true, - ['Happy Valentine\'s Day!'] = true, - ['Beware the Ides of March!'] = true, - ['Happy St. Patrick\'s Day!'] = true, - ['Happy Easter!'] = true, - ['Happy Earth Day!'] = true, - ['Happy 4th of July!'] = true, - ['Happy Thanksgiving!'] = true, - ['Happy Halloween!'] = true, - ['Happy Hanukkah!'] = true, - ['Merry Christmas!'] = true, - ['Happy Halloween!'] = true, - ['Happy Earth Day!'] = true, - ['Happy May Day!'] = true, - ['Happy Towel Day!'] = true, - ['Happy ROBLOX Day!'] = true, - ['Happy LOL Day!'] = true }, - - [1] = '/sc 2' - }, - ['Goodbye'] = { - ['Good Night']= {'/sc 3_0', true, - ['Sweet dreams'] = true, - ['Go to sleep!'] = true, - ['Lights out!'] = true, - ['Bedtime'] = true, - ['Going to bed now'] = true}, - - ['Later']= {'/sc 3_1', true, - ['See ya later'] = true, - ['Later gator!'] = true, - ['See you tomorrow'] = true}, - - ['Bye'] = {'/sc 3_2', true, ['Hasta la bye bye!'] = true}, - ['I\'ll be right back'] = {'/sc 3_3', true}, - ['I have to go'] = {'/sc 3_4', true}, - ['Farewell'] = {'/sc 3_5', true, ['Take care'] = true, ['Have a nice day'] = true, ['Goodluck!'] = true, ['Ta-ta for now!'] = true}, - ['Peace'] = {'/sc 3_6', true, ['Peace out!'] = true, ['Peace dudes!'] = true, ['Rest in pieces!'] = true}, - ['Silly'] = {'/sc 3_7', true, - ['To the batcave!'] = true, - ['Over and out!'] = true, - ['Happy trails!'] = true, - ['I\'ve got to book it!'] = true, - ['Tootles!'] = true, - ['Smell you later!'] = true, - ['GG!'] = true, - ['My house is on fire! gtg.'] = true}, - [1] = '/sc 3' - }, - ['Friend'] ={ - ['Wanna be friends?'] = {'/sc 4_0', true}, - ['Follow me'] = {'/sc 4_1', true, ['Come to my place!'] = true, ['Come to my base!'] = true, ['Follow me, team!'] = true, ['Follow me'] = true}, - ['Your place is cool'] = {'/sc 4_2', true, ['Your place is fun'] = true, ['Your place is awesome'] = true, ['Your place looks good'] = true, ['This place is awesome!'] = true}, - ['Thank you'] = {'/sc 4_3', true, ['Thanks for playing'] = true, ['Thanks for visiting'] = true, ['Thanks for everything'] = true, ['No, thank you'] = true, ['Thanx'] = true}, - ['No problem'] = {'/sc 4_4', true, ['Don\'t worry'] = true, ['That\'s ok'] = true, ['np'] = true}, - ['You are ...'] = {'/sc 4_5', true, - ['You are great!'] = true, - ['You are good!'] = true, - ['You are cool!'] = true, - ['You are funny!'] = true, - ['You are silly!'] = true, - ['You are awesome!'] = true, - ['You are doing something I don\'t like, please stop'] = true - }, - ['I like ...'] = {'/sc 4_6', true, ['I like your name'] = true, ['I like your shirt'] = true, ['I like your place'] = true, ['I like your style'] = true, - ['I like you'] = true, ['I like items'] = true, ['I like money'] = true}, - ['Sorry'] = {'/sc 4_7', true, ['My bad!'] = true, ['I\'m sorry'] = true, ['Whoops!'] = true, ['Please forgive me.'] = true, ['I forgive you.'] = true, - ['I didn\'t mean to do that.'] = true, ['Sorry, I\'ll stop now.'] = true}, - [1] = '/sc 4' - }, - ['Questions'] = { - ['Who?'] = {'/sc 5_0', true, ['Who wants to be my friend?'] = true, ['Who wants to be on my team?'] = true, ['Who made this brilliant game?'] = true}, - ['What?'] = {'/sc 5_1', true, ['What is your favorite animal?'] = true, ['What is your favorite game?'] = true, ['What is your favorite movie?'] = true, - ['What is your favorite TV show?'] = true, ['What is your favorite music?'] = true, ['What are your hobbies?'] = true, ['LOLWUT?'] = true}, - ['When?'] = {'/sc 5_2', true, ['When are you online?'] = true, ['When is the new version coming out?'] = true, ['When can we play again?'] = true, ['When will your place be done?'] = true}, - ['Where?'] = {'/sc 5_3', true, ['Where do you want to go?'] = true, ['Where are you going?'] = true, ['Where am I?!'] = true, ['Where did you go?'] = true}, - ['How?'] = {'/sc 5_4', true, ['How are you today?'] = true, ['How did you make this cool place?'] = true, ['LOLHOW?'] = true}, - ['Can I...'] = {'/sc 5_5', true, ['Can I have a tour?'] = true, ['Can I be on your team?'] = true, ['Can I be your friend?'] = true, ['Can I try something?'] = true, - ['Can I have that please?'] = true, ['Can I have that back please?'] = true, ['Can I have borrow your hat?'] = true, ['Can I have borrow your gear?'] = true}, - [1] = '/sc 5' - }, - ['Answers'] = { - ['You need help?'] = {'/sc 6_0', true, ['Check out the news section'] = true, ['Check out the help section'] = true, ['Read the wiki!'] = true, - ['All the answers are in the wiki!'] = true, ['I will help you with this.'] = true}, - ['Some people ...'] = {'/sc 6_1', true, ['Me'] = true, ['Not me'] = true, ['You'] = true, ['All of us'] = true, ['Everyone but you'] = true, ['Builderman!'] = true, - ['Telamon!'] = true, ['My team'] = true, ['My group'] = true, ['Mom'] = true, ['Dad'] = true, ['Sister'] = true, ['Brother'] = true, ['Cousin'] = true, - ['Grandparent'] = true, ['Friend'] = true}, - ['Time ...'] = {'/sc 6_2', true, ['In the morning'] = true, ['In the afternoon'] = true, ['At night'] = true, ['Tomorrow'] = true, ['This week'] = true, ['This month'] = true, - ['Sometime'] = true, ['Sometimes'] = true, ['Whenever you want'] = true, ['Never'] = true, ['After this'] = true, ['In 10 minutes'] = true, ['In a couple hours'] = true, - ['In a couple days'] = true}, - ['Animals'] = {'/sc 6_3', true, - ['Cats'] = {['Lion'] = true, ['Tiger'] = true, ['Leopard'] = true, ['Cheetah'] = true}, - ['Dogs'] = {['Wolves'] = true, ['Beagle'] = true, ['Collie'] = true, ['Dalmatian'] = true, ['Poodle'] = true, ['Spaniel'] = true, - ['Shepherd'] = true, ['Terrier'] = true, ['Retriever'] = true}, - ['Horses'] = {['Ponies'] = true, ['Stallions'] = true, ['Pwnyz'] = true}, - ['Reptiles'] = {['Dinosaurs'] = true, ['Lizards'] = true, ['Snakes'] = true, ['Turtles!'] = true}, - ['Hamster'] = true, - ['Monkey'] = true, - ['Bears'] = true, - ['Fish'] = {['Goldfish'] = true, ['Sharks'] = true, ['Sea Bass'] = true, ['Halibut'] = true, ['Tropical Fish'] = true}, - ['Birds'] = {['Eagles'] = true, ['Penguins'] = true, ['Parakeets'] = true, ['Owls'] = true, ['Hawks'] = true, ['Pidgeons'] = true}, - ['Elephants'] = true, - ['Mythical Beasts'] = {['Dragons'] = true, ['Unicorns'] = true, ['Sea Serpents'] = true, ['Sphinx'] = true, ['Cyclops'] = true, - ['Minotaurs'] = true, ['Goblins'] = true, ['Honest Politicians'] = true, ['Ghosts'] = true, ['Scylla and Charybdis'] = true} - }, - ['Games'] = {'/sc 6_4', true, - ['Action'] = true, ['Puzzle'] = true, ['Strategy'] = true, ['Racing'] = true, ['RPG'] = true, ['Obstacle Course'] = true, ['Tycoon'] = true, - ['Roblox'] = { ['BrickBattle'] = true, ['Community Building'] = true, ['Roblox Minigames'] = true, ['Contest Place'] = true}, - ['Board games'] = { ['Chess'] = true, ['Checkers'] = true, ['Settlers of Catan'] = true, ['Tigris and Euphrates'] = true, ['El Grande'] = true, - ['Stratego'] = true, ['Carcassonne'] = true} - }, - ['Sports'] = {'/sc 6_5', true, ['Hockey'] = true, ['Soccer'] = true, ['Football'] = true, ['Baseball'] = true, ['Basketball'] = true, - ['Volleyball'] = true, ['Tennis'] = true, ['Sports team practice'] = true, - ['Watersports'] = { ['Surfing'] = true,['Swimming'] = true, ['Water Polo'] = true}, - ['Winter sports'] = { ['Skiing'] = true, ['Snowboarding'] = true, ['Sledding'] = true, ['Skating'] = true}, - ['Adventure'] = {['Rock climbing'] = true, ['Hiking'] = true, ['Fishing'] = true, ['Horseback riding'] = true}, - ['Wacky'] = {['Foosball'] = true, ['Calvinball'] = true, ['Croquet'] = true, ['Cricket'] = true, ['Dodgeball'] = true, - ['Squash'] = true, ['Trampoline'] = true} - }, - ['Movies/TV'] = {'/sc 6_6', true, ['Science Fiction'] = true, ['Animated'] = {['Anime'] = true}, ['Comedy'] = true, ['Romantic'] = true, - ['Action'] = true, ['Fantasy'] = true}, - ['Music'] = {'/sc 6_7', true, ['Country'] = true, ['Jazz'] = true, ['Rap'] = true, ['Hip-hop'] = true, ['Techno'] = true, ['Classical'] = true, - ['Pop'] = true, ['Rock'] = true}, - ['Hobbies'] = {'/sc 6_8', true, - ['Computers'] = { ['Building computers'] = true, ['Videogames'] = true, ['Coding'] = true, ['Hacking'] = true}, - ['The Internet'] = { ['lol. teh internets!'] = true, ['Watching vids'] = true}, - ['Dance'] = true, ['Gymnastics'] = true, ['Listening to music'] = true, ['Arts and crafts'] = true, - ['Martial Arts'] = {['Karate'] = true, ['Judo'] = true, ['Taikwon Do'] = true, ['Wushu'] = true, ['Street fighting'] = true}, - ['Music lessons'] = {['Playing in my band'] = true, ['Playing piano'] = true, ['Playing guitar'] = true, - ['Playing violin'] = true, ['Playing drums'] = true, ['Playing a weird instrument'] = true} - }, - ['Location'] = {'/sc 6_9', true, - ['USA'] = { - ['West'] = { ['Alaska'] = true, ['Arizona'] = true, ['California'] = true, ['Colorado'] = true, ['Hawaii'] = true, - ['Idaho'] = true, ['Montana'] = true, ['Nevada'] = true, ['New Mexico'] = true, ['Oregon'] = true, - ['Utah'] = true, ['Washington'] = true, ['Wyoming'] = true - }, - ['South'] = { ['Alabama'] = true, ['Arkansas'] = true, ['Florida'] = true, ['Georgia'] = true, ['Kentucky'] = true, - ['Louisiana'] = true, ['Mississippi'] = true, ['North Carolina'] = true, ['Oklahoma'] = true, - ['South Carolina'] = true, ['Tennessee'] = true, ['Texas'] = true, ['Virginia'] = true, ['West Virginia'] = true - }, - ['Northeast'] = {['Connecticut'] = true, ['Delaware'] = true, ['Maine'] = true, ['Maryland'] = true, ['Massachusetts'] = true, - ['New Hampshire'] = true, ['New Jersey'] = true, ['New York'] = true, ['Pennsylvania'] = true, ['Rhode Island'] = true, - ['Vermont'] = true - }, - ['Midwest'] = {['Illinois'] = true, ['Indiana'] = true, ['Iowa'] = true, ['Kansas'] = true, ['Michigan'] = true, ['Minnesota'] = true, - ['Missouri'] = true, ['Nebraska'] = true, ['North Dakota'] = true, ['Ohio'] = true, ['South Dakota'] = true, ['Wisconsin'] = true} - }, - ['Canada'] = {['Alberta'] = true, ['British Columbia'] = true, ['Manitoba'] = true, ['New Brunswick'] = true, ['Newfoundland'] = true, - ['Northwest Territories'] = true, ['Nova Scotia'] = true, ['Nunavut'] = true, ['Ontario'] = true, ['Prince Edward Island'] = true, - ['Quebec'] = true, ['Saskatchewan'] = true, ['Yukon'] = true}, - ['Mexico'] = true, - ['Central America'] = true, - ['Europe'] = {['France'] = true, ['Germany'] = true, ['Spain'] = true, ['Italy'] = true, ['Poland'] = true, ['Switzerland'] = true, - ['Greece'] = true, ['Romania'] = true, ['Netherlands'] = true, - ['Great Britain'] = {['England'] = true, ['Scotland'] = true, ['Wales'] = true, ['Northern Ireland'] = true} - }, - ['Asia'] = { ['China'] = true, ['India'] = true, ['Japan'] = true, ['Korea'] = true, ['Russia'] = true, ['Vietnam'] = true}, - ['South America'] = { ['Argentina'] = true, ['Brazil'] = true}, - ['Africa'] = { ['Eygpt'] = true, ['Swaziland'] = true}, - ['Australia'] = true, ['Middle East'] = true, ['Antarctica'] = true, ['New Zealand'] = true - }, - ['Age'] = {'/sc 6_10', true, ['Rugrat'] = true, ['Kid'] = true, ['Tween'] = true, ['Teen'] = true, ['Twenties'] = true, - ['Old'] = true, ['Ancient'] = true, ['Mesozoic'] = true, ['I don\'t want to say my age. Don\'t ask.'] = true}, - ['Mood'] = {'/sc 6_11', true, ['Good'] = true, ['Great!'] = true, ['Not bad'] = true, ['Sad'] = true, ['Hyper'] = true, - ['Chill'] = true, ['Happy'] = true, ['Kind of mad'] = true}, - ['Boy'] = {'/sc 6_12', true}, - ['Girl'] = {'/sc 6_13', true}, - ['I don\'t want to say boy or girl. Don\'t ask.'] = {'/sc 6_14', true}, - [1] = '/sc 6' - }, - ['Game'] = { - ['Let\'s build'] = {'/sc 7_0', true}, - ['Let\'s battle'] = {'/sc 7_1', true}, - ['Nice one!'] = {'/sc 7_2', true}, - ['So far so good'] = {'/sc 7_3', true}, - ['Lucky shot!'] = {'/sc 7_4', true}, - ['Oh man!'] = {'/sc 7_5', true}, - ['I challenge you to a fight!'] = {'/sc 7_6', true}, - ['Help me with this'] = {'/sc 7_7', true}, - ['Let\'s go to your game'] = {'/sc 7_8', true}, - ['Can you show me how do to that?'] = {'/sc 7_9', true}, - ['Backflip!'] = {'/sc 7_10', true}, - ['Frontflip!'] = {'/sc 7_11', true}, - ['Dance!'] = {'/sc 7_12', true}, - ['I\'m on your side!'] = {'/sc 7_13', true}, - ['Game Commands'] = {'/sc 7_14', true, ['regen'] = true, ['reset'] = true, ['go'] = true, ['fix'] = true, ['respawn'] = true}, - [1] = '/sc 7' - }; - ['Silly'] = { - ['Muahahahaha!'] = true, - ['all your base are belong to me!'] = true, - ['GET OFF MAH LAWN'] = true, - ['TEH EPIK DUCK IS COMING!!!'] = true, - ['ROFL'] = true, - ['1337'] = {true, ['i r teh pwnz0r!'] = true, ['w00t!'] = true, ['z0mg h4x!'] = true, ['ub3rR0xXorzage!'] = true} - }, - ['Yes'] = { - ['Absolutely!'] = true, - ['Rock on!'] = true, - ['Totally!'] = true, - ['Juice!'] = true, - ['Yay!'] = true, - ['Yesh'] = true - }, - ['No'] = { - ['Ummm. No.'] = true, - ['...'] = true, - ['Stop!'] = true, - ['Go away!'] = true, - ['Don\'t do that'] = true, - ['Stop breaking the rules'] = true, - ['I don\'t want to'] = true - }, - ['Ok'] = { - ['Well... ok'] = true, - ['Sure'] = true - }, - ['Uncertain'] = { - ['Maybe'] = true, - ['I don\'t know'] = true, - ['idk'] = true, - ['I can\'t decide'] = true, - ['Hmm...'] = true - }, - [':-)'] = { - [':-('] = true, - [':D'] = true, - [':-O'] = true, - ['lol'] = true, - ['=D'] = true, - ['D='] = true, - ['XD'] = true, - [';D'] = true, - [';)'] = true, - ['O_O'] = true, - ['=)'] = true, - ['@_@'] = true, - ['>_<'] = true, - ['T_T'] = true, - ['^_^'] = true, - ['<(0_0<) <(0_0)> (>0_0)> KIRBY DANCE'] = true, - [')\';'] = true, - [':3'] = true - }, - ['Ratings'] = { - ['Rate it!'] = true, - ['I give it a 1 out of 10'] = true, - ['I give it a 2 out of 10'] = true, - ['I give it a 3 out of 10'] = true, - ['I give it a 4 out of 10'] = true, - ['I give it a 5 out of 10'] = true, - ['I give it a 6 out of 10'] = true, - ['I give it a 7 out of 10'] = true, - ['I give it a 8 out of 10'] = true, - ['I give it a 9 out of 10'] = true, - ['I give it a 10 out of 10!'] = true, - } - }, - CreateEnum('SafeChat'){'Level1', 'Level2', 'Level3'}, - SafeChatTree = {} - } ---------------------------------------------------- - - - --- Check if we are running on a touch device -function Chat:IsTouchDevice() - local touchEnabled = false - pcall(function() touchEnabled = Game:GetService('UserInputService').TouchEnabled end) - return touchEnabled -end - --- Scrolling -function Chat:ScrollQueue(value) - for i = 1, #self.MessageQueue do - if self.MessageQueue[i] then - for _, label in pairs(self.MessageQueue[i]) do - local next = self.MessageQueue[i].Next - local previous = self.MessageQueue[i].Previous - if label and label:IsA('TextLabel') or label:IsA('TextButton') then - if value > 0 and previous and previous['Message'] then - label.Position = previous['Message'].Position - elseif value < 1 and next['Message'] then - label.Position = previous['Message'].Position - end - end - end - end - end -end - - - -function Chat:FocusOnChatBar() - if self.ClickToChatButton then - self.ClickToChatButton.Visible = false - end - - self.GotFocus = true - if self.Frame['Background'] then - self.Frame.Background.Visible = false - end - self.ChatBar:CaptureFocus() -end - --- For touch devices we create a button instead -function Chat:CreateTouchButton() - self.ChatTouchFrame = Gui.Create'Frame' - { - Name = 'ChatTouchFrame'; - Size = UDim2.new(0, 128, 0, 32); - Position = UDim2.new(0, 88, 0, 0); - BackgroundTransparency = 1.0; - Parent = self.Gui; - - Gui.Create'ImageButton' - { - Name = 'ChatLabel'; - Size = UDim2.new(0, 74, 0, 28); - Position = UDim2.new(0, 0, 0, 0); - BackgroundTransparency = 1.0; - ZIndex = 2.0; - }; - - Gui.Create'ImageLabel' - { - Name = 'Background'; - Size = UDim2.new(1, 0, 1, 0); - Position = UDim2.new(0, 0, 0, 0); - BackgroundTransparency = 1.0; - Image = 'http://www.jarfeh.xyz/asset/?id=97078724' - }; - } - self.TapToChatLabel = self.ChatTouchFrame.ChatLabel - self.TouchLabelBackground = self.ChatTouchFrame.Background - - self.ChatBar = Gui.Create'TextBox' - { - Name = 'ChatBar'; - Size = UDim2.new(1, 0, 0.2, 0); - Position = UDim2.new(0, 0, 0.8, 0); - Text = ""; - ZIndex = 1.0; - BackgroundTransparency = 1.0; - Parent = self.Frame; - TextXAlignment = Enum.TextXAlignment.Left; - TextColor3 = Color3.new(1, 1, 1); - ClearTextOnFocus = false; - }; - - self.TapToChatLabel.MouseButton1Click:connect(function() - self.TapToChatLabel.Visible = false - --self.ChatBar.Visible = true - self.Frame.Background.Visible = true - self.ChatBar:CaptureFocus() - self.GotFocus = true - if self.TouchLabelBackground then - self.TouchLabelBackground.Visible = false - end - end) -end - --- Non touch devices, create the bottom chat bar -function Chat:CreateChatBar() - -- okay now we do - local status, result = pcall(function() return GuiService.UseLuaChat end) - if status and result then - self.ClickToChatButton = Gui.Create'TextButton' - { - Name = 'ClickToChat'; - Size = UDim2.new(1, 0, 0, 20); - BackgroundTransparency = 1.0; - ZIndex = 2.0; - Parent = self.Gui; - Text = "To chat click here or press \"/\" key"; - TextColor3 = Color3.new(1, 1, 0.9); - Position = UDim2.new(0, 0, 1, 0); - TextXAlignment = Enum.TextXAlignment.Left; - FontSize = Enum.FontSize.Size12; - } - - self.ChatBar = Gui.Create'TextBox' - { - Name = 'ChatBar'; - Size = UDim2.new(1, 0, 0, 20); - Position = UDim2.new(0, 0, 1, 0); - Text = ""; - ZIndex = 1.0; - BackgroundColor3 = Color3.new(0, 0, 0); - BackgroundTransparency = 0.25; - Parent = self.Gui; - TextXAlignment = Enum.TextXAlignment.Left; - TextColor3 = Color3.new(1, 1, 1); - FontSize = Enum.FontSize.Size12; - ClearTextOnFocus = false; - Text = ''; - }; - - -- Engine has code to offset the entire world, so if we do it by -20 pixels nothing gets in our chat's way - GuiService:SetGlobalSizeOffsetPixel(0, -20) - -- CHatHotKey is '/' - GuiService:AddSpecialKey(Enum.SpecialKey.ChatHotkey) - GuiService.SpecialKeyPressed:connect(function(key) - if key == Enum.SpecialKey.ChatHotkey then - Chat:FocusOnChatBar() - end - end) - - self.ClickToChatButton.MouseButton1Click:connect(function() - Chat:FocusOnChatBar() - end) - end -end - --- For scrolling, to see if we hit the bounds so that we can stop it from scrolling anymore -function Chat:CheckIfInBounds(value) - if #Chat.MessageQueue < 3 then - return true - end - - if value > 0 and Chat.MessageQueue[1] and Chat.MessageQueue[1]['Player'] and Chat.MessageQueue[1]['Player'].Position.Y.Scale == 0 then - return true - elseif value < 0 and Chat.MessageQueue[1] and Chat.MessageQueue[1]['Player'] and Chat.MessageQueue[1]['Player'].Position.Y.Scale < 0 then - return true - else - return false - end - return false -end - --- This is to precompute all playerName space strings --- This is used to offset the message by exactly this + 2 spacestrings -function Chat:ComputeSpaceString(pLabel) - local tLabel = Gui.Create'TextButton' - { - Size = UDim2.new(0, pLabel.AbsoluteSize.X, 0, pLabel.AbsoluteSize.Y); - FontSize = self.Configuration.FontSize; - Parent = self.RenderFrame; - BackgroundTransparency = 1.0; - Text = nString; - }; - local nString = " " - while tLabel.TextBounds.X < pLabel.TextBounds.X do - nString = nString .. " " - tLabel.Text = nString - end - self.CachedSpaceStrings_List[pLabel.Text] = nString - return nString -end - - - -function Chat:ScreenSizeChanged() - while self.Frame.AbsoluteSize.Y > 120 do - self.Frame.Size = self.Frame.Size - UDim2.new(0, 0, 0.005, 0) - end -end - --- Create the initial Chat stuff --- Done only once -function Chat:CreateGui() - self.Gui = WaitForChild(CoreGuiService, 'RobloxGui') - self.Frame = Gui.Create'Frame' - { - Name = 'ChatFrame'; - Size = self.Configuration.Size; - Position = UDim2.new(0, 0, 0, 5); - BackgroundTransparency = 1.0; - --ClipsDescendants = true; - ZIndex = 0.0; - Parent = self.Gui; - - Gui.Create'ImageLabel' - { - Name = 'Background'; - Image = 'http://www.jarfeh.xyz/asset/?id=97120937'; --96551212'; - Size = UDim2.new(1.3, 0, 1.64, 0); - Position = UDim2.new(0, 0, 0, 0); - BackgroundTransparency = 1.0; - ZIndex = 0.0; - Visible = false - }; - - Gui.Create'Frame' - { - Name = 'Border'; - Size = UDim2.new(1, 0, 0, 1); - Position = UDim2.new(0, 0, 0.8, 0); - BackgroundTransparency = 0.0; - BackgroundColor3 = Color3.new(236/255, 236/255, 236/255); - BorderSizePixel = 0.0; - Visible = false; - }; - - Gui.Create'Frame' - { - Name = 'ChatRenderFrame'; - Size = UDim2.new(1.02, 0, 1.01, 0); - Position = UDim2.new(0, 0, 0, 0); - BackgroundTransparency = 1.0; - ClipsDescendants = true; - ZIndex = 0.0; - - }; - }; - - - self.RenderFrame = self.Frame.ChatRenderFrame - if Chat:IsTouchDevice() then - self.Frame.Position = self.Configuration.Position; - self.RenderFrame.Size = UDim2.new(1, 0, 1, 0) - elseif self.Frame.AbsoluteSize.Y > 120 then - Chat:ScreenSizeChanged() - self.Gui.Changed:connect(function(property) - if property == 'AbsoluteSize' then - Chat:ScreenSizeChanged() - end - end) - end - - if Player.ChatMode == Enum.ChatMode.TextAndMenu then - if Chat:IsTouchDevice() then - Chat:CreateTouchButton() - else - Chat:CreateChatBar() - --Chat:CreateSafeChatGui() - end - - if self.ChatBar then - self.ChatBar.FocusLost:connect(function(enterPressed) - Chat.GotFocus = false - if Chat:IsTouchDevice() then - self.ChatBar.Visible = false - self.TapToChatLabel.Visible = true - - if self.TouchLabelBackground then - self.TouchLabelBackground.Visible = true - end - end - if enterPressed and self.ChatBar.Text ~= "" then - if PlayersService.ClassicChat then - pcall(function() PlayersService:Chat(self.ChatBar.Text) end) - elseif PlayersService.BubbleChat then - -- do nothing - end - if self.ClickToChatButton then - self.ClickToChatButton.Visible = true - end - self.ChatBar.Text = "" - end - Spawn(function() - wait(5.0) - if not Chat.GotFocus then - Chat.Frame.Background.Visible = false - end - end) - end) - end - end -end - -function Chat:FindButtonTree(scButton, rootList) - local list = {} - rootList = rootList or self.SafeChatTree - for button, _ in pairs(rootList) do - if button == scButton then - list = rootList[button] - elseif type(rootList[button]) == 'table' then - list = Chat:FindButtonTree(scButton, rootList[button]) - end - end - return list -end - -function Chat:ToggleSafeChatMenu(scButton) - local list = Chat:FindButtonTree(scButton, self.SafeChatTree) - if list then - for button, _ in pairs(list) do - if button:IsA('TextButton') or button:IsA('ImageButton') then - button.Visible = not button.Visible - end - end - return true - end - return false -end - -function Chat:CreateSafeChatOptions(list, rootButton) - local text_List = {} - level = level or 0 - local count = 0 - text_List[rootButton] = {} - text_List[rootButton][1] = list[1] - rootButton = rootButton or self.SafeChatButton - for msg, _ in pairs(list) do - if type(msg) == 'string' then - local chatText = Gui.Create'TextButton' - { - Name = msg; - Text = msg; - Size = UDim2.new(0, 100, 0, 20); - TextXAlignment = Enum.TextXAlignment.Center; - TextColor3 = Color3.new(0.2, 0.1, 0.1); - BackgroundTransparency = 0.5; - BackgroundColor3 = Color3.new(1, 1, 1); - Parent = self.SafeChatFrame; - Visible = false; - Position = UDim2.new(0, rootButton.Position.X.Scale + 105, 0, rootButton.Position.Y.Scale - ((count - 3) * 100)); - }; - - count = count + 1 - - if type(list[msg]) == 'table' then - text_List[rootButton][chatText] = Chat:CreateSafeChatOptions(list[msg], chatText) - else - --table.insert(text_List[chatText], true) - end - chatText.MouseEnter:connect(function() - Chat:ToggleSafeChatMenu(chatText) - end) - - chatText.MouseLeave:connect(function() - Chat:ToggleSafeChatMenu(chatText) - end) - - chatText.MouseButton1Click:connect(function() - local lList = Chat:FindButtonTree(chatText) - if lList then - for i, v in pairs(lList) do - end - else - end - pcall(function() PlayersService:Chat(lList[1]) end) - end) - end - end - return text_List -end - -function Chat:CreateSafeChatGui() - self.SafeChatFrame = Gui.Create'Frame' - { - Name = 'SafeChatFrame'; - Size = UDim2.new(1, 0, 1, 0); - Parent = self.Gui; - BackgroundTransparency = 1.0; - - Gui.Create'ImageButton' - { - Name = 'SafeChatButton'; - Size = UDim2.new(0, 44, 0, 31); - Position = UDim2.new(0, 1, 0.35, 0); - BackgroundTransparency = 1.0; - Image = 'http://www.jarfeh.xyz/asset/?id=97080365'; - }; - } - - self.SafeChatButton = self.SafeChatFrame.SafeChatButton - -- safe chat button is the root of this tree - self.SafeChatTree[self.SafeChatButton] = Chat:CreateSafeChatOptions(self.SafeChat_List, self.SafeChatButton) - - self.SafeChatButton.MouseButton1Click:connect(function() - Chat:ToggleSafeChatMenu(self.SafeChatButton) - end) - -end - --- Scrolling function --- Applies a speed(velocity) to have nice scrolling effect -function Input:OnMouseScroll() - Spawn(function() - -- How long should the speed last? - while Input.Speed ~=0 do - if Input.Speed > 1 then - while Input.Speed > 0 do - Input.Speed = Input.Speed - 1 - wait(0.25) - end - elseif Input.Speed < 0 then - while Input.Speed < 0 do - Input.Speed = Input.Speed + 1 - wait(0.25) - end - end - wait() - end - end) - if Chat:CheckIfInBounds(Input.Speed) then - return - end - Chat:ScrollQueue() -end - -function Input:ApplySpeed(value) - Input.Speed = Input.Speed + value - if not self.Simulating then - Input:OnMouseScroll() - end -end - -function Input:Initialize() - self.Mouse.WheelBackward:connect(function() - Input:ApplySpeed(self.Configuration.DefaultSpeed) - end) - - self.Mouse.WheelForward:connect(function() - Input:ApplySpeed(self.Configuration.DefaultSpeed) - end) -end - -function Chat:FindMessageInSafeChat(message, list) - local foundMessage = false - for msg, _ in pairs(list) do - if msg == message then - return true - end - if type(list[msg]) == 'table' then - foundMessage = Chat:FindMessageInSafeChat(message, list[msg]) - if foundMessage then - return true - end - end - end - return foundMessage -end - - - - - --- RobloxLock everything so users can't delete them(?) -function Chat:LockAllFields(gui) - local children = gui:GetChildren() - for i = 1, #children do - children[i].RobloxLocked = true - if #children[i]:GetChildren() > 0 then - Chat:LockAllFields(children[i]) - end - end -end - --- Constructor --- This function initializes everything -function Chat:Initialize() - Chat:CreateGui() - self.EventListener = PlayersService.PlayerChatted:connect(function(...) - -- This event has 4 callback arguments - -- Enum.PlayerChatType.All, chatPlayer, message, targetPlayer - Chat:PlayerChatted(...) - - end) - - -- Initialize input for us - Input:Initialize() - -- Eww, everytime a player is added, you have to redo the connection - -- Seems this is not automatic - Game.Players.ChildAdded:connect(function() - Chat.EventListener:disconnect() - self.EventListener = PlayersService.PlayerChatted:connect(function(...) - -- This event has 4 callback arguments - -- Enum.PlayerChatType.All, chatPlayer, message, targetPlayer - Chat:PlayerChatted(...) - end) - end) - - Spawn(function() - Chat:CullThread() - end) - - self.Frame.RobloxLocked = true - Chat:LockAllFields(self.Frame) - self.Frame.DescendantAdded:connect(function(descendant) - Chat:LockAllFields(descendant) - end) -end - -Chat:Initialize() - - - - - diff --git a/maintenance/asset/GetScriptState.ashx b/maintenance/asset/GetScriptState.ashx deleted file mode 100644 index ce614d3..0000000 --- a/maintenance/asset/GetScriptState.ashx +++ /dev/null @@ -1 +0,0 @@ -0 0 0 00 0 0 0 \ No newline at end of file diff --git a/maintenance/asset/PrivKey.pem b/maintenance/asset/PrivKey.pem deleted file mode 100644 index 5e1a390..0000000 --- a/maintenance/asset/PrivKey.pem +++ /dev/null @@ -1,3 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICXQIBAAKBgQDAWrd/TwGJULsVRo06rCpznNmW4zLJK6LwkfTvG3wURFFBj9E9zuaKAOzHVRrHsWKJhq2BxSUze7OClgzgzFLRQHhRQFKn/skLPrV85bFakoK/dnt9h/Jyn2cD2A8Za6q90O3h9FSy9mLvCN07g07IXtauYZfOXvqyqOn4rAeUJQIDAQABAoGBAISbxddZo0iERIW1XtXtLVMI9iUEutVfZPSO2xogi5j5RD97o5gF1H+dhZ8iN9UloDYJiAJn5G6qwCWtxnEPy6NO4lMDgFMQtlpIIW9mafZ7m+AueYJtgO5elLUnFbOA39OcvFUleL9ded42yuB2wfsGdKl85+mHvn8j4zTmT0+9AkEA3H7NBFhIVf3Vj6iLXwPmamhou8T8b+HSXop0krrP/jDw/wHbl0DEJbQv+ypYdoXJo8XS2Hs39z20pCEsUo2/NwJBAN9T5aWXmVnymbdNUCDMjjer2d6Ey9ARyFgB07xHSod+HWlSCES8pcWwZZrP/I4cf2CEiAInfgak0kNNWLOWnYMCQDJEoj7UVaFtHiwDM8r0m6o0pXPxY8+p/wjYrdzpxBNiWv74EHT6Kf2ih7HOJJ7Yv3Cb4AbEiKzQH4evnGgxsp8CQQDRPK+ad/DLn0p5vMvoDv7oFfCoVM8IAMEuA3g3nKutSnGP7bWlgQHnuB9Z7qf3FagZ69HqAspGu0HsoJkMmX61AkAO5wTd+rja0MP7rT5xNVYBALtdYLWowBov4NCN7BVDkd0JzeTjMtDerirvEDuzDBrbyFtKV5rZjZpuotFc+5/t ------END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/maintenance/asset/index.php b/maintenance/asset/index.php deleted file mode 100644 index 5d11578..0000000 --- a/maintenance/asset/index.php +++ /dev/null @@ -1,69 +0,0 @@ - "Error handling your request."]))); -$version = isset($_GET["version"]) ? filter_var($_GET["version"], FILTER_SANITIZE_NUMBER_INT, FILTER_NULL_ON_FAILURE) : -1; - - -if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/asset/" . $id)){ - $file = file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/asset/" . $id); - if (isset($_GET["sign"]) == true){ - sign($file); - }else if($id == 1){ - sign($file); - }else if($id == 2){ - sign($file); - }else if($id == 3){ - sign($file); - }else if($id == 4){ - sign($file); - }else if($id == 5){ - sign($file); - }else if($id == 7){ - sign($file); - }else if($id == 6){ - sign($file); - }else if($id == 8){ - sign($file); - }else if($id == 9){ - sign($file); - }else if($id == 10){ - sign($file); - }else if($id == 11){ - sign($file); - }else if($id == 12){ - sign($file); - }else if($id == 13){ - sign($file); - }else if($id == 14){ - sign($file); - }else if($id == 15){ - sign($file); - }else if($id == 16){ - sign($file); - }else if($id == 17){ - sign($file); - }else if($id == 18){ - sign($file); - }else if($id == 19){ - sign($file); - }else if($id == 20){ - sign($file); - }else if ($id == 200) { - sign($file); - }else if ($id == 201) { - sign($file); - }else{ - echo $file; - } -}else{ - header("Location: https://assetdelivery.roblox.com/v1/asset/?id=$id&version=$version"); - die(); -} -?> \ No newline at end of file