Fuck with the CoreScripts despite task telling me very clearly not to fuck with the corescripts
This commit is contained in:
parent
26dfa13ee3
commit
bb1eb0faa6
466
107893730.lua
466
107893730.lua
|
|
@ -4,13 +4,13 @@
|
|||
while not Game do
|
||||
wait(0.1)
|
||||
end
|
||||
while not game:GetService("MarketplaceService") do
|
||||
while not game:GetService "MarketplaceService" do
|
||||
wait(0.1)
|
||||
end
|
||||
while not game:FindFirstChild("CoreGui") do
|
||||
while not game:FindFirstChild "CoreGui" do
|
||||
wait(0.1)
|
||||
end
|
||||
while not game.CoreGui:FindFirstChild("RobloxGui") do
|
||||
while not game.CoreGui:FindFirstChild "RobloxGui" do
|
||||
wait(0.1)
|
||||
end
|
||||
|
||||
|
|
@ -41,18 +41,30 @@ local smallScreenThreshold = 450
|
|||
-- user facing images
|
||||
local assetUrls = {}
|
||||
local assetUrl = "http://www.roblox.com/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)
|
||||
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"
|
||||
|
|
@ -63,16 +75,14 @@ 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 purchaseFailedText =
|
||||
"Your purchase of itemName failed because errorReason. Your account has not been charged. Please try again soon."
|
||||
local productPurchaseText = "Would you like to buy '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
|
||||
|
|
@ -83,7 +93,7 @@ end
|
|||
|
||||
function getRbxUtility()
|
||||
if not RbxUtility then
|
||||
RbxUtility = LoadLibrary("RbxUtility")
|
||||
RbxUtility = LoadLibrary "RbxUtility"
|
||||
end
|
||||
return RbxUtility
|
||||
end
|
||||
|
|
@ -95,7 +105,6 @@ function preloadAssets()
|
|||
end
|
||||
----------------------------- End Util Functions ---------------------------------------------
|
||||
|
||||
|
||||
-------------------------------- Accept/Decline Functions --------------------------------------
|
||||
function removeCurrentPurchaseInfo()
|
||||
currentAssetId = nil
|
||||
|
|
@ -110,19 +119,27 @@ function removeCurrentPurchaseInfo()
|
|||
end
|
||||
|
||||
function closePurchasePrompt()
|
||||
purchaseDialog:TweenPosition(hidePosition, Enum.EasingDirection.Out, Enum.EasingStyle.Quad, tweenTime, true, function()
|
||||
purchaseDialog:TweenPosition(
|
||||
hidePosition,
|
||||
Enum.EasingDirection.Out,
|
||||
Enum.EasingStyle.Quad,
|
||||
tweenTime,
|
||||
true,
|
||||
function()
|
||||
game.GuiService:RemoveCenterDialog(purchaseDialog)
|
||||
hidePurchasing()
|
||||
purchaseDialog.Visible = false
|
||||
currentlyPrompting = false
|
||||
end)
|
||||
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"]))
|
||||
local newPurchasedSucceededText =
|
||||
string.gsub(purchaseSucceededText, "itemName", tostring(currentProductInfo["Name"]))
|
||||
purchaseDialog.BodyFrame.ItemPreview.ItemDescription.Text = newPurchasedSucceededText
|
||||
setButtonsVisible(purchaseDialog.BodyFrame.OkPurchasedButton)
|
||||
hidePurchasing()
|
||||
|
|
@ -134,9 +151,11 @@ end
|
|||
function signalPromptEnded(isSuccess)
|
||||
closePurchasePrompt()
|
||||
if purchasingConsumable then
|
||||
game:GetService("MarketplaceService"):SignalPromptProductPurchaseFinished(game.Players.LocalPlayer.userId, currentProductId, isSuccess)
|
||||
game:GetService("MarketplaceService")
|
||||
:SignalPromptProductPurchaseFinished(game.Players.LocalPlayer.userId, currentProductId, isSuccess)
|
||||
else
|
||||
game:GetService("MarketplaceService"):SignalPromptPurchaseFinished(game.Players.LocalPlayer, currentAssetId, isSuccess)
|
||||
game:GetService("MarketplaceService")
|
||||
:SignalPromptPurchaseFinished(game.Players.LocalPlayer, currentAssetId, isSuccess)
|
||||
end
|
||||
removeCurrentPurchaseInfo()
|
||||
end
|
||||
|
|
@ -152,11 +171,13 @@ function updatePurchasePromptData(toggleColoredText)
|
|||
|
||||
if isFreeItem() then
|
||||
newItemDescription = string.gsub(freeItemPurchaseText, "itemName", tostring(currentProductInfo["Name"]))
|
||||
newItemDescription = string.gsub( newItemDescription,"assetType", tostring(assetTypeToString(currentProductInfo["AssetTypeId"])) )
|
||||
newItemDescription =
|
||||
string.gsub(newItemDescription, "assetType", tostring(assetTypeToString(currentProductInfo["AssetTypeId"])))
|
||||
setHeaderText(takeHeaderText)
|
||||
else -- otherwise item costs something, so different prompt
|
||||
newItemDescription = string.gsub(productPurchaseText, "itemName", tostring(currentProductInfo["Name"]))
|
||||
newItemDescription = string.gsub( newItemDescription,"currencyType", tostring(currencyTypeToString(currentCurrencyType)) )
|
||||
newItemDescription =
|
||||
string.gsub(newItemDescription, "currencyType", tostring(currencyTypeToString(currentCurrencyType)))
|
||||
newItemDescription = string.gsub(newItemDescription, "currencyAmount", tostring(currentCurrencyAmount))
|
||||
setHeaderText(buyHeaderText)
|
||||
end
|
||||
|
|
@ -164,9 +185,15 @@ function updatePurchasePromptData(toggleColoredText)
|
|||
purchaseDialog.BodyFrame.ItemPreview.ItemDescription.Text = newItemDescription
|
||||
|
||||
if purchasingConsumable then
|
||||
purchaseDialog.BodyFrame.ItemPreview.Image = baseUrl .. "thumbs/asset.ashx?assetid=" .. tostring(currentProductInfo["IconImageAssetId"]) .. '&x=100&y=100&format=png'
|
||||
purchaseDialog.BodyFrame.ItemPreview.Image = baseUrl
|
||||
.. "thumbs/asset.ashx?assetid="
|
||||
.. tostring(currentProductInfo["IconImageAssetId"])
|
||||
.. "&x=100&y=100&format=png"
|
||||
else
|
||||
purchaseDialog.BodyFrame.ItemPreview.Image = baseUrl .. "thumbs/asset.ashx?assetid=" .. tostring(currentAssetId) .. '&x=100&y=100&format=png'
|
||||
purchaseDialog.BodyFrame.ItemPreview.Image = baseUrl
|
||||
.. "thumbs/asset.ashx?assetid="
|
||||
.. tostring(currentAssetId)
|
||||
.. "&x=100&y=100&format=png"
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -183,7 +210,11 @@ function doPlayerFundsCheck(checkIndefinitely)
|
|||
end
|
||||
if canPurchase and 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)
|
||||
setButtonsVisible(
|
||||
purchaseDialog.BodyFrame.BuyButton,
|
||||
purchaseDialog.BodyFrame.CancelButton,
|
||||
purchaseDialog.BodyFrame.AfterBalanceButton
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -198,32 +229,58 @@ function showPurchasePrompt()
|
|||
purchaseDialog.BodyFrame.ItemPreview.ItemDescription.Text = descText
|
||||
purchaseDialog.BodyFrame.AfterBalanceButton.Visible = false
|
||||
end
|
||||
game.GuiService:AddCenterDialog(purchaseDialog, Enum.CenterDialogType.ModalDialog,
|
||||
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)
|
||||
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."
|
||||
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
|
||||
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
|
||||
openBCUpSellWindow()
|
||||
end
|
||||
end)
|
||||
end
|
||||
setButtonsVisible(purchaseDialog.BodyFrame.BuyDisabledButton, purchaseDialog.BodyFrame.CancelButton, purchaseDialog.BodyFrame.AfterBalanceButton)
|
||||
)
|
||||
end
|
||||
setButtonsVisible(
|
||||
purchaseDialog.BodyFrame.BuyDisabledButton,
|
||||
purchaseDialog.BodyFrame.CancelButton,
|
||||
purchaseDialog.BodyFrame.AfterBalanceButton
|
||||
)
|
||||
elseif insufficientFunds then
|
||||
setButtonsVisible(purchaseDialog.BodyFrame.BuyDisabledButton, purchaseDialog.BodyFrame.CancelButton, purchaseDialog.BodyFrame.AfterBalanceButton)
|
||||
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)
|
||||
purchaseDialog:TweenPosition(
|
||||
showPosition,
|
||||
Enum.EasingDirection.Out,
|
||||
Enum.EasingStyle.Quad,
|
||||
tweenTime,
|
||||
true
|
||||
)
|
||||
|
||||
if canPurchase and insufficientFunds and not enableBrowserWindowClosedEvent then
|
||||
checkingPlayerFunds = true
|
||||
|
|
@ -233,7 +290,8 @@ function showPurchasePrompt()
|
|||
--HideFunction
|
||||
function()
|
||||
purchaseDialog.Visible = false
|
||||
end)
|
||||
end
|
||||
)
|
||||
else -- we failed in prompting a purchase, do a decline
|
||||
doDeclinePurchase()
|
||||
end
|
||||
|
|
@ -242,15 +300,17 @@ 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 not newTool then
|
||||
return nil
|
||||
end
|
||||
|
||||
if newTool:IsA("Tool") then
|
||||
if newTool:IsA "Tool" then
|
||||
return newTool
|
||||
end
|
||||
|
||||
local toolChildren = newTool:GetChildren()
|
||||
for i = 1, #toolChildren do
|
||||
if toolChildren[i]:IsA("Tool") then
|
||||
if toolChildren[i]:IsA "Tool" then
|
||||
return toolChildren[i]
|
||||
end
|
||||
end
|
||||
|
|
@ -261,11 +321,14 @@ end
|
|||
-- let them know their account was not charged, and that they do not own the item yet.
|
||||
function purchaseFailed(inGamePurchasesDisabled)
|
||||
local name = "Item"
|
||||
if currentProductInfo then name = currentProductInfo["Name"] end
|
||||
if currentProductInfo then
|
||||
name = currentProductInfo["Name"]
|
||||
end
|
||||
|
||||
local newPurchasedFailedText = string.gsub(purchaseFailedText, "itemName", tostring(name))
|
||||
if inGamePurchasesDisabled then
|
||||
newPurchasedFailedText = string.gsub( newPurchasedFailedText,"errorReason", tostring(errorPurchasesDisabledText) )
|
||||
newPurchasedFailedText =
|
||||
string.gsub(newPurchasedFailedText, "errorReason", tostring(errorPurchasesDisabledText))
|
||||
else
|
||||
newPurchasedFailedText = string.gsub(newPurchasedFailedText, "errorReason", tostring(errorPurchasesUnknownText))
|
||||
end
|
||||
|
|
@ -292,15 +355,26 @@ function doAcceptPurchase(currencyPreferredByUser)
|
|||
|
||||
-- consumables need to use a different url
|
||||
if purchasingConsumable then
|
||||
url = getSecureApiBaseUrl() .. "marketplace/submitpurchase?productId=" .. tostring(currentProductId) ..
|
||||
"¤cyTypeId=" .. tostring(currencyEnumToInt(currentCurrencyType)) ..
|
||||
"&expectedUnitPrice=" .. tostring(currentCurrencyAmount) ..
|
||||
"&placeId=" .. tostring(Game.PlaceId)
|
||||
url = getSecureApiBaseUrl()
|
||||
.. "marketplace/submitpurchase?productId="
|
||||
.. tostring(currentProductId)
|
||||
.. "¤cyTypeId="
|
||||
.. tostring(currencyEnumToInt(currentCurrencyType))
|
||||
.. "&expectedUnitPrice="
|
||||
.. tostring(currentCurrencyAmount)
|
||||
.. "&placeId="
|
||||
.. tostring(Game.PlaceId)
|
||||
else
|
||||
url = getSecureApiBaseUrl() .. "marketplace/purchase?productId=" .. tostring(currentProductId) ..
|
||||
"¤cyTypeId=" .. tostring(currencyEnumToInt(currentCurrencyType)) ..
|
||||
"&purchasePrice=" .. tostring(currentCurrencyAmount) ..
|
||||
"&locationType=Game" .. "&locationId=" .. Game.PlaceId
|
||||
url = getSecureApiBaseUrl()
|
||||
.. "marketplace/purchase?productId="
|
||||
.. tostring(currentProductId)
|
||||
.. "¤cyTypeId="
|
||||
.. tostring(currencyEnumToInt(currentCurrencyType))
|
||||
.. "&purchasePrice="
|
||||
.. tostring(currentCurrencyAmount)
|
||||
.. "&locationType=Game"
|
||||
.. "&locationId="
|
||||
.. Game.PlaceId
|
||||
end
|
||||
|
||||
local success, reason = ypcall(function()
|
||||
|
|
@ -315,7 +389,7 @@ function doAcceptPurchase(currencyPreferredByUser)
|
|||
end
|
||||
|
||||
-- check to make sure purchase actually happened on the web end
|
||||
if response == "none" or response == nil or response == '' then
|
||||
if response == "none" or response == nil or response == "" then
|
||||
print("did not get a proper response from web on purchase of", currentAssetId, currentProductId)
|
||||
purchaseFailed()
|
||||
return
|
||||
|
|
@ -352,7 +426,12 @@ function doAcceptPurchase(currencyPreferredByUser)
|
|||
purchaseFailed()
|
||||
return
|
||||
end
|
||||
Game:GetService("MarketplaceService"):SignalClientPurchaseSuccess( tostring(response["receipt"]), game.Players.LocalPlayer.userId, currentProductId )
|
||||
Game:GetService("MarketplaceService")
|
||||
:SignalClientPurchaseSuccess(
|
||||
tostring(response["receipt"]),
|
||||
game.Players.LocalPlayer.userId,
|
||||
currentProductId
|
||||
)
|
||||
else
|
||||
userPurchaseActionsEnded(success)
|
||||
end
|
||||
|
|
@ -364,7 +443,6 @@ function doDeclinePurchase()
|
|||
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)
|
||||
|
|
@ -377,37 +455,68 @@ 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"
|
||||
elseif assetType == 0 then return "Product"
|
||||
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"
|
||||
elseif assetType == 0 then
|
||||
return "Product"
|
||||
end
|
||||
|
||||
return ""
|
||||
|
|
@ -453,13 +562,15 @@ 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)
|
||||
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
|
||||
if playerBalance == "" then
|
||||
return nil
|
||||
end
|
||||
|
||||
|
|
@ -475,7 +586,7 @@ function openBuyCurrencyWindow()
|
|||
end
|
||||
|
||||
function openBCUpSellWindow()
|
||||
Game:GetService('GuiService'):OpenBrowserWindow(baseUrl .. "Upgrades/BuildersClubMemberships.aspx")
|
||||
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)
|
||||
|
|
@ -507,32 +618,46 @@ function updateAfterBalanceText(playerBalance, notRightBc)
|
|||
if not notRightBc then
|
||||
if afterBalanceNumber < 0 and keyWord == "robux" then
|
||||
if openBuyCurrencyWindowConnection == nil then
|
||||
openBuyCurrencyWindowConnection = purchaseDialog.BodyFrame.AfterBalanceButton.MouseButton1Click:connect(openBuyCurrencyWindow)
|
||||
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."
|
||||
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."
|
||||
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
|
||||
if openBuyCurrencyWindowConnection then
|
||||
openBuyCurrencyWindowConnection:disconnect()
|
||||
openBuyCurrencyWindowConnection = nil
|
||||
end
|
||||
purchaseDialog.BodyFrame.AfterBalanceButton.Text = "Your balance after this transaction will be " .. currencyTypeToString(currentCurrencyType) .. " " .. tostring(afterBalanceNumber) .. "."
|
||||
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
|
||||
return currentProductInfo
|
||||
and currentProductInfo["IsForSale"] == true
|
||||
and currentProductInfo["IsPublicDomain"] == true
|
||||
end
|
||||
---------------------------------------------- End Currency Functions ---------------------------------------------
|
||||
|
||||
|
||||
---------------------------------------------- Data Functions -----------------------------------------------------
|
||||
|
||||
-- more enum to int fun!
|
||||
|
|
@ -552,7 +677,6 @@ 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/get the productinfo
|
||||
local playerOwnsAsset = false
|
||||
local notRightBc = false
|
||||
|
|
@ -562,7 +686,9 @@ function canPurchaseItem()
|
|||
if purchasingConsumable then
|
||||
local currentProductInfoRaw = nil
|
||||
success = ypcall(function()
|
||||
currentProductInfoRaw = Game:HttpGetAsync(getSecureApiBaseUrl() .. "marketplace/productDetails?productid=" .. tostring(currentProductId))
|
||||
currentProductInfoRaw = Game:HttpGetAsync(
|
||||
getSecureApiBaseUrl() .. "marketplace/productDetails?productid=" .. tostring(currentProductId)
|
||||
)
|
||||
end)
|
||||
if success then
|
||||
currentProductInfo = getRbxUtility().DecodeJSON(currentProductInfoRaw)
|
||||
|
|
@ -579,20 +705,23 @@ function canPurchaseItem()
|
|||
end
|
||||
|
||||
if not purchasingConsumable then
|
||||
|
||||
if not currentAssetId then
|
||||
print("current asset id is nil, this should always have a value")
|
||||
print "current asset id is nil, this should always have a value"
|
||||
return false
|
||||
end
|
||||
if currentAssetId <= 0 then
|
||||
print("current asset id is negative, this should always be positive")
|
||||
print "current asset id is negative, this should always be positive"
|
||||
return false
|
||||
end
|
||||
|
||||
local success, errorCode = ypcall(function() playerOwnsAsset = game:HttpGetAsync(getSecureApiBaseUrl()
|
||||
local success, errorCode = ypcall(function()
|
||||
playerOwnsAsset = game:HttpGetAsync(
|
||||
getSecureApiBaseUrl()
|
||||
.. "ownership/hasAsset?userId="
|
||||
.. tostring(game.Players.LocalPlayer.userId)
|
||||
.. "&assetId=" .. tostring(currentAssetId))
|
||||
.. "&assetId="
|
||||
.. tostring(currentAssetId)
|
||||
)
|
||||
end)
|
||||
|
||||
if not success then
|
||||
|
|
@ -625,7 +754,12 @@ function canPurchaseItem()
|
|||
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
|
||||
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
|
||||
|
|
@ -636,7 +770,10 @@ function canPurchaseItem()
|
|||
return true, nil, nil, true, descText
|
||||
end
|
||||
|
||||
if tonumber(currentProductInfo["MinimumMembershipLevel"]) > membershipTypeToNumber(game.Players.LocalPlayer.MembershipType) then
|
||||
if
|
||||
tonumber(currentProductInfo["MinimumMembershipLevel"])
|
||||
> membershipTypeToNumber(game.Players.LocalPlayer.MembershipType)
|
||||
then
|
||||
notRightBc = true
|
||||
end
|
||||
|
||||
|
|
@ -654,14 +791,20 @@ function canPurchaseItem()
|
|||
end
|
||||
end
|
||||
|
||||
if (currentProductInfo["IsLimited"] == true or currentProductInfo["IsLimitedUnique"] == true) and
|
||||
(currentProductInfo["Remaining"] == "" or currentProductInfo["Remaining"] == 0 or currentProductInfo["Remaining"] == nil) then
|
||||
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.'
|
||||
descText = "Could not update your balance. Please check back after some time."
|
||||
return true, nil, nil, true, descText
|
||||
end
|
||||
|
||||
|
|
@ -672,13 +815,13 @@ 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'
|
||||
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
|
||||
tempSpaceLabel.Text = nString
|
||||
tempSpaceLabel.Name = "SpaceButton"
|
||||
|
||||
while tempSpaceLabel.TextBounds.X < pLabel.TextBounds.X do
|
||||
nString = nString .. " "
|
||||
|
|
@ -691,7 +834,6 @@ end
|
|||
|
||||
---------------------------------------------- End Data Functions -----------------------------------------------------
|
||||
|
||||
|
||||
---------------------------------------------- Gui Functions ----------------------------------------------
|
||||
function startSpinner()
|
||||
spinning = true
|
||||
|
|
@ -722,11 +864,11 @@ end
|
|||
-- convenience method to say exactly what buttons should be visible (all others are not!)
|
||||
function setButtonsVisible(...)
|
||||
local args = { ... }
|
||||
local argCount = select('#', ...)
|
||||
local argCount = select("#", ...)
|
||||
|
||||
local bodyFrameChildren = purchaseDialog.BodyFrame:GetChildren()
|
||||
for i = 1, #bodyFrameChildren do
|
||||
if bodyFrameChildren[i]:IsA("GuiButton") then
|
||||
if bodyFrameChildren[i]:IsA "GuiButton" then
|
||||
bodyFrameChildren[i].Visible = false
|
||||
for j = 1, argCount do
|
||||
if bodyFrameChildren[i] == args[j] then
|
||||
|
|
@ -740,7 +882,7 @@ end
|
|||
|
||||
-- used for the "Purchasing..." frame
|
||||
function createSpinner(size, position, parent)
|
||||
local spinnerFrame = Instance.new("Frame")
|
||||
local spinnerFrame = Instance.new "Frame"
|
||||
spinnerFrame.Name = "Spinner"
|
||||
spinnerFrame.Size = size
|
||||
spinnerFrame.Position = position
|
||||
|
|
@ -751,10 +893,15 @@ function createSpinner(size,position,parent)
|
|||
spinnerIcons = {}
|
||||
local spinnerNum = 1
|
||||
while spinnerNum <= 8 do
|
||||
local spinnerImage = Instance.new("ImageLabel")
|
||||
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.Position = UDim2.new(
|
||||
0.5 + 0.3 * math.cos(math.rad(45 * spinnerNum)),
|
||||
-8,
|
||||
0.5 + 0.3 * math.sin(math.rad(45 * spinnerNum)),
|
||||
-8
|
||||
)
|
||||
spinnerImage.BackgroundTransparency = 1
|
||||
spinnerImage.ZIndex = 10
|
||||
spinnerImage.Image = "http://www.roblox.com/Asset/?id=45880710"
|
||||
|
|
@ -767,7 +914,7 @@ end
|
|||
|
||||
-- all the gui init. Would be nice if this didn't have to be a script
|
||||
function createPurchasePromptGui()
|
||||
purchaseDialog = Instance.new("Frame")
|
||||
purchaseDialog = Instance.new "Frame"
|
||||
purchaseDialog.Name = "PurchaseFrame"
|
||||
purchaseDialog.Size = UDim2.new(0, 660, 0, 400)
|
||||
purchaseDialog.Position = hidePosition
|
||||
|
|
@ -776,7 +923,7 @@ function createPurchasePromptGui()
|
|||
purchaseDialog.BorderColor3 = Color3.new(204 / 255, 204 / 255, 204 / 255)
|
||||
purchaseDialog.Parent = game.CoreGui.RobloxGui
|
||||
|
||||
local bodyFrame = Instance.new("Frame")
|
||||
local bodyFrame = Instance.new "Frame"
|
||||
bodyFrame.Name = "BodyFrame"
|
||||
bodyFrame.Size = UDim2.new(1, 0, 1, -60)
|
||||
bodyFrame.Position = UDim2.new(0, 0, 0, 60)
|
||||
|
|
@ -800,7 +947,7 @@ function createPurchasePromptGui()
|
|||
|
||||
local distanceBetweenButtons = 90
|
||||
|
||||
local cancelButton = createImageButton("CancelButton")
|
||||
local cancelButton = createImageButton "CancelButton"
|
||||
cancelButton.Position = UDim2.new(0.5, (distanceBetweenButtons / 2), 1, -120)
|
||||
cancelButton.BackgroundTransparency = 1
|
||||
cancelButton.BorderSizePixel = 0
|
||||
|
|
@ -819,7 +966,7 @@ function createPurchasePromptGui()
|
|||
end)
|
||||
cancelButton.MouseButton1Click:connect(doDeclinePurchase)
|
||||
|
||||
local buyButton = createImageButton("BuyButton")
|
||||
local buyButton = createImageButton "BuyButton"
|
||||
buyButton.Position = UDim2.new(0.5, -153 - (distanceBetweenButtons / 2), 1, -120)
|
||||
buyButton.BackgroundTransparency = 1
|
||||
buyButton.BorderSizePixel = 0
|
||||
|
|
@ -895,7 +1042,9 @@ function createPurchasePromptGui()
|
|||
end)
|
||||
okPurchasedButton.Parent = bodyFrame
|
||||
|
||||
okButton.MouseButton1Click:connect(function () userPurchaseActionsEnded(false) end)
|
||||
okButton.MouseButton1Click:connect(function()
|
||||
userPurchaseActionsEnded(false)
|
||||
end)
|
||||
okPurchasedButton.MouseButton1Click:connect(function()
|
||||
if purchasingConsumable then
|
||||
userPurchaseProductActionsEnded(true)
|
||||
|
|
@ -903,10 +1052,14 @@ function createPurchasePromptGui()
|
|||
signalPromptEnded(true)
|
||||
end
|
||||
end)
|
||||
buyButton.MouseButton1Click:connect(function() doAcceptPurchase(Enum.CurrencyType.Robux) end)
|
||||
freeButton.MouseButton1Click:connect(function() doAcceptPurchase(false) end)
|
||||
buyButton.MouseButton1Click:connect(function()
|
||||
doAcceptPurchase(Enum.CurrencyType.Robux)
|
||||
end)
|
||||
freeButton.MouseButton1Click:connect(function()
|
||||
doAcceptPurchase(false)
|
||||
end)
|
||||
|
||||
local itemPreview = Instance.new("ImageLabel")
|
||||
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)
|
||||
|
|
@ -915,13 +1068,23 @@ function createPurchasePromptGui()
|
|||
itemPreview.ZIndex = 9
|
||||
itemPreview.Parent = bodyFrame
|
||||
|
||||
local itemDescription = createTextObject("ItemDescription", "Would you like to buy the 'itemName' for currencyType currencyAmount?","TextLabel",Enum.FontSize.Size24)
|
||||
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.ZIndex = 8
|
||||
itemDescription.Parent = itemPreview
|
||||
|
||||
local afterBalanceButton = createTextObject("AfterBalanceButton","Place holder text ip sum lorem dodo ashs","TextButton",Enum.FontSize.Size24)
|
||||
local afterBalanceButton = createTextObject(
|
||||
"AfterBalanceButton",
|
||||
"Place holder text ip sum lorem dodo ashs",
|
||||
"TextButton",
|
||||
Enum.FontSize.Size24
|
||||
)
|
||||
afterBalanceButton.AutoButtonColor = false
|
||||
afterBalanceButton.TextColor3 = Color3.new(222 / 255, 59 / 255, 30 / 255)
|
||||
afterBalanceButton.Position = UDim2.new(0, 5, 1, -55)
|
||||
|
|
@ -929,7 +1092,7 @@ function createPurchasePromptGui()
|
|||
afterBalanceButton.ZIndex = 8
|
||||
afterBalanceButton.Parent = bodyFrame
|
||||
|
||||
local purchasingFrame = Instance.new("Frame")
|
||||
local purchasingFrame = Instance.new "Frame"
|
||||
purchasingFrame.Name = "PurchasingFrame"
|
||||
purchasingFrame.Size = UDim2.new(1, 0, 1, 0)
|
||||
purchasingFrame.BackgroundColor3 = Color3.new(0, 0, 0)
|
||||
|
|
@ -975,7 +1138,7 @@ function createTextObject(name, text, type, size)
|
|||
end
|
||||
|
||||
function createImageButton(name)
|
||||
local imageButton = Instance.new("ImageButton")
|
||||
local imageButton = Instance.new "ImageButton"
|
||||
imageButton.Size = UDim2.new(0, 153, 0, 46)
|
||||
imageButton.Name = name
|
||||
return imageButton
|
||||
|
|
@ -1029,7 +1192,9 @@ function doPurchasePrompt(player, assetId, equipIfPurchased, currencyType, produ
|
|||
end
|
||||
|
||||
if player == game.Players.LocalPlayer then
|
||||
if currentlyPrompting then return end
|
||||
if currentlyPrompting then
|
||||
return
|
||||
end
|
||||
|
||||
currentlyPrompting = true
|
||||
|
||||
|
|
@ -1055,13 +1220,18 @@ function userPurchaseProductActionsEnded(userIsClosingDialog)
|
|||
isPurchased = true
|
||||
end
|
||||
|
||||
Game:GetService("MarketplaceService"):SignalPromptProductPurchaseFinished(tonumber(currentServerResponseTable["playerId"]), tonumber(currentServerResponseTable["productId"]), isPurchased)
|
||||
Game:GetService("MarketplaceService"):SignalPromptProductPurchaseFinished(
|
||||
tonumber(currentServerResponseTable["playerId"]),
|
||||
tonumber(currentServerResponseTable["productId"]),
|
||||
isPurchased
|
||||
)
|
||||
else
|
||||
print("Something went wrong, no currentServerResponseTable")
|
||||
print "Something went wrong, no currentServerResponseTable"
|
||||
end
|
||||
removeCurrentPurchaseInfo()
|
||||
else
|
||||
local newPurchasedSucceededText = string.gsub( purchaseSucceededText,"itemName", tostring(currentProductInfo["Name"]))
|
||||
local newPurchasedSucceededText =
|
||||
string.gsub(purchaseSucceededText, "itemName", tostring(currentProductInfo["Name"]))
|
||||
purchaseDialog.BodyFrame.ItemPreview.ItemDescription.Text = newPurchasedSucceededText
|
||||
setButtonsVisible(purchaseDialog.BodyFrame.OkPurchasedButton)
|
||||
hidePurchasing()
|
||||
|
|
@ -1070,12 +1240,15 @@ end
|
|||
|
||||
function doProcessServerPurchaseResponse(serverResponseTable)
|
||||
if not serverResponseTable then
|
||||
print("Server response table was nil, cancelling purchase")
|
||||
print "Server response table was nil, cancelling purchase"
|
||||
purchaseFailed()
|
||||
return
|
||||
end
|
||||
|
||||
if serverResponseTable["playerId"] and tonumber(serverResponseTable["playerId"]) == game.Players.LocalPlayer.userId then
|
||||
if
|
||||
serverResponseTable["playerId"]
|
||||
and tonumber(serverResponseTable["playerId"]) == game.Players.LocalPlayer.userId
|
||||
then
|
||||
currentServerResponseTable = serverResponseTable
|
||||
userPurchaseProductActionsEnded(false)
|
||||
end
|
||||
|
|
@ -1083,15 +1256,16 @@ end
|
|||
|
||||
---------------------------------------------- End Gui Functions ----------------------------------------------
|
||||
|
||||
|
||||
---------------------------------------------- Script Event start/initialization ----------------------------------------------
|
||||
preloadAssets()
|
||||
|
||||
game:GetService("MarketplaceService").PromptProductPurchaseRequested:connect(function(player, productId, equipIfPurchased, currencyType)
|
||||
game:GetService("MarketplaceService").PromptProductPurchaseRequested
|
||||
:connect(function(player, productId, equipIfPurchased, currencyType)
|
||||
doPurchasePrompt(player, nil, equipIfPurchased, currencyType, productId)
|
||||
end)
|
||||
|
||||
Game:GetService("MarketplaceService").PromptPurchaseRequested:connect(function(player, assetId, equipIfPurchased, currencyType)
|
||||
Game:GetService("MarketplaceService").PromptPurchaseRequested
|
||||
:connect(function(player, assetId, equipIfPurchased, currencyType)
|
||||
doPurchasePrompt(player, assetId, equipIfPurchased, currencyType, nil)
|
||||
end)
|
||||
|
||||
|
|
@ -1100,7 +1274,9 @@ Game:GetService("MarketplaceService").ServerPurchaseVerification:connect(functio
|
|||
end)
|
||||
|
||||
if enableBrowserWindowClosedEvent then
|
||||
Game:GetService("GuiService").BrowserWindowClosed:connect(function() doPlayerFundsCheck(false) end)
|
||||
Game:GetService("GuiService").BrowserWindowClosed:connect(function()
|
||||
doPlayerFundsCheck(false)
|
||||
end)
|
||||
end
|
||||
|
||||
Game.CoreGui.RobloxGui.Changed:connect(function()
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
-- Essentially a user can bind a lua function to a key code, input type (mousebutton1 etc.) and this
|
||||
|
||||
-- Variables
|
||||
local contextActionService = Game:GetService("ContextActionService")
|
||||
local contextActionService = Game:GetService "ContextActionService"
|
||||
local isTouchDevice = Game:GetService("UserInputService").TouchEnabled
|
||||
local functionTable = {}
|
||||
local buttonVector = {}
|
||||
|
|
@ -23,7 +23,7 @@ local buttonPositionTable = {
|
|||
[4] = UDim2.new(0, 85, 0, -25),
|
||||
[5] = UDim2.new(0, 185, 0, -25),
|
||||
[6] = UDim2.new(0, 185, 0, 260),
|
||||
[7] = UDim2.new(0,216,0,65)
|
||||
[7] = UDim2.new(0, 216, 0, 65),
|
||||
}
|
||||
local maxButtons = #buttonPositionTable
|
||||
|
||||
|
|
@ -41,10 +41,10 @@ end
|
|||
|
||||
function createContextActionGui()
|
||||
if not buttonScreenGui and isTouchDevice then
|
||||
buttonScreenGui = Instance.new("ScreenGui")
|
||||
buttonScreenGui = Instance.new "ScreenGui"
|
||||
buttonScreenGui.Name = "ContextActionGui"
|
||||
|
||||
buttonFrame = Instance.new("Frame")
|
||||
buttonFrame = Instance.new "Frame"
|
||||
buttonFrame.BackgroundTransparency = 1
|
||||
buttonFrame.Size = UDim2.new(0.3, 0, 0.5, 0)
|
||||
buttonFrame.Position = UDim2.new(0.7, 0, 0.5, 0)
|
||||
|
|
@ -85,7 +85,10 @@ end
|
|||
|
||||
function contextButtonUp(button, inputObject, actionName)
|
||||
button.Image = ContextUpImage
|
||||
if inputObject.UserInputType == Enum.UserInputType.Touch and inputObject.UserInputState == Enum.UserInputState.End then
|
||||
if
|
||||
inputObject.UserInputType == Enum.UserInputType.Touch
|
||||
and inputObject.UserInputState == Enum.UserInputState.End
|
||||
then
|
||||
contextActionService:CallFunction(actionName, Enum.UserInputState.End, inputObject)
|
||||
end
|
||||
end
|
||||
|
|
@ -94,9 +97,8 @@ function isSmallScreenDevice()
|
|||
return Game:GetService("GuiService"):GetScreenResolution().y <= 320
|
||||
end
|
||||
|
||||
|
||||
function createNewButton(actionName, functionInfoTable)
|
||||
local contextButton = Instance.new("ImageButton")
|
||||
local contextButton = Instance.new "ImageButton"
|
||||
contextButton.Name = "ContextActionButton"
|
||||
contextButton.BackgroundTransparency = 1
|
||||
contextButton.Size = UDim2.new(0, 90, 0, 90)
|
||||
|
|
@ -113,7 +115,9 @@ function createNewButton(actionName, functionInfoTable)
|
|||
oldTouches[inputObject] = nil
|
||||
end)
|
||||
contextButton.InputBegan:connect(function(inputObject)
|
||||
if oldTouches[inputObject] then return end
|
||||
if oldTouches[inputObject] then
|
||||
return
|
||||
end
|
||||
|
||||
if inputObject.UserInputState == Enum.UserInputState.Begin and currentButtonTouch == nil then
|
||||
currentButtonTouch = inputObject
|
||||
|
|
@ -121,21 +125,29 @@ function createNewButton(actionName, functionInfoTable)
|
|||
end
|
||||
end)
|
||||
contextButton.InputChanged:connect(function(inputObject)
|
||||
if oldTouches[inputObject] then return end
|
||||
if currentButtonTouch ~= inputObject then return end
|
||||
if oldTouches[inputObject] then
|
||||
return
|
||||
end
|
||||
if currentButtonTouch ~= inputObject then
|
||||
return
|
||||
end
|
||||
|
||||
contextButtonMoved(contextButton, inputObject, actionName)
|
||||
end)
|
||||
contextButton.InputEnded:connect(function(inputObject)
|
||||
if oldTouches[inputObject] then return end
|
||||
if currentButtonTouch ~= inputObject then return end
|
||||
if oldTouches[inputObject] then
|
||||
return
|
||||
end
|
||||
if currentButtonTouch ~= inputObject then
|
||||
return
|
||||
end
|
||||
|
||||
currentButtonTouch = nil
|
||||
oldTouches[inputObject] = true
|
||||
contextButtonUp(contextButton, inputObject, actionName)
|
||||
end)
|
||||
|
||||
local actionIcon = Instance.new("ImageLabel")
|
||||
local actionIcon = Instance.new "ImageLabel"
|
||||
actionIcon.Name = "ActionIcon"
|
||||
actionIcon.Position = UDim2.new(0.175, 0, 0.175, 0)
|
||||
actionIcon.Size = UDim2.new(0.65, 0, 0.65, 0)
|
||||
|
|
@ -145,7 +157,7 @@ function createNewButton(actionName, functionInfoTable)
|
|||
end
|
||||
actionIcon.Parent = contextButton
|
||||
|
||||
local actionTitle = Instance.new("TextLabel")
|
||||
local actionTitle = Instance.new "TextLabel"
|
||||
actionTitle.Name = "ActionTitle"
|
||||
actionTitle.Size = UDim2.new(1, 0, 1, 0)
|
||||
actionTitle.BackgroundTransparency = 1
|
||||
|
|
@ -194,7 +206,9 @@ function createButton( actionName, functionInfoTable )
|
|||
end
|
||||
|
||||
function removeAction(actionName)
|
||||
if not functionTable[actionName] then return end
|
||||
if not functionTable[actionName] then
|
||||
return
|
||||
end
|
||||
|
||||
local actionButton = functionTable[actionName]["button"]
|
||||
|
||||
|
|
|
|||
183
153556783.lua
183
153556783.lua
|
|
@ -6,21 +6,23 @@
|
|||
while not Game do
|
||||
wait()
|
||||
end
|
||||
while not Game:FindFirstChild("Players") do
|
||||
while not Game:FindFirstChild "Players" do
|
||||
wait()
|
||||
end
|
||||
while not Game.Players.LocalPlayer do
|
||||
wait()
|
||||
end
|
||||
while not Game:FindFirstChild("CoreGui") do
|
||||
while not Game:FindFirstChild "CoreGui" do
|
||||
wait()
|
||||
end
|
||||
while not Game.CoreGui:FindFirstChild("RobloxGui") do
|
||||
while not Game.CoreGui:FindFirstChild "RobloxGui" do
|
||||
wait()
|
||||
end
|
||||
|
||||
local userInputService = Game:GetService("UserInputService")
|
||||
local success = pcall(function() userInputService:IsLuaTouchControls() end)
|
||||
local userInputService = Game:GetService "UserInputService"
|
||||
local success = pcall(function()
|
||||
userInputService:IsLuaTouchControls()
|
||||
end)
|
||||
if not success then
|
||||
script:Destroy()
|
||||
end
|
||||
|
|
@ -34,7 +36,6 @@ function isSmallScreenDevice()
|
|||
end
|
||||
|
||||
local localPlayer = Game.Players.LocalPlayer
|
||||
local thumbstickInactiveAlpha = 0.3
|
||||
local thumbstickSize = 120
|
||||
if isSmallScreenDevice() then
|
||||
thumbstickSize = 70
|
||||
|
|
@ -58,7 +59,6 @@ local CameraZoomSensitivity = 0.03
|
|||
local PinchZoomDelay = 0.2
|
||||
local cameraTouch = nil
|
||||
|
||||
|
||||
-- make sure all of our images are good to go
|
||||
Game:GetService("ContentProvider"):Preload(touchControlsSheet)
|
||||
|
||||
|
|
@ -73,7 +73,12 @@ function DistanceBetweenTwoPoints(point1, point2)
|
|||
end
|
||||
|
||||
function transformFromCenterToTopLeft(pointToTranslate, guiObject)
|
||||
return UDim2.new(0,pointToTranslate.x - guiObject.AbsoluteSize.x/2,0,pointToTranslate.y - guiObject.AbsoluteSize.y/2)
|
||||
return UDim2.new(
|
||||
0,
|
||||
pointToTranslate.x - guiObject.AbsoluteSize.x / 2,
|
||||
0,
|
||||
pointToTranslate.y - guiObject.AbsoluteSize.y / 2
|
||||
)
|
||||
end
|
||||
|
||||
function rotatePointAboutLocation(pointToRotate, pointToRotateAbout, radians)
|
||||
|
|
@ -100,12 +105,18 @@ function dotProduct(v1,v2)
|
|||
end
|
||||
|
||||
function stationaryThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation)
|
||||
local thumbstickOuterCenterPosition = Vector2.new(thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x/2, thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y/2)
|
||||
local thumbstickOuterCenterPosition = Vector2.new(
|
||||
thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x / 2,
|
||||
thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y / 2
|
||||
)
|
||||
local centerDiff = DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenterPosition)
|
||||
|
||||
-- thumbstick is moving outside our region, need to cap its distance
|
||||
if centerDiff > (thumbstickSize / 2) then
|
||||
local thumbVector = Vector2.new(touchLocation.x - thumbstickOuterCenterPosition.x,touchLocation.y - thumbstickOuterCenterPosition.y);
|
||||
local thumbVector = Vector2.new(
|
||||
touchLocation.x - thumbstickOuterCenterPosition.x,
|
||||
touchLocation.y - thumbstickOuterCenterPosition.y
|
||||
)
|
||||
local normal = thumbVector.unit
|
||||
if normal.x == math.nan or normal.x == math.inf then
|
||||
normal = Vector2.new(0, normal.y)
|
||||
|
|
@ -120,36 +131,59 @@ function stationaryThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLo
|
|||
thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation, thumbstickFrame)
|
||||
end
|
||||
|
||||
return Vector2.new(thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset)
|
||||
return Vector2.new(
|
||||
thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,
|
||||
thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset
|
||||
)
|
||||
end
|
||||
|
||||
function followThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation)
|
||||
local thumbstickOuterCenter = Vector2.new(thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x/2, thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y/2)
|
||||
local thumbstickOuterCenter = Vector2.new(
|
||||
thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x / 2,
|
||||
thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y / 2
|
||||
)
|
||||
|
||||
-- thumbstick is moving outside our region, need to position outer thumbstick texture carefully (to make look and feel like actual joystick controller)
|
||||
if DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenter) > thumbstickSize / 2 then
|
||||
local thumbstickInnerCenter = Vector2.new(thumbstickFrame.Position.X.Offset + thumbstickFrame.AbsoluteSize.x/2, thumbstickFrame.Position.Y.Offset + thumbstickFrame.AbsoluteSize.y/2)
|
||||
local movementVectorUnit = Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y).unit
|
||||
local thumbstickInnerCenter = Vector2.new(
|
||||
thumbstickFrame.Position.X.Offset + thumbstickFrame.AbsoluteSize.x / 2,
|
||||
thumbstickFrame.Position.Y.Offset + thumbstickFrame.AbsoluteSize.y / 2
|
||||
)
|
||||
local movementVectorUnit =
|
||||
Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y).unit
|
||||
|
||||
local outerToInnerVectorCurrent = Vector2.new(thumbstickInnerCenter.x - thumbstickOuterCenter.x, thumbstickInnerCenter.y - thumbstickOuterCenter.y)
|
||||
local outerToInnerVectorCurrent = Vector2.new(
|
||||
thumbstickInnerCenter.x - thumbstickOuterCenter.x,
|
||||
thumbstickInnerCenter.y - thumbstickOuterCenter.y
|
||||
)
|
||||
local outerToInnerVectorCurrentUnit = outerToInnerVectorCurrent.unit
|
||||
local movementVector = Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y)
|
||||
local movementVector =
|
||||
Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y)
|
||||
|
||||
-- First, find the angle between the new thumbstick movement vector,
|
||||
-- and the vector between thumbstick inner and thumbstick outer.
|
||||
-- We will use this to pivot thumbstick outer around thumbstick inner, gives a nice joystick feel
|
||||
local crossOuterToInnerWithMovement = (outerToInnerVectorCurrentUnit.x * movementVectorUnit.y) - (outerToInnerVectorCurrentUnit.y * movementVectorUnit.x)
|
||||
local angle = math.atan2(crossOuterToInnerWithMovement, dotProduct(outerToInnerVectorCurrentUnit, movementVectorUnit))
|
||||
local anglePercent = angle * math.min( (movementVector.magnitude)/(outerToInnerVectorCurrent.magnitude), 1.0);
|
||||
local crossOuterToInnerWithMovement = (outerToInnerVectorCurrentUnit.x * movementVectorUnit.y)
|
||||
- (outerToInnerVectorCurrentUnit.y * movementVectorUnit.x)
|
||||
local angle =
|
||||
math.atan2(crossOuterToInnerWithMovement, dotProduct(outerToInnerVectorCurrentUnit, movementVectorUnit))
|
||||
local anglePercent = angle * math.min(movementVector.magnitude / outerToInnerVectorCurrent.magnitude, 1.0)
|
||||
|
||||
-- If angle is significant, rotate about the inner thumbsticks current center
|
||||
if math.abs(anglePercent) > 0.00001 then
|
||||
local outerThumbCenter = rotatePointAboutLocation(thumbstickOuterCenter, thumbstickInnerCenter, anglePercent)
|
||||
thumbstickOuter.Position = transformFromCenterToTopLeft(Vector2.new(outerThumbCenter.x,outerThumbCenter.y), thumbstickOuter)
|
||||
local outerThumbCenter =
|
||||
rotatePointAboutLocation(thumbstickOuterCenter, thumbstickInnerCenter, anglePercent)
|
||||
thumbstickOuter.Position =
|
||||
transformFromCenterToTopLeft(Vector2.new(outerThumbCenter.x, outerThumbCenter.y), thumbstickOuter)
|
||||
end
|
||||
|
||||
-- now just translate outer thumbstick to make sure it stays nears inner thumbstick
|
||||
thumbstickOuter.Position = UDim2.new(0,thumbstickOuter.Position.X.Offset+movementVector.x,0,thumbstickOuter.Position.Y.Offset+movementVector.y)
|
||||
thumbstickOuter.Position = UDim2.new(
|
||||
0,
|
||||
thumbstickOuter.Position.X.Offset + movementVector.x,
|
||||
0,
|
||||
thumbstickOuter.Position.Y.Offset + movementVector.y
|
||||
)
|
||||
end
|
||||
|
||||
thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation, thumbstickFrame)
|
||||
|
|
@ -159,10 +193,18 @@ function followThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocati
|
|||
thumbstickOuterPosition = Vector2.new(thumbstickOuter.Position.X.Offset, thumbstickOuter.Position.Y.Offset)
|
||||
if DistanceBetweenTwoPoints(thumbstickFramePosition, thumbstickOuterPosition) > thumbstickSize / 2 then
|
||||
local vectorWithLength = (thumbstickOuterPosition - thumbstickFramePosition).unit * thumbstickSize / 2
|
||||
thumbstickOuter.Position = UDim2.new(0,thumbstickFramePosition.x + vectorWithLength.x,0,thumbstickFramePosition.y + vectorWithLength.y)
|
||||
thumbstickOuter.Position = UDim2.new(
|
||||
0,
|
||||
thumbstickFramePosition.x + vectorWithLength.x,
|
||||
0,
|
||||
thumbstickFramePosition.y + vectorWithLength.y
|
||||
)
|
||||
end
|
||||
|
||||
return Vector2.new(thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset)
|
||||
return Vector2.new(
|
||||
thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,
|
||||
thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset
|
||||
)
|
||||
end
|
||||
|
||||
function movementOutsideDeadZone(movementVector)
|
||||
|
|
@ -170,14 +212,14 @@ function movementOutsideDeadZone(movementVector)
|
|||
end
|
||||
|
||||
function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThumbstick)
|
||||
local thumbstickFrame = Instance.new("Frame")
|
||||
local thumbstickFrame = Instance.new "Frame"
|
||||
thumbstickFrame.Name = "ThumbstickFrame"
|
||||
thumbstickFrame.Active = true
|
||||
thumbstickFrame.Size = UDim2.new(0, thumbstickSize, 0, thumbstickSize)
|
||||
thumbstickFrame.Position = defaultThumbstickPos
|
||||
thumbstickFrame.BackgroundTransparency = 1
|
||||
|
||||
local outerThumbstick = Instance.new("ImageLabel")
|
||||
local outerThumbstick = Instance.new "ImageLabel"
|
||||
outerThumbstick.Name = "OuterThumbstick"
|
||||
outerThumbstick.Image = touchControlsSheet
|
||||
outerThumbstick.ImageRectOffset = Vector2.new(0, 0)
|
||||
|
|
@ -187,14 +229,19 @@ function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThu
|
|||
outerThumbstick.Position = defaultThumbstickPos
|
||||
outerThumbstick.Parent = Game.CoreGui.RobloxGui
|
||||
|
||||
local innerThumbstick = Instance.new("ImageLabel")
|
||||
local innerThumbstick = Instance.new "ImageLabel"
|
||||
innerThumbstick.Name = "InnerThumbstick"
|
||||
innerThumbstick.Image = touchControlsSheet
|
||||
innerThumbstick.ImageRectOffset = Vector2.new(220, 0)
|
||||
innerThumbstick.ImageRectSize = Vector2.new(111, 111)
|
||||
innerThumbstick.BackgroundTransparency = 1
|
||||
innerThumbstick.Size = UDim2.new(0, thumbstickSize / 2, 0, thumbstickSize / 2)
|
||||
innerThumbstick.Position = UDim2.new(0, thumbstickFrame.Size.X.Offset/2 - thumbstickSize/4, 0, thumbstickFrame.Size.Y.Offset/2 - thumbstickSize/4)
|
||||
innerThumbstick.Position = UDim2.new(
|
||||
0,
|
||||
thumbstickFrame.Size.X.Offset / 2 - thumbstickSize / 4,
|
||||
0,
|
||||
thumbstickFrame.Size.Y.Offset / 2 - thumbstickSize / 4
|
||||
)
|
||||
innerThumbstick.Parent = thumbstickFrame
|
||||
innerThumbstick.ZIndex = 2
|
||||
|
||||
|
|
@ -203,10 +250,18 @@ function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThu
|
|||
local userInputSeviceTouchEndedCon = nil
|
||||
|
||||
local startInputTracking = function(inputObject)
|
||||
if thumbstickTouch then return end
|
||||
if inputObject == cameraTouch then return end
|
||||
if inputObject == currentJumpTouch then return end
|
||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
|
||||
if thumbstickTouch then
|
||||
return
|
||||
end
|
||||
if inputObject == cameraTouch then
|
||||
return
|
||||
end
|
||||
if inputObject == currentJumpTouch then
|
||||
return
|
||||
end
|
||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
|
||||
return
|
||||
end
|
||||
|
||||
thumbstickTouch = inputObject
|
||||
table.insert(thumbstickTouches, thumbstickTouch)
|
||||
|
|
@ -218,9 +273,17 @@ function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThu
|
|||
if movedInput == thumbstickTouch then
|
||||
local movementVector = nil
|
||||
if stationaryThumbstick then
|
||||
movementVector = stationaryThumbstickTouchMove(thumbstickFrame,outerThumbstick,Vector2.new(movedInput.Position.x,movedInput.Position.y))
|
||||
movementVector = stationaryThumbstickTouchMove(
|
||||
thumbstickFrame,
|
||||
outerThumbstick,
|
||||
Vector2.new(movedInput.Position.x, movedInput.Position.y)
|
||||
)
|
||||
else
|
||||
movementVector = followThumbstickTouchMove(thumbstickFrame,outerThumbstick,Vector2.new(movedInput.Position.x,movedInput.Position.y))
|
||||
movementVector = followThumbstickTouchMove(
|
||||
thumbstickFrame,
|
||||
outerThumbstick,
|
||||
Vector2.new(movedInput.Position.x, movedInput.Position.y)
|
||||
)
|
||||
end
|
||||
|
||||
if updateFunction then
|
||||
|
|
@ -300,9 +363,8 @@ function setupCharacterMovement( parentFrame )
|
|||
return refreshCharacterMovement
|
||||
end
|
||||
|
||||
|
||||
function setupJumpButton(parentFrame)
|
||||
local jumpButton = Instance.new("ImageButton")
|
||||
local jumpButton = Instance.new "ImageButton"
|
||||
jumpButton.Name = "JumpButton"
|
||||
jumpButton.BackgroundTransparency = 1
|
||||
jumpButton.Image = touchControlsSheet
|
||||
|
|
@ -327,9 +389,15 @@ function setupJumpButton( parentFrame )
|
|||
end
|
||||
|
||||
jumpButton.InputBegan:connect(function(inputObject)
|
||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
|
||||
if currentJumpTouch then return end
|
||||
if inputObject == cameraTouch then return end
|
||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
|
||||
return
|
||||
end
|
||||
if currentJumpTouch then
|
||||
return
|
||||
end
|
||||
if inputObject == cameraTouch then
|
||||
return
|
||||
end
|
||||
for i, touch in pairs(oldJumpTouches) do
|
||||
if touch == inputObject then
|
||||
return
|
||||
|
|
@ -342,7 +410,9 @@ function setupJumpButton( parentFrame )
|
|||
doJumpLoop()
|
||||
end)
|
||||
jumpButton.InputEnded:connect(function(inputObject)
|
||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
|
||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
|
||||
return
|
||||
end
|
||||
|
||||
jumpButton.ImageRectOffset = Vector2.new(176, 222)
|
||||
jumpButton.ImageRectSize = Vector2.new(174, 174)
|
||||
|
|
@ -371,7 +441,9 @@ function setupJumpButton( parentFrame )
|
|||
end
|
||||
|
||||
function isTouchUsedByJumpButton(touch)
|
||||
if touch == currentJumpTouch then return true end
|
||||
if touch == currentJumpTouch then
|
||||
return true
|
||||
end
|
||||
for i, touchToCompare in pairs(oldJumpTouches) do
|
||||
if touch == touchToCompare then
|
||||
return true
|
||||
|
|
@ -419,8 +491,10 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
|
|||
|
||||
local startPinch = function(firstTouch, secondTouch)
|
||||
-- track pinching in new frame
|
||||
if pinchFrame then pinchFrame:Destroy() end -- make sure we didn't track in any mud
|
||||
pinchFrame = Instance.new("Frame")
|
||||
if pinchFrame then
|
||||
pinchFrame:Destroy()
|
||||
end -- make sure we didn't track in any mud
|
||||
pinchFrame = Instance.new "Frame"
|
||||
pinchFrame.Name = "PinchFrame"
|
||||
pinchFrame.BackgroundTransparency = 1
|
||||
pinchFrame.Parent = parentFrame
|
||||
|
|
@ -484,8 +558,12 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
|
|||
end
|
||||
|
||||
parentFrame.InputBegan:connect(function(inputObject)
|
||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
|
||||
if isTouchUsedByJumpButton(inputObject) then return end
|
||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
|
||||
return
|
||||
end
|
||||
if isTouchUsedByJumpButton(inputObject) then
|
||||
return
|
||||
end
|
||||
|
||||
local usedByThumbstick = isTouchUsedByThumbstick(inputObject)
|
||||
if not usedByThumbstick then
|
||||
|
|
@ -499,8 +577,12 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
|
|||
end
|
||||
end)
|
||||
userInputService.InputChanged:connect(function(inputObject)
|
||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
|
||||
if cameraTouch ~= inputObject then return end
|
||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
|
||||
return
|
||||
end
|
||||
if cameraTouch ~= inputObject then
|
||||
return
|
||||
end
|
||||
|
||||
local newPos = Vector2.new(cameraTouch.Position.x, cameraTouch.Position.y)
|
||||
local touchDiff = (lastPos - newPos) * CameraRotateSensitivity
|
||||
|
|
@ -532,7 +614,7 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
|
|||
end
|
||||
|
||||
function setupTouchControls()
|
||||
local touchControlFrame = Instance.new("Frame")
|
||||
local touchControlFrame = Instance.new "Frame"
|
||||
touchControlFrame.Name = "TouchControlFrame"
|
||||
touchControlFrame.Size = UDim2.new(1, 0, 1, 0)
|
||||
touchControlFrame.BackgroundTransparency = 1
|
||||
|
|
@ -543,7 +625,9 @@ function setupTouchControls()
|
|||
setupCameraControl(touchControlFrame, refreshCharacterMoveFunc)
|
||||
|
||||
userInputService.ProcessedEvent:connect(function(inputObject, processed)
|
||||
if not processed then return end
|
||||
if not processed then
|
||||
return
|
||||
end
|
||||
|
||||
-- kill camera pan if the touch is used by some user controls
|
||||
if inputObject == cameraTouch and inputObject.UserInputState == Enum.UserInputState.Begin then
|
||||
|
|
@ -552,7 +636,6 @@ function setupTouchControls()
|
|||
end)
|
||||
end
|
||||
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- Start of Script
|
||||
|
|
|
|||
772
157877000.lua
772
157877000.lua
File diff suppressed because it is too large
Load Diff
34
36868950.lua
34
36868950.lua
|
|
@ -1,13 +1,13 @@
|
|||
local controlFrame = script.Parent:FindFirstChild("ControlFrame")
|
||||
local controlFrame = script.Parent:FindFirstChild "ControlFrame"
|
||||
|
||||
if not controlFrame then return end
|
||||
if not controlFrame then
|
||||
return
|
||||
end
|
||||
|
||||
local topLeftControl = controlFrame:FindFirstChild("TopLeftControl")
|
||||
local bottomLeftControl = controlFrame:FindFirstChild("BottomLeftControl")
|
||||
local bottomRightControl = controlFrame:FindFirstChild("BottomRightControl")
|
||||
local bottomLeftControl = controlFrame:FindFirstChild "BottomLeftControl"
|
||||
local bottomRightControl = controlFrame:FindFirstChild "BottomRightControl"
|
||||
|
||||
|
||||
local frameTip = Instance.new("TextLabel")
|
||||
local frameTip = Instance.new "TextLabel"
|
||||
frameTip.Name = "ToolTip"
|
||||
frameTip.Text = ""
|
||||
frameTip.Font = Enum.Font.ArialBold
|
||||
|
|
@ -22,7 +22,7 @@ frameTip.BackgroundTransparency = 1
|
|||
frameTip.TextTransparency = 1
|
||||
frameTip.TextWrap = true
|
||||
|
||||
local inside = Instance.new("BoolValue")
|
||||
local inside = Instance.new "BoolValue"
|
||||
inside.Name = "inside"
|
||||
inside.Value = false
|
||||
inside.Parent = frameTip
|
||||
|
|
@ -30,7 +30,7 @@ inside.Parent = frameTip
|
|||
function setUpListeners(frameToListen)
|
||||
local fadeSpeed = 0.1
|
||||
frameToListen.Parent.MouseEnter:connect(function()
|
||||
if frameToListen:FindFirstChild("inside") then
|
||||
if frameToListen:FindFirstChild "inside" then
|
||||
frameToListen.inside.Value = true
|
||||
wait(1.2)
|
||||
if frameToListen.inside.Value then
|
||||
|
|
@ -47,13 +47,17 @@ function setUpListeners(frameToListen)
|
|||
killFrame.BackgroundTransparency = 1
|
||||
killFrame.TextTransparency = 1
|
||||
end
|
||||
frameToListen.Parent.MouseLeave:connect(function() killTip(frameToListen) end)
|
||||
frameToListen.Parent.MouseButton1Click:connect(function() killTip(frameToListen) 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")
|
||||
parent = bottomLeftControl:FindFirstChild "SettingsButton"
|
||||
end
|
||||
|
||||
local toolTip = frameTip:clone()
|
||||
|
|
@ -70,10 +74,8 @@ wait(5) -- make sure we are loaded in, won't need tool tips for first 5 seconds
|
|||
---------------- 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
|
||||
|
|
@ -93,11 +95,11 @@ end
|
|||
local bottomRightChildren = bottomRightControl:GetChildren()
|
||||
|
||||
for i = 1, #bottomRightChildren do
|
||||
if bottomRightChildren[i].Name:find("Camera") ~= nil then
|
||||
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
|
||||
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)
|
||||
|
|
|
|||
28
37801172.lua
28
37801172.lua
|
|
@ -1,10 +1,11 @@
|
|||
|
||||
-- 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 scriptContext = game:GetService "ScriptContext"
|
||||
local touchEnabled = false
|
||||
pcall(function() touchEnabled = game:GetService("UserInputService").TouchEnabled end)
|
||||
pcall(function()
|
||||
touchEnabled = game:GetService("UserInputService").TouchEnabled
|
||||
end)
|
||||
|
||||
-- library registration
|
||||
scriptContext:AddCoreScript(60595695, scriptContext, "/Libraries/LibraryRegistration/LibraryRegistration")
|
||||
|
|
@ -21,11 +22,11 @@ local function waitForProperty(instance, property)
|
|||
end
|
||||
|
||||
-- Responsible for tracking logging items
|
||||
local scriptContext = game:GetService("ScriptContext")
|
||||
local scriptContext = game:GetService "ScriptContext"
|
||||
scriptContext:AddCoreScript(59002209, scriptContext, "CoreScripts/Sections")
|
||||
|
||||
waitForChild(game:GetService("CoreGui"),"RobloxGui")
|
||||
local screenGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui")
|
||||
waitForChild(game:GetService "CoreGui", "RobloxGui")
|
||||
local screenGui = game:GetService("CoreGui"):FindFirstChild "RobloxGui"
|
||||
|
||||
if not touchEnabled then
|
||||
-- ToolTipper (creates tool tips for gui)
|
||||
|
|
@ -48,10 +49,7 @@ scriptContext:AddCoreScript(97188756, screenGui, "CoreScripts/ChatScript")
|
|||
-- Purchase Prompt Script
|
||||
scriptContext:AddCoreScript(107893730, screenGui, "CoreScripts/PurchasePromptScript")
|
||||
|
||||
if not touchEnabled then
|
||||
-- New Player List
|
||||
scriptContext:AddCoreScript(48488235,screenGui,"CoreScripts/PlayerListScript")
|
||||
elseif screenGui.AbsoluteSize.Y > 600 then
|
||||
if not touchEnabled or screenGui.AbsoluteSize.Y > 600 then
|
||||
-- New Player List
|
||||
scriptContext:AddCoreScript(48488235, screenGui, "CoreScripts/PlayerListScript")
|
||||
else
|
||||
|
|
@ -86,12 +84,12 @@ if game.CoreGui.Version >= 3 and game.PlaceId ~= 130815926 then --todo: remove p
|
|||
end
|
||||
end
|
||||
|
||||
local IsPersonalServer = not not game.Workspace:FindFirstChild("PSVariable")
|
||||
local IsPersonalServer = not not game.Workspace:FindFirstChild "PSVariable"
|
||||
if IsPersonalServer then
|
||||
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
|
||||
if nchild.Name == "PSVariable" and nchild:IsA "BoolValue" then
|
||||
IsPersonalServer = true
|
||||
game:GetService("ScriptContext"):AddCoreScript(64164692, game.Players.LocalPlayer, "BuildToolManager")
|
||||
end
|
||||
|
|
@ -101,10 +99,10 @@ if touchEnabled then -- touch devices don't use same control frame
|
|||
-- only used for touch device button generation
|
||||
scriptContext:AddCoreScript(152908679, screenGui, "CoreScripts/ContextActionTouch")
|
||||
|
||||
waitForChild(screenGui, 'ControlFrame')
|
||||
waitForChild(screenGui.ControlFrame, 'BottomLeftControl')
|
||||
waitForChild(screenGui, "ControlFrame")
|
||||
waitForChild(screenGui.ControlFrame, "BottomLeftControl")
|
||||
screenGui.ControlFrame.BottomLeftControl.Visible = false
|
||||
|
||||
waitForChild(screenGui.ControlFrame, 'TopLeftControl')
|
||||
waitForChild(screenGui.ControlFrame, "TopLeftControl")
|
||||
screenGui.ControlFrame.TopLeftControl.Visible = false
|
||||
end
|
||||
133
38037565.lua
133
38037565.lua
|
|
@ -1,52 +1,52 @@
|
|||
local damageGuiWidth = 5.0
|
||||
local damageGuiHeight = 5.0
|
||||
|
||||
|
||||
function waitForChild(parent, childName)
|
||||
local child = parent:findFirstChild(childName)
|
||||
if child then return child end
|
||||
if child then
|
||||
return child
|
||||
end
|
||||
while true do
|
||||
child = parent.ChildAdded:wait()
|
||||
if child.Name==childName then return child end
|
||||
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 walkSpeed = Humanoid.WalkSpeed
|
||||
local Torso = waitForChild(Figure, "Torso")
|
||||
local Humanoid = waitForChild(Figure, "Humanoid")
|
||||
local Torso = waitForChild(Figure, "Torso")
|
||||
|
||||
local config = Figure:FindFirstChild("PlayerStats")
|
||||
local config = Figure:FindFirstChild "PlayerStats"
|
||||
|
||||
local inCharTag = Instance.new("BoolValue")
|
||||
inCharTag.Name = "InCharTag"
|
||||
local inCharTag = Instance.new "BoolValue"
|
||||
inCharTag.Name = "InCharTag"
|
||||
|
||||
local hider = Instance.new("BoolValue")
|
||||
hider.Name = "RobloxBuildTool"
|
||||
local hider = Instance.new "BoolValue"
|
||||
hider.Name = "RobloxBuildTool"
|
||||
|
||||
local currentChildren
|
||||
local backpackTools
|
||||
|
||||
if config == nil then
|
||||
config = Instance.new("Configuration")
|
||||
config = Instance.new "Configuration"
|
||||
config.Parent = Figure
|
||||
config.Name = "PlayerStats"
|
||||
config.Name = "PlayerStats"
|
||||
end
|
||||
|
||||
local myHealth = config:FindFirstChild("MaxHealth")
|
||||
local myHealth = config:FindFirstChild "MaxHealth"
|
||||
if myHealth == nil then
|
||||
myHealth = Instance.new("NumberValue")
|
||||
myHealth = Instance.new "NumberValue"
|
||||
myHealth.Parent = config
|
||||
myHealth.Value = 100
|
||||
myHealth.Name = "MaxHealth"
|
||||
myHealth.Name = "MaxHealth"
|
||||
end
|
||||
|
||||
Humanoid.MaxHealth = myHealth.Value
|
||||
Humanoid.Health = myHealth.Value
|
||||
|
||||
|
||||
function onMaxHealthChange()
|
||||
Humanoid.MaxHealth = myHealth.Value
|
||||
Humanoid.Health = myHealth.Value
|
||||
|
|
@ -54,39 +54,43 @@ end
|
|||
|
||||
myHealth.Changed:connect(onMaxHealthChange)
|
||||
|
||||
|
||||
--Humanoid.MaxHealth = myHealth.Value
|
||||
--Humanoid.Health = Humanoid.MaxHealth
|
||||
|
||||
local vPlayer = game.Players:GetPlayerFromCharacter(script.Parent)
|
||||
local dotGui = vPlayer.PlayerGui:FindFirstChild("DamageOverTimeGui")
|
||||
local dotGui = vPlayer.PlayerGui:FindFirstChild "DamageOverTimeGui"
|
||||
if dotGui == nil then
|
||||
dotGui = Instance.new("BillboardGui")
|
||||
dotGui.Name = "DamageOverTimeGui"
|
||||
dotGui = Instance.new "BillboardGui"
|
||||
dotGui.Name = "DamageOverTimeGui"
|
||||
dotGui.Parent = vPlayer.PlayerGui
|
||||
dotGui.Adornee = script.Parent:FindFirstChild("Head")
|
||||
dotGui.Adornee = script.Parent:FindFirstChild "Head"
|
||||
dotGui.Active = true
|
||||
dotGui.size = UDim2.new(damageGuiWidth, 0.0, damageGuiHeight, 0.0)
|
||||
dotGui.StudsOffset = Vector3.new(0.0, 2.0, 0.0)
|
||||
dotGui.size = UDim2.new(damageGuiWidth, 0, damageGuiHeight, 0.0)
|
||||
dotGui.StudsOffset = Vector3.new(0, 2.0, 0.0)
|
||||
end
|
||||
|
||||
print("newHealth declarations finished")
|
||||
print "newHealth declarations finished"
|
||||
|
||||
function billboardHealthChange(dmg)
|
||||
local textLabel = Instance.new("TextLabel")
|
||||
if dmg > 0 then textLabel.Text = tostring(dmg) textLabel.TextColor3 = Color3.new(0, 1, 0)
|
||||
else textLabel.Text = tostring(dmg) textLabel.TextColor3 = Color3.new(1, 0, 1) end
|
||||
textLabel.size = UDim2.new(1.0, 0.0, 1.0, 0.0)
|
||||
local textLabel = Instance.new "TextLabel"
|
||||
if dmg > 0 then
|
||||
textLabel.Text = tostring(dmg)
|
||||
textLabel.TextColor3 = Color3.new(0, 1, 0)
|
||||
else
|
||||
textLabel.Text = tostring(dmg)
|
||||
textLabel.TextColor3 = Color3.new(1, 0, 1)
|
||||
end
|
||||
textLabel.size = UDim2.new(1, 0, 1, 0.0)
|
||||
textLabel.Active = true
|
||||
textLabel.FontSize = 6
|
||||
textLabel.BackgroundTransparency = 1
|
||||
textLabel.Parent = dotGui
|
||||
|
||||
for t = 1, 10 do
|
||||
wait(.1)
|
||||
wait(0.1)
|
||||
textLabel.TextTransparency = t / 10
|
||||
textLabel.Position = UDim2.new(0, 0, 0, -t * 5)
|
||||
textLabel.FontSize = 6-t*.6
|
||||
textLabel.FontSize = 6 - t * 0.6
|
||||
end
|
||||
|
||||
textLabel:remove()
|
||||
|
|
@ -94,10 +98,10 @@ end
|
|||
|
||||
function setMaxHealth()
|
||||
--print(Humanoid.Health)
|
||||
if myHealth.Value >=0 then
|
||||
if myHealth.Value >= 0 then
|
||||
Humanoid.MaxHealth = myHealth.Value
|
||||
print(Humanoid.MaxHealth)
|
||||
if Humanoid.Health > Humanoid.MaxHealth then
|
||||
if Humanoid.Health > Humanoid.MaxHealth then
|
||||
Humanoid.Health = Humanoid.MaxHealth
|
||||
end
|
||||
end
|
||||
|
|
@ -107,43 +111,50 @@ myHealth.Changed:connect(setMaxHealth)
|
|||
|
||||
-- Visual Effects --
|
||||
|
||||
fireEffect = Instance.new("Fire")
|
||||
fireEffect = Instance.new "Fire"
|
||||
fireEffect.Heat = 0.1
|
||||
fireEffect.Size = 3.0
|
||||
fireEffect.Name = "FireEffect"
|
||||
fireEffect.Name = "FireEffect"
|
||||
fireEffect.Enabled = false
|
||||
--
|
||||
|
||||
|
||||
-- regeneration
|
||||
while true do
|
||||
local s = wait(1)
|
||||
local health = Humanoid.Health
|
||||
if health > 0 then -- and health < Humanoid.MaxHealth then
|
||||
if health > 0 then -- and health < Humanoid.MaxHealth then
|
||||
local delta = 0
|
||||
if config then
|
||||
regen = config:FindFirstChild("Regen")
|
||||
poison = config:FindFirstChild("Poison")
|
||||
ice = config:FindFirstChild("Ice")
|
||||
fire = config:FindFirstChild("Fire")
|
||||
stun = config:FindFirstChild("Stun")
|
||||
regen = config:FindFirstChild "Regen"
|
||||
poison = config:FindFirstChild "Poison"
|
||||
ice = config:FindFirstChild "Ice"
|
||||
fire = config:FindFirstChild "Fire"
|
||||
stun = config:FindFirstChild "Stun"
|
||||
if regen then
|
||||
delta = delta + regen.Value.X
|
||||
if regen.Value.Y >= 0 then regen.Value = Vector3.new(regen.Value.X+regen.Value.Z, regen.Value.Y - s, regen.Value.Z) -- maybe have 3rd parameter be an increaser/decreaser?
|
||||
elseif regen.Value.Y == -1 then regen.Value = Vector3.new(regen.Value.X+regen.Value.Z, -1, regen.Value.Z)
|
||||
else regen:remove() end -- infinity is -1
|
||||
if regen.Value.Y >= 0 then
|
||||
regen.Value = Vector3.new(regen.Value.X + regen.Value.Z, regen.Value.Y - s, regen.Value.Z) -- maybe have 3rd parameter be an increaser/decreaser?
|
||||
elseif regen.Value.Y == -1 then
|
||||
regen.Value = Vector3.new(regen.Value.X + regen.Value.Z, -1, regen.Value.Z)
|
||||
else
|
||||
regen:remove()
|
||||
end -- infinity is -1
|
||||
end
|
||||
if poison then
|
||||
delta = delta - poison.Value.X
|
||||
if poison.Value.Y >= 0 then poison.Value = Vector3.new(poison.Value.X+poison.Value.Z, poison.Value.Y - s, poison.Value.Z)
|
||||
elseif poison.Value.Y == -1 then poison.Value = Vector3.new(poison.Value.X+poison.Value.Z, -1, poison.Value.Z)
|
||||
else poison:remove() end -- infinity is -1
|
||||
if poison.Value.Y >= 0 then
|
||||
poison.Value = Vector3.new(poison.Value.X + poison.Value.Z, poison.Value.Y - s, poison.Value.Z)
|
||||
elseif poison.Value.Y == -1 then
|
||||
poison.Value = Vector3.new(poison.Value.X + poison.Value.Z, -1, poison.Value.Z)
|
||||
else
|
||||
poison:remove()
|
||||
end -- infinity is -1
|
||||
end
|
||||
|
||||
if ice then
|
||||
--print("IN ICE")
|
||||
--print("IN ICE")
|
||||
delta = delta - ice.Value.X
|
||||
if ice.Value.Y >=0 then
|
||||
if ice.Value.Y >= 0 then
|
||||
ice.Value = Vector3.new(ice.Value.X, ice.Value.Y - s, ice.Value.Z)
|
||||
else
|
||||
ice:remove()
|
||||
|
|
@ -154,7 +165,7 @@ fireEffect.Enabled = false
|
|||
fireEffect.Enabled = true
|
||||
fireEffect.Parent = Figure.Torso
|
||||
delta = delta - fire.Value.X
|
||||
if fire.Value.Y >= 0 then
|
||||
if fire.Value.Y >= 0 then
|
||||
fire.Value = Vector3.new(fire.Value.X, fire.Value.Y - s, fire.Value.Z)
|
||||
else
|
||||
fire:remove()
|
||||
|
|
@ -164,19 +175,19 @@ fireEffect.Enabled = false
|
|||
end
|
||||
|
||||
if stun then
|
||||
if stun.Value > 0 then
|
||||
if stun.Value > 0 then
|
||||
Torso.Anchored = true
|
||||
currentChildren = script.Parent:GetChildren()
|
||||
backpackTools = game.Players:GetPlayerFromCharacter(script.Parent).Backpack:GetChildren()
|
||||
for i = 1, #currentChildren do
|
||||
if currentChildren[i].className == "Tool" then
|
||||
if currentChildren[i].className == "Tool" then
|
||||
inCharTag:Clone().Parent = currentChildren[i]
|
||||
print(backpackTools)
|
||||
table.insert(backpackTools, currentChildren[i])
|
||||
end
|
||||
end
|
||||
for i = 1, #backpackTools do
|
||||
if backpackTools[i]:FindFirstChild("RobloxBuildTool") == nil then
|
||||
if backpackTools[i]:FindFirstChild "RobloxBuildTool" == nil then
|
||||
hider:Clone().Parent = backpackTools[i]
|
||||
backpackTools[i].Parent = game.Lighting
|
||||
end
|
||||
|
|
@ -189,13 +200,15 @@ fireEffect.Enabled = false
|
|||
else
|
||||
Torso.Anchored = false
|
||||
for i = 1, #backpackTools do
|
||||
rbTool = backpackTools[i]:FindFirstChild("RobloxBuildTool")
|
||||
if rbTool then rbTool:Remove() end
|
||||
rbTool = backpackTools[i]:FindFirstChild "RobloxBuildTool"
|
||||
if rbTool then
|
||||
rbTool:Remove()
|
||||
end
|
||||
backpackTools[i].Parent = game.Lighting
|
||||
end
|
||||
wait(0.2)
|
||||
for i = 1, #backpackTools do
|
||||
wasInCharacter = backpackTools[i]:FindFirstChild("InCharTag")
|
||||
wasInCharacter = backpackTools[i]:FindFirstChild "InCharTag"
|
||||
if wasInChar then
|
||||
wasInChar:Remove()
|
||||
backpackTools[i].Parent = script.Parent
|
||||
|
|
@ -216,10 +229,10 @@ fireEffect.Enabled = false
|
|||
--health = health + delta * s * Humanoid.MaxHealth
|
||||
|
||||
health = Humanoid.Health + delta * s
|
||||
if health * 1.01 < Humanoid.MaxHealth then
|
||||
if health * 1.01 < Humanoid.MaxHealth then
|
||||
Humanoid.Health = health
|
||||
--myHealth.Value = math.floor(Humanoid.Health)
|
||||
elseif delta > 0 then
|
||||
elseif delta > 0 then
|
||||
Humanoid.Health = Humanoid.MaxHealth
|
||||
--myHealth.Value = Humanoid.Health
|
||||
end
|
||||
|
|
|
|||
112
39250920.lua
112
39250920.lua
|
|
@ -10,7 +10,6 @@ function waitForChild(instance, name)
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
local mainFrame
|
||||
local choices = {}
|
||||
local lastChoice
|
||||
|
|
@ -27,7 +26,6 @@ local conversationTimedOut = "Chat ended because you didn't reply"
|
|||
local conversationTimedOutSize = 350
|
||||
|
||||
local player
|
||||
local screenGui
|
||||
local chatNotificationGui
|
||||
local messageDialog
|
||||
local timeoutScript
|
||||
|
|
@ -38,7 +36,7 @@ local dialogConnections = {}
|
|||
local gui = nil
|
||||
waitForChild(game, "CoreGui")
|
||||
waitForChild(game.CoreGui, "RobloxGui")
|
||||
if game.CoreGui.RobloxGui:FindFirstChild("ControlFrame") then
|
||||
if game.CoreGui.RobloxGui:FindFirstChild "ControlFrame" then
|
||||
gui = game.CoreGui.RobloxGui.ControlFrame
|
||||
else
|
||||
gui = game.CoreGui.RobloxGui
|
||||
|
|
@ -52,9 +50,8 @@ function currentTone()
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
function createChatNotificationGui()
|
||||
chatNotificationGui = Instance.new("BillboardGui")
|
||||
chatNotificationGui = Instance.new "BillboardGui"
|
||||
chatNotificationGui.Name = "ChatNotificationGui"
|
||||
chatNotificationGui.ExtentsOffset = Vector3.new(0, 1, 0)
|
||||
chatNotificationGui.Size = UDim2.new(4, 0, 5.42857122, 0)
|
||||
|
|
@ -64,18 +61,17 @@ function createChatNotificationGui()
|
|||
chatNotificationGui.RobloxLocked = true
|
||||
chatNotificationGui.Active = true
|
||||
|
||||
local image = Instance.new("ImageLabel")
|
||||
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.Size = UDim2.new(1, 0, 1, 0)
|
||||
image.Image = ""
|
||||
image.RobloxLocked = true
|
||||
image.Parent = chatNotificationGui
|
||||
|
||||
|
||||
local button = Instance.new("ImageButton")
|
||||
local button = Instance.new "ImageButton"
|
||||
button.Name = "Button"
|
||||
button.AutoButtonColor = false
|
||||
button.Position = UDim2.new(0.0879999995, 0, 0.0529999994, 0)
|
||||
|
|
@ -97,7 +93,7 @@ function getChatColor(tone)
|
|||
end
|
||||
|
||||
function styleChoices(tone)
|
||||
for i, obj in pairs(choices) do
|
||||
for _, obj in pairs(choices) do
|
||||
resetColor(obj, tone)
|
||||
end
|
||||
resetColor(lastChoice, tone)
|
||||
|
|
@ -135,12 +131,12 @@ function setChatNotificationTone(gui, purpose, tone)
|
|||
end
|
||||
|
||||
function createMessageDialog()
|
||||
messageDialog = Instance.new("Frame");
|
||||
messageDialog = Instance.new "Frame"
|
||||
messageDialog.Name = "DialogScriptMessage"
|
||||
messageDialog.Style = Enum.FrameStyle.RobloxRound
|
||||
messageDialog.Visible = false
|
||||
|
||||
local text = Instance.new("TextLabel")
|
||||
local text = Instance.new "TextLabel"
|
||||
text.Name = "Text"
|
||||
text.Position = UDim2.new(0, 0, 0, -1)
|
||||
text.Size = UDim2.new(1, 0, 1, 0)
|
||||
|
|
@ -192,20 +188,20 @@ function highlightColor(frame, tone)
|
|||
end
|
||||
|
||||
function wanderDialog()
|
||||
print("Wander")
|
||||
print "Wander"
|
||||
mainFrame.Visible = false
|
||||
endDialog()
|
||||
showMessage(characterWanderedOffMessage, characterWanderedOffSize)
|
||||
end
|
||||
|
||||
function timeoutDialog()
|
||||
print("Timeout")
|
||||
print "Timeout"
|
||||
mainFrame.Visible = false
|
||||
endDialog()
|
||||
showMessage(conversationTimedOut, conversationTimedOutSize)
|
||||
end
|
||||
function normalEndDialog()
|
||||
print("Done")
|
||||
print "Done"
|
||||
endDialog()
|
||||
end
|
||||
|
||||
|
|
@ -253,10 +249,18 @@ function selectChoice(choice)
|
|||
else
|
||||
local dialogChoice = choiceMap[choice]
|
||||
|
||||
game.Chat:Chat(game.Players.LocalPlayer.Character, sanitizeMessage(dialogChoice.UserDialog), getChatColor(currentTone()))
|
||||
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()))
|
||||
game.Chat:Chat(
|
||||
currentConversationPartner,
|
||||
sanitizeMessage(dialogChoice.ResponseDialog),
|
||||
getChatColor(currentTone())
|
||||
)
|
||||
|
||||
variableDelay(dialogChoice.ResponseDialog)
|
||||
presentDialogChoices(currentConversationPartner, dialogChoice:GetChildren())
|
||||
|
|
@ -264,17 +268,23 @@ function selectChoice(choice)
|
|||
end
|
||||
|
||||
function newChoice(numberText)
|
||||
local frame = Instance.new("TextButton")
|
||||
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.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")
|
||||
local number = Instance.new "TextLabel"
|
||||
number.Name = "Number"
|
||||
number.TextColor3 = Color3.new(127 / 255, 212 / 255, 255 / 255)
|
||||
number.Text = numberText
|
||||
|
|
@ -287,7 +297,7 @@ function newChoice(numberText)
|
|||
number.RobloxLocked = true
|
||||
number.Parent = frame
|
||||
|
||||
local prompt = Instance.new("TextLabel")
|
||||
local prompt = Instance.new "TextLabel"
|
||||
prompt.Name = "UserPrompt"
|
||||
prompt.BackgroundTransparency = 1
|
||||
prompt.TextColor3 = Color3.new(1, 1, 1)
|
||||
|
|
@ -303,22 +313,22 @@ function newChoice(numberText)
|
|||
return frame
|
||||
end
|
||||
function initialize(parent)
|
||||
choices[1] = newChoice("1)")
|
||||
choices[2] = newChoice("2)")
|
||||
choices[3] = newChoice("3)")
|
||||
choices[4] = newChoice("4)")
|
||||
choices[1] = newChoice "1)"
|
||||
choices[2] = newChoice "2)"
|
||||
choices[3] = newChoice "3)"
|
||||
choices[4] = newChoice "4)"
|
||||
|
||||
lastChoice = newChoice("5)")
|
||||
lastChoice = newChoice "5)"
|
||||
lastChoice.UserPrompt.Text = "Goodbye!"
|
||||
lastChoice.Size = UDim2.new(1, 0, 0, 28)
|
||||
|
||||
mainFrame = Instance.new("Frame")
|
||||
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 = Instance.new "ImageLabel"
|
||||
imageLabel.Name = "Tail"
|
||||
imageLabel.Size = UDim2.new(0, 62, 0, 53)
|
||||
imageLabel.Position = UDim2.new(1, 8, 0.25)
|
||||
|
|
@ -346,11 +356,13 @@ function presentDialogChoices(talkingPart, dialogChoices)
|
|||
currentConversationPartner = talkingPart
|
||||
sortedDialogChoices = {}
|
||||
for n, obj in pairs(dialogChoices) do
|
||||
if obj:IsA("DialogChoice") then
|
||||
if obj:IsA "DialogChoice" then
|
||||
table.insert(sortedDialogChoices, obj)
|
||||
end
|
||||
end
|
||||
table.sort(sortedDialogChoices, function(a,b) return a.Name < b.Name end)
|
||||
table.sort(sortedDialogChoices, function(a, b)
|
||||
return a.Name < b.Name
|
||||
end)
|
||||
|
||||
if #sortedDialogChoices == 0 then
|
||||
normalEndDialog()
|
||||
|
|
@ -386,7 +398,7 @@ function presentDialogChoices(talkingPart, dialogChoices)
|
|||
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)
|
||||
mainFrame.Position = UDim2.new(0, 20, 0, -mainFrame.Size.Y.Offset - 20)
|
||||
styleMainFrame(currentTone())
|
||||
mainFrame.Visible = true
|
||||
end
|
||||
|
|
@ -425,7 +437,13 @@ end
|
|||
|
||||
function checkForLeaveArea()
|
||||
while currentConversationDialog do
|
||||
if currentConversationDialog.Parent and (player:DistanceFromCharacter(currentConversationDialog.Parent.Position) >= currentConversationDialog.ConversationDistance) then
|
||||
if
|
||||
currentConversationDialog.Parent
|
||||
and (
|
||||
player:DistanceFromCharacter(currentConversationDialog.Parent.Position)
|
||||
>= currentConversationDialog.ConversationDistance
|
||||
)
|
||||
then
|
||||
wanderDialog()
|
||||
end
|
||||
wait(1)
|
||||
|
|
@ -433,7 +451,7 @@ function checkForLeaveArea()
|
|||
end
|
||||
|
||||
function startDialog(dialog)
|
||||
if dialog.Parent and dialog.Parent:IsA("BasePart") then
|
||||
if dialog.Parent and dialog.Parent:IsA "BasePart" then
|
||||
if player:DistanceFromCharacter(dialog.Parent.Position) >= dialog.ConversationDistance then
|
||||
showMessage(tooFarAwayMessage, tooFarAwaySize)
|
||||
return
|
||||
|
|
@ -465,13 +483,15 @@ end
|
|||
|
||||
function addDialog(dialog)
|
||||
if dialog.Parent then
|
||||
if dialog.Parent:IsA("BasePart") 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)
|
||||
chatGui.Image.Button.MouseButton1Click:connect(function()
|
||||
startDialog(dialog)
|
||||
end)
|
||||
setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone)
|
||||
|
||||
dialogMap[dialog] = chatGui
|
||||
|
|
@ -538,7 +558,7 @@ function onLoad()
|
|||
waitForChild(gui, "BottomLeftControl")
|
||||
|
||||
--print("Initializing Frame")
|
||||
local frame = Instance.new("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)
|
||||
|
|
@ -548,10 +568,18 @@ function onLoad()
|
|||
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
|
||||
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 _, obj in pairs(game.CollectionService:GetCollection "Dialog") do
|
||||
if obj:IsA "Dialog" then
|
||||
addDialog(obj)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
1189
45284430.lua
1189
45284430.lua
File diff suppressed because it is too large
Load Diff
13
45374389.lua
13
45374389.lua
|
|
@ -1,17 +1,14 @@
|
|||
local t = {}
|
||||
|
||||
t.Foo =
|
||||
function()
|
||||
print("foo")
|
||||
t.Foo = function()
|
||||
print "foo"
|
||||
end
|
||||
|
||||
t.Bar =
|
||||
function()
|
||||
print("bar")
|
||||
t.Bar = function()
|
||||
print "bar"
|
||||
end
|
||||
|
||||
t.Help =
|
||||
function(funcNameOrFunc)
|
||||
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"
|
||||
|
|
|
|||
776
46295863.lua
776
46295863.lua
File diff suppressed because it is too large
Load Diff
1793
48488235.lua
1793
48488235.lua
File diff suppressed because it is too large
Load Diff
231
48488398.lua
231
48488398.lua
|
|
@ -17,25 +17,32 @@ script.Parent.Popup.AcceptButton.Modal = true
|
|||
local localPlayer = game.Players.LocalPlayer
|
||||
local teleportUI = nil
|
||||
|
||||
local acceptedTeleport = Instance.new("IntValue")
|
||||
|
||||
local friendRequestBlacklist = {}
|
||||
|
||||
local teleportEnabled = true
|
||||
|
||||
local makePopupInvisible = function()
|
||||
if script.Parent.Popup then script.Parent.Popup.Visible = false end
|
||||
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!
|
||||
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.roblox.com/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=352&y=352"
|
||||
popup.PopupImage.Image = "http://www.roblox.com/thumbs/avatar.ashx?userId="
|
||||
.. tostring(fromPlayer.userId)
|
||||
.. "&x=352&y=352"
|
||||
|
||||
showTwoButtons()
|
||||
popup.Visible = true
|
||||
|
|
@ -48,62 +55,88 @@ function makeFriend(fromPlayer,toPlayer)
|
|||
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())
|
||||
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())
|
||||
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 and toPlayer ~= localPlayer then
|
||||
return
|
||||
end
|
||||
|
||||
if fromPlayer == localPlayer then
|
||||
if event == Enum.FriendRequestEvent.Accept then
|
||||
game:GetService("GuiService"):SendNotification("You are Friends",
|
||||
game:GetService("GuiService"):SendNotification(
|
||||
"You are Friends",
|
||||
"With " .. toPlayer.Name .. "!",
|
||||
"http://www.roblox.com/thumbs/avatar.ashx?userId=" .. tostring(toPlayer.userId) .. "&x=48&y=48",
|
||||
5,
|
||||
function()
|
||||
|
||||
end)
|
||||
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",
|
||||
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.roblox.com/thumbs/avatar.ashx?userId=" .. tostring(fromPlayer.userId) .. "&x=48&y=48",
|
||||
8,
|
||||
function()
|
||||
makeFriend(fromPlayer, toPlayer)
|
||||
end)
|
||||
end
|
||||
)
|
||||
elseif event == Enum.FriendRequestEvent.Accept then
|
||||
game:GetService("GuiService"):SendNotification("You are Friends",
|
||||
game:GetService("GuiService"):SendNotification(
|
||||
"You are Friends",
|
||||
"With " .. fromPlayer.Name .. "!",
|
||||
"http://www.roblox.com/thumbs/avatar.ashx?userId=" .. tostring(fromPlayer.userId) .. "&x=48&y=48",
|
||||
5,
|
||||
function()
|
||||
|
||||
end)
|
||||
function() end
|
||||
)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
function showOneButton()
|
||||
local popup = script.Parent:FindFirstChild("Popup")
|
||||
local popup = script.Parent:FindFirstChild "Popup"
|
||||
if popup then
|
||||
popup.OKButton.Visible = true
|
||||
popup.DeclineButton.Visible = false
|
||||
|
|
@ -112,7 +145,7 @@ function showOneButton()
|
|||
end
|
||||
|
||||
function showTwoButtons()
|
||||
local popup = script.Parent:FindFirstChild("Popup")
|
||||
local popup = script.Parent:FindFirstChild "Popup"
|
||||
if popup then
|
||||
popup.OKButton.Visible = false
|
||||
popup.DeclineButton.Visible = true
|
||||
|
|
@ -120,7 +153,7 @@ function showTwoButtons()
|
|||
end
|
||||
end
|
||||
|
||||
function onTeleport(teleportState, placeId, spawnName)
|
||||
function onTeleport(teleportState, _, _)
|
||||
if game:GetService("TeleportService").CustomizedTeleportUI == false then
|
||||
if teleportState == Enum.TeleportState.Started then
|
||||
showTeleportUI("Teleport started...", 0)
|
||||
|
|
@ -139,8 +172,9 @@ function showTeleportUI(message, timer)
|
|||
teleportUI:Remove()
|
||||
end
|
||||
waitForChild(localPlayer, "PlayerGui")
|
||||
teleportUI = Instance.new("Message", localPlayer.PlayerGui)
|
||||
teleportUI = Instance.new "Message"
|
||||
teleportUI.Text = message
|
||||
teleportUI.Parent = localPlayer.PlayerGui
|
||||
if timer > 0 then
|
||||
wait(timer)
|
||||
teleportUI:Remove()
|
||||
|
|
@ -148,21 +182,31 @@ function showTeleportUI(message, timer)
|
|||
end
|
||||
|
||||
if teleportEnabled then
|
||||
|
||||
localPlayer.OnTeleport:connect(onTeleport)
|
||||
|
||||
game:GetService("TeleportService").ErrorCallback = function(message)
|
||||
local popup = script.Parent:FindFirstChild("Popup")
|
||||
local popup = script.Parent:FindFirstChild "Popup"
|
||||
showOneButton()
|
||||
popup.PopupText.Text = message
|
||||
local clickCon
|
||||
clickCon = popup.OKButton.MouseButton1Click:connect(function()
|
||||
game:GetService("TeleportService"):TeleportCancel()
|
||||
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())
|
||||
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,
|
||||
game.GuiService:AddCenterDialog(
|
||||
script.Parent:FindFirstChild "Popup",
|
||||
Enum.CenterDialogType.QuitDialog,
|
||||
--ShowFunction
|
||||
function()
|
||||
showOneButton()
|
||||
|
|
@ -171,68 +215,132 @@ if teleportEnabled then
|
|||
end,
|
||||
--HideFunction
|
||||
function()
|
||||
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible())
|
||||
end)
|
||||
|
||||
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")
|
||||
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())
|
||||
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)
|
||||
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())
|
||||
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,
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
pcall(function()
|
||||
game:GetService("TeleportService"):TeleportCancel()
|
||||
end)
|
||||
end)
|
||||
|
||||
local centerDialogSuccess = pcall(function() game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog,
|
||||
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)
|
||||
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)
|
||||
popup:TweenSize(
|
||||
UDim2.new(0, 0, 0, 0),
|
||||
Enum.EasingDirection.Out,
|
||||
Enum.EasingStyle.Quart,
|
||||
1,
|
||||
true,
|
||||
makePopupInvisible()
|
||||
)
|
||||
end
|
||||
)
|
||||
end)
|
||||
|
||||
if centerDialogSuccess == false then
|
||||
|
|
@ -242,6 +350,5 @@ if teleportEnabled then
|
|||
popup:TweenSize(UDim2.new(0, 330, 0, 350), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 1, true)
|
||||
end
|
||||
return true
|
||||
|
||||
end
|
||||
end
|
||||
10
48488451.lua
10
48488451.lua
|
|
@ -1,6 +1,6 @@
|
|||
--build our gui
|
||||
|
||||
local popupFrame = Instance.new("Frame")
|
||||
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
|
||||
|
|
@ -16,7 +16,7 @@ darken.Name = "Darken"
|
|||
darken.ZIndex = 1
|
||||
darken.Parent = popupFrame
|
||||
|
||||
local acceptButton = Instance.new("TextButton")
|
||||
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
|
||||
|
|
@ -41,7 +41,7 @@ okButton.Position = UDim2.new(0.5,-50,0,270)
|
|||
okButton.Visible = false
|
||||
okButton.Parent = popupFrame
|
||||
|
||||
local popupImage = Instance.new("ImageLabel")
|
||||
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)
|
||||
|
|
@ -49,7 +49,7 @@ popupImage.ZIndex = 3
|
|||
popupImage.Name = "PopupImage"
|
||||
popupImage.Parent = popupFrame
|
||||
|
||||
local backing = Instance.new("ImageLabel")
|
||||
local backing = Instance.new "ImageLabel"
|
||||
backing.BackgroundTransparency = 1
|
||||
backing.Size = UDim2.new(1, 0, 1, 0)
|
||||
backing.Image = "http://www.roblox.com/asset/?id=47574181"
|
||||
|
|
@ -57,7 +57,7 @@ backing.Name = "Backing"
|
|||
backing.ZIndex = 2
|
||||
backing.Parent = popupImage
|
||||
|
||||
local popupText = Instance.new("TextLabel")
|
||||
local popupText = Instance.new "TextLabel"
|
||||
popupText.Name = "PopupText"
|
||||
popupText.Size = UDim2.new(1, 0, 0.8, 0)
|
||||
popupText.Font = Enum.Font.ArialBold
|
||||
|
|
|
|||
335
53878047.lua
335
53878047.lua
|
|
@ -1,7 +1,9 @@
|
|||
-- 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
|
||||
if game.CoreGui.Version < 3 then
|
||||
return
|
||||
end -- peace out if we aren't using the right client
|
||||
|
||||
local gui = script.Parent
|
||||
|
||||
|
|
@ -19,7 +21,9 @@ end
|
|||
|
||||
local function IsTouchDevice()
|
||||
local touchEnabled = false
|
||||
pcall(function() touchEnabled = Game:GetService('UserInputService').TouchEnabled end)
|
||||
pcall(function()
|
||||
touchEnabled = Game:GetService("UserInputService").TouchEnabled
|
||||
end)
|
||||
return touchEnabled
|
||||
end
|
||||
|
||||
|
|
@ -32,10 +36,9 @@ end
|
|||
|
||||
waitForChild(game, "Players")
|
||||
waitForProperty(game.Players, "LocalPlayer")
|
||||
local player = game.Players.LocalPlayer
|
||||
|
||||
-- First up is the current loadout
|
||||
local CurrentLoadout = Instance.new("Frame")
|
||||
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)
|
||||
|
|
@ -43,29 +46,29 @@ 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);
|
||||
local CLBackground = Instance.new "ImageLabel"
|
||||
CLBackground.Name = "Background"
|
||||
CLBackground.Size = UDim2.new(1.2, 0, 1.2, 0)
|
||||
CLBackground.Image = "http://www.roblox.com/asset/?id=96536002"
|
||||
CLBackground.BackgroundTransparency = 1.0;
|
||||
CLBackground.Position = UDim2.new(-0.1, 0, -0.1, 0);
|
||||
CLBackground.ZIndex = 0.0;
|
||||
CLBackground.BackgroundTransparency = 1
|
||||
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')
|
||||
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.roblox.com/asset/?id=97662207'
|
||||
BackgroundUp.BackgroundTransparency = 1.0
|
||||
BackgroundUp.Image = "http://www.roblox.com/asset/?id=97662207"
|
||||
BackgroundUp.BackgroundTransparency = 1
|
||||
BackgroundUp.Parent = CLBackground
|
||||
|
||||
local Debounce = Instance.new("BoolValue")
|
||||
local Debounce = Instance.new "BoolValue"
|
||||
Debounce.Name = "Debounce"
|
||||
Debounce.RobloxLocked = true
|
||||
Debounce.Parent = CurrentLoadout
|
||||
|
||||
local BackpackButton = Instance.new("ImageButton")
|
||||
local BackpackButton = Instance.new "ImageButton"
|
||||
BackpackButton.RobloxLocked = true
|
||||
BackpackButton.Visible = false
|
||||
BackpackButton.Name = "BackpackButton"
|
||||
|
|
@ -85,7 +88,7 @@ if IsPhone() then
|
|||
end
|
||||
|
||||
for i = 0, NumSlots do
|
||||
local slotFrame = Instance.new("Frame")
|
||||
local slotFrame = Instance.new "Frame"
|
||||
slotFrame.RobloxLocked = true
|
||||
slotFrame.BackgroundColor3 = Color3.new(0, 0, 0)
|
||||
slotFrame.BackgroundTransparency = 1
|
||||
|
|
@ -98,53 +101,51 @@ for i = 0, NumSlots do
|
|||
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)
|
||||
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")
|
||||
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.BackgroundTransparency = 1
|
||||
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.roblox.com/asset/?id=97613075'
|
||||
local slotBackground = Instance.new "ImageLabel"
|
||||
slotBackground.Name = "Background"
|
||||
slotBackground.BackgroundTransparency = 1
|
||||
slotBackground.Image = "http://www.roblox.com/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.roblox.com/asset/?id=97643886'
|
||||
local HighLight = Instance.new "ImageLabel"
|
||||
HighLight.Name = "Highlight"
|
||||
HighLight.BackgroundTransparency = 1
|
||||
HighLight.Image = "http://www.roblox.com/asset/?id=97643886"
|
||||
HighLight.Size = UDim2.new(1, 0, 1, 0)
|
||||
--HighLight.Parent = TempSlot
|
||||
HighLight.Visible = false
|
||||
|
||||
-- TempSlot Children
|
||||
local GearReference = Instance.new("ObjectValue")
|
||||
local GearReference = Instance.new "ObjectValue"
|
||||
GearReference.Name = "GearReference"
|
||||
GearReference.RobloxLocked = true
|
||||
GearReference.Parent = TempSlot
|
||||
|
||||
|
||||
local ToolTipLabel = Instance.new("TextLabel")
|
||||
local ToolTipLabel = Instance.new "TextLabel"
|
||||
ToolTipLabel.Name = "ToolTipLabel"
|
||||
ToolTipLabel.RobloxLocked = true
|
||||
ToolTipLabel.Text = ""
|
||||
|
|
@ -161,13 +162,12 @@ TempSlot.ZIndex = 3.0
|
|||
ToolTipLabel.Position = UDim2.new(0, -30, 0, -30)
|
||||
ToolTipLabel.Parent = TempSlot
|
||||
|
||||
|
||||
local Kill = Instance.new("BoolValue")
|
||||
local Kill = Instance.new "BoolValue"
|
||||
Kill.Name = "Kill"
|
||||
Kill.RobloxLocked = true
|
||||
Kill.Parent = TempSlot
|
||||
|
||||
local GearImage = Instance.new("ImageLabel")
|
||||
local GearImage = Instance.new "ImageLabel"
|
||||
GearImage.Name = "GearImage"
|
||||
GearImage.BackgroundTransparency = 1
|
||||
GearImage.Position = UDim2.new(0, 0, 0, 0)
|
||||
|
|
@ -176,7 +176,7 @@ TempSlot.ZIndex = 3.0
|
|||
GearImage.RobloxLocked = true
|
||||
GearImage.Parent = TempSlot
|
||||
|
||||
local SlotNumber = Instance.new("TextLabel")
|
||||
local SlotNumber = Instance.new "TextLabel"
|
||||
SlotNumber.Name = "SlotNumber"
|
||||
SlotNumber.BackgroundTransparency = 1
|
||||
SlotNumber.BorderSizePixel = 0
|
||||
|
|
@ -208,7 +208,7 @@ TempSlot.ZIndex = 3.0
|
|||
SlotNumberUpShadow.Position = UDim2.new(0, -1, 0, -1)
|
||||
SlotNumberUpShadow.Parent = TempSlot
|
||||
|
||||
local GearText = Instance.new("TextLabel")
|
||||
local GearText = Instance.new "TextLabel"
|
||||
GearText.RobloxLocked = true
|
||||
GearText.Name = "GearText"
|
||||
GearText.BackgroundTransparency = 1
|
||||
|
|
@ -224,7 +224,7 @@ TempSlot.ZIndex = 3.0
|
|||
|
||||
--- Great, now lets make the inventory!
|
||||
|
||||
local Backpack = Instance.new("Frame")
|
||||
local Backpack = Instance.new "Frame"
|
||||
Backpack.RobloxLocked = true
|
||||
Backpack.Visible = false
|
||||
Backpack.Name = "Backpack"
|
||||
|
|
@ -236,23 +236,23 @@ Backpack.Parent = gui
|
|||
Backpack.Active = true
|
||||
|
||||
-- Backpack Children
|
||||
local SwapSlot = Instance.new("BoolValue")
|
||||
local SwapSlot = Instance.new "BoolValue"
|
||||
SwapSlot.RobloxLocked = true
|
||||
SwapSlot.Name = "SwapSlot"
|
||||
SwapSlot.Parent = Backpack
|
||||
|
||||
-- SwapSlot Children
|
||||
local Slot = Instance.new("IntValue")
|
||||
local Slot = Instance.new "IntValue"
|
||||
Slot.RobloxLocked = true
|
||||
Slot.Name = "Slot"
|
||||
Slot.Parent = SwapSlot
|
||||
|
||||
local GearButton = Instance.new("ObjectValue")
|
||||
local GearButton = Instance.new "ObjectValue"
|
||||
GearButton.RobloxLocked = true
|
||||
GearButton.Name = "GearButton"
|
||||
GearButton.Parent = SwapSlot
|
||||
|
||||
local Tabs = Instance.new("Frame")
|
||||
local Tabs = Instance.new "Frame"
|
||||
Tabs.Name = "Tabs"
|
||||
Tabs.Visible = false
|
||||
Tabs.Active = false
|
||||
|
|
@ -266,7 +266,7 @@ Backpack.Active = true
|
|||
|
||||
-- Tabs Children
|
||||
|
||||
local tabLine = Instance.new("Frame")
|
||||
local tabLine = Instance.new "Frame"
|
||||
tabLine.RobloxLocked = true
|
||||
tabLine.Name = "TabLine"
|
||||
tabLine.BackgroundColor3 = Color3.new(53 / 255, 53 / 255, 53 / 255)
|
||||
|
|
@ -276,7 +276,7 @@ Backpack.Active = true
|
|||
tabLine.ZIndex = 2
|
||||
tabLine.Parent = Tabs
|
||||
|
||||
local InventoryButton = Instance.new("TextButton")
|
||||
local InventoryButton = Instance.new "TextButton"
|
||||
InventoryButton.RobloxLocked = true
|
||||
InventoryButton.Name = "InventoryButton"
|
||||
InventoryButton.Size = UDim2.new(0, 60, 0, 30)
|
||||
|
|
@ -294,7 +294,7 @@ Backpack.Active = true
|
|||
InventoryButton.Parent = Tabs
|
||||
|
||||
if game.CoreGui.Version >= 8 then
|
||||
local WardrobeButton = Instance.new("TextButton")
|
||||
local WardrobeButton = Instance.new "TextButton"
|
||||
WardrobeButton.RobloxLocked = true
|
||||
WardrobeButton.Name = "WardrobeButton"
|
||||
WardrobeButton.Size = UDim2.new(0, 90, 0, 30)
|
||||
|
|
@ -311,7 +311,7 @@ Backpack.Active = true
|
|||
WardrobeButton.Parent = Tabs
|
||||
end
|
||||
|
||||
local closeButton = Instance.new("TextButton")
|
||||
local closeButton = Instance.new "TextButton"
|
||||
closeButton.RobloxLocked = true
|
||||
closeButton.Name = "CloseButton"
|
||||
closeButton.Font = Enum.Font.ArialBold
|
||||
|
|
@ -325,19 +325,19 @@ Backpack.Active = true
|
|||
closeButton.Modal = true
|
||||
|
||||
--closeButton child
|
||||
local XImage = Instance.new("ImageLabel")
|
||||
local XImage = Instance.new "ImageLabel"
|
||||
XImage.RobloxLocked = true
|
||||
XImage.Name = "XImage"
|
||||
game:GetService("ContentProvider"):Preload("http://www.roblox.com/asset/?id=75547445")
|
||||
game:GetService("ContentProvider"):Preload "http://www.roblox.com/asset/?id=75547445"
|
||||
XImage.Image = "http://www.roblox.com/asset/?id=75547445" --TODO: move to rbxasset
|
||||
XImage.BackgroundTransparency = 1
|
||||
XImage.Position = UDim2.new(-.25,-1,-.25,-1)
|
||||
XImage.Position = UDim2.new(-0.25, -1, -0.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")
|
||||
local SearchFrame = Instance.new "Frame"
|
||||
SearchFrame.RobloxLocked = true
|
||||
SearchFrame.Name = "SearchFrame"
|
||||
SearchFrame.BackgroundTransparency = 1
|
||||
|
|
@ -346,7 +346,7 @@ Backpack.Active = true
|
|||
SearchFrame.Parent = Backpack
|
||||
|
||||
-- SearchFrame Children
|
||||
local SearchButton = Instance.new("ImageButton")
|
||||
local SearchButton = Instance.new "ImageButton"
|
||||
SearchButton.RobloxLocked = true
|
||||
SearchButton.Name = "SearchButton"
|
||||
SearchButton.Size = UDim2.new(0, 25, 0, 25)
|
||||
|
|
@ -354,7 +354,7 @@ Backpack.Active = true
|
|||
SearchButton.Image = "rbxasset://textures/ui/SearchIcon.png"
|
||||
SearchButton.Parent = SearchFrame
|
||||
|
||||
local SearchBoxFrame = Instance.new("TextButton")
|
||||
local SearchBoxFrame = Instance.new "TextButton"
|
||||
SearchBoxFrame.RobloxLocked = true
|
||||
SearchBoxFrame.Position = UDim2.new(0, 25, 0, 0)
|
||||
SearchBoxFrame.Size = UDim2.new(1, -28, 0, 26)
|
||||
|
|
@ -364,7 +364,7 @@ Backpack.Active = true
|
|||
SearchBoxFrame.Parent = SearchFrame
|
||||
|
||||
-- SearchBoxFrame Children
|
||||
local SearchBox = Instance.new("TextBox")
|
||||
local SearchBox = Instance.new "TextBox"
|
||||
SearchBox.RobloxLocked = true
|
||||
SearchBox.Name = "SearchBox"
|
||||
SearchBox.BackgroundTransparency = 1
|
||||
|
|
@ -379,8 +379,7 @@ Backpack.Active = true
|
|||
SearchBox.Text = "Search..."
|
||||
SearchBox.Parent = SearchBoxFrame
|
||||
|
||||
|
||||
local ResetButton = Instance.new("TextButton")
|
||||
local ResetButton = Instance.new "TextButton"
|
||||
ResetButton.RobloxLocked = true
|
||||
ResetButton.Visible = false
|
||||
ResetButton.Name = "ResetButton"
|
||||
|
|
@ -395,7 +394,7 @@ Backpack.Active = true
|
|||
ResetButton.Parent = SearchFrame
|
||||
|
||||
------------------------------- GEAR -------------------------------------------------------
|
||||
local Gear = Instance.new("Frame")
|
||||
local Gear = Instance.new "Frame"
|
||||
Gear.Name = "Gear"
|
||||
Gear.RobloxLocked = true
|
||||
Gear.BackgroundTransparency = 1
|
||||
|
|
@ -404,7 +403,7 @@ Backpack.Active = true
|
|||
Gear.Parent = Backpack
|
||||
|
||||
-- Gear Children
|
||||
local AssetsList = Instance.new("Frame")
|
||||
local AssetsList = Instance.new "Frame"
|
||||
AssetsList.RobloxLocked = true
|
||||
AssetsList.Name = "AssetsList"
|
||||
AssetsList.BackgroundTransparency = 1
|
||||
|
|
@ -413,38 +412,36 @@ Backpack.Active = true
|
|||
AssetsList.Visible = false
|
||||
AssetsList.Parent = Gear
|
||||
|
||||
local GearGrid = Instance.new("Frame")
|
||||
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")
|
||||
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.Style = "Custom"
|
||||
GearButton.BackgroundTransparency = 1
|
||||
GearButton.Parent = GearGrid
|
||||
GearButton.BackgroundTransparency = 1.0
|
||||
|
||||
local slotBackground = Instance.new('ImageLabel')
|
||||
slotBackground.Name = 'Background'
|
||||
slotBackground.BackgroundTransparency = 1.0
|
||||
slotBackground.Image = 'http://www.roblox.com/asset/?id=97613075'
|
||||
local slotBackground = Instance.new "ImageLabel"
|
||||
slotBackground.Name = "Background"
|
||||
slotBackground.BackgroundTransparency = 1
|
||||
slotBackground.Image = "http://www.roblox.com/asset/?id=97613075"
|
||||
slotBackground.Size = UDim2.new(1, 0, 1, 0)
|
||||
slotBackground.Parent = GearButton
|
||||
|
||||
|
||||
-- GearButton Children
|
||||
local GearReference = Instance.new("ObjectValue")
|
||||
local GearReference = Instance.new "ObjectValue"
|
||||
GearReference.RobloxLocked = true
|
||||
GearReference.Name = "GearReference"
|
||||
GearReference.Parent = GearButton
|
||||
|
||||
local GreyOutButton = Instance.new("Frame")
|
||||
local GreyOutButton = Instance.new "Frame"
|
||||
GreyOutButton.RobloxLocked = true
|
||||
GreyOutButton.Name = "GreyOutButton"
|
||||
GreyOutButton.BackgroundTransparency = 0.5
|
||||
|
|
@ -454,7 +451,7 @@ Backpack.Active = true
|
|||
GreyOutButton.ZIndex = 3
|
||||
GreyOutButton.Parent = GearButton
|
||||
|
||||
local GearText = Instance.new("TextLabel")
|
||||
local GearText = Instance.new "TextLabel"
|
||||
GearText.RobloxLocked = true
|
||||
GearText.Name = "GearText"
|
||||
GearText.BackgroundTransparency = 1
|
||||
|
|
@ -468,7 +465,7 @@ Backpack.Active = true
|
|||
GearText.TextWrap = true
|
||||
GearText.Parent = GearButton
|
||||
|
||||
local GearGridScrollingArea = Instance.new("Frame")
|
||||
local GearGridScrollingArea = Instance.new "Frame"
|
||||
GearGridScrollingArea.RobloxLocked = true
|
||||
GearGridScrollingArea.Name = "GearGridScrollingArea"
|
||||
GearGridScrollingArea.Position = UDim2.new(1, -19, 0, 35)
|
||||
|
|
@ -476,7 +473,7 @@ Backpack.Active = true
|
|||
GearGridScrollingArea.BackgroundTransparency = 1
|
||||
GearGridScrollingArea.Parent = Gear
|
||||
|
||||
local GearLoadouts = Instance.new("Frame")
|
||||
local GearLoadouts = Instance.new "Frame"
|
||||
GearLoadouts.RobloxLocked = true
|
||||
GearLoadouts.Name = "GearLoadouts"
|
||||
GearLoadouts.BackgroundTransparency = 1
|
||||
|
|
@ -486,7 +483,7 @@ Backpack.Active = true
|
|||
GearLoadouts.Visible = false
|
||||
|
||||
-- GearLoadouts Children
|
||||
local GearLoadoutsHeader = Instance.new("Frame")
|
||||
local GearLoadoutsHeader = Instance.new "Frame"
|
||||
GearLoadoutsHeader.RobloxLocked = true
|
||||
GearLoadoutsHeader.Name = "GearLoadoutsHeader"
|
||||
GearLoadoutsHeader.BackgroundColor3 = Color3.new(0, 0, 0)
|
||||
|
|
@ -496,7 +493,7 @@ Backpack.Active = true
|
|||
GearLoadoutsHeader.Parent = GearLoadouts
|
||||
|
||||
-- GearLoadoutsHeader Children
|
||||
local LoadoutsHeaderText = Instance.new("TextLabel")
|
||||
local LoadoutsHeaderText = Instance.new "TextLabel"
|
||||
LoadoutsHeaderText.RobloxLocked = true
|
||||
LoadoutsHeaderText.Name = "LoadoutsHeaderText"
|
||||
LoadoutsHeaderText.BackgroundTransparency = 1
|
||||
|
|
@ -514,7 +511,7 @@ Backpack.Active = true
|
|||
GearLoadoutsScrollingArea.Size = UDim2.new(0, 17, 0.85, -2)
|
||||
GearLoadoutsScrollingArea.Parent = GearLoadouts
|
||||
|
||||
local LoadoutsList = Instance.new("Frame")
|
||||
local LoadoutsList = Instance.new "Frame"
|
||||
LoadoutsList.RobloxLocked = true
|
||||
LoadoutsList.Name = "LoadoutsList"
|
||||
LoadoutsList.Position = UDim2.new(0, 0, 0.15, 2)
|
||||
|
|
@ -522,7 +519,7 @@ Backpack.Active = true
|
|||
LoadoutsList.Style = Enum.FrameStyle.RobloxSquare
|
||||
LoadoutsList.Parent = GearLoadouts
|
||||
|
||||
local GearPreview = Instance.new("Frame")
|
||||
local GearPreview = Instance.new "Frame"
|
||||
GearPreview.RobloxLocked = true
|
||||
GearPreview.Name = "GearPreview"
|
||||
GearPreview.Position = UDim2.new(0.7, 23, 0, 0)
|
||||
|
|
@ -532,7 +529,7 @@ Backpack.Active = true
|
|||
GearPreview.Parent = Gear
|
||||
|
||||
-- GearPreview Children
|
||||
local GearStats = Instance.new("Frame")
|
||||
local GearStats = Instance.new "Frame"
|
||||
GearStats.RobloxLocked = true
|
||||
GearStats.Name = "GearStats"
|
||||
GearStats.BackgroundTransparency = 1
|
||||
|
|
@ -542,7 +539,7 @@ Backpack.Active = true
|
|||
GearStats.Parent = GearPreview
|
||||
|
||||
-- GearStats Children
|
||||
local GearName = Instance.new("TextLabel")
|
||||
local GearName = Instance.new "TextLabel"
|
||||
GearName.RobloxLocked = true
|
||||
GearName.Name = "GearName"
|
||||
GearName.BackgroundTransparency = 1
|
||||
|
|
@ -556,7 +553,7 @@ Backpack.Active = true
|
|||
GearName.ZIndex = 9
|
||||
GearName.Parent = GearStats
|
||||
|
||||
local GearImage = Instance.new("ImageLabel")
|
||||
local GearImage = Instance.new "ImageLabel"
|
||||
GearImage.RobloxLocked = true
|
||||
GearImage.Name = "GearImage"
|
||||
GearImage.Image = ""
|
||||
|
|
@ -567,7 +564,7 @@ Backpack.Active = true
|
|||
GearImage.Parent = GearPreview
|
||||
|
||||
--GearImage Children
|
||||
local GearIcons = Instance.new("Frame")
|
||||
local GearIcons = Instance.new "Frame"
|
||||
GearIcons.BackgroundColor3 = Color3.new(0, 0, 0)
|
||||
GearIcons.BackgroundTransparency = 0.5
|
||||
GearIcons.BorderSizePixel = 0
|
||||
|
|
@ -580,7 +577,7 @@ Backpack.Active = true
|
|||
GearIcons.Parent = GearImage
|
||||
|
||||
-- GearIcons Children
|
||||
local GenreImage = Instance.new("ImageLabel")
|
||||
local GenreImage = Instance.new "ImageLabel"
|
||||
GenreImage.RobloxLocked = true
|
||||
GenreImage.Name = "GenreImage"
|
||||
GenreImage.BackgroundColor3 = Color3.new(102 / 255, 153 / 255, 1)
|
||||
|
|
@ -618,7 +615,7 @@ Backpack.Active = true
|
|||
end
|
||||
|
||||
local function makeCharFrame(frameName, parent)
|
||||
local frame = Instance.new("Frame")
|
||||
local frame = Instance.new "Frame"
|
||||
frame.RobloxLocked = true
|
||||
frame.Size = UDim2.new(1, 0, 1, -70)
|
||||
frame.Position = UDim2.new(0, 0, 0, 20)
|
||||
|
|
@ -629,7 +626,7 @@ Backpack.Active = true
|
|||
return frame
|
||||
end
|
||||
local function makeZone(zoneName, image, size, position, parent)
|
||||
local zone = Instance.new("ImageLabel")
|
||||
local zone = Instance.new "ImageLabel"
|
||||
zone.RobloxLocked = true
|
||||
zone.Name = zoneName
|
||||
zone.Image = image
|
||||
|
|
@ -640,7 +637,7 @@ Backpack.Active = true
|
|||
return zone
|
||||
end
|
||||
local function makeStyledButton(buttonName, size, position, parent, buttonStyle)
|
||||
local button = Instance.new("ImageButton")
|
||||
local button = Instance.new "ImageButton"
|
||||
button.RobloxLocked = true
|
||||
button.Name = buttonName
|
||||
button.Size = size
|
||||
|
|
@ -655,7 +652,7 @@ Backpack.Active = true
|
|||
return button
|
||||
end
|
||||
local function makeTextLabel(TextLabelName, text, position, parent)
|
||||
local label = Instance.new("TextLabel")
|
||||
local label = Instance.new "TextLabel"
|
||||
label.RobloxLocked = true
|
||||
label.BackgroundTransparency = 1
|
||||
label.Size = UDim2.new(0, 32, 0, 14)
|
||||
|
|
@ -668,8 +665,7 @@ Backpack.Active = true
|
|||
label.Parent = parent
|
||||
end
|
||||
|
||||
|
||||
local Wardrobe = Instance.new("Frame")
|
||||
local Wardrobe = Instance.new "Frame"
|
||||
Wardrobe.Name = "Wardrobe"
|
||||
Wardrobe.RobloxLocked = true
|
||||
Wardrobe.BackgroundTransparency = 1
|
||||
|
|
@ -677,7 +673,7 @@ Backpack.Active = true
|
|||
Wardrobe.Size = UDim2.new(1, 0, 1, 0)
|
||||
Wardrobe.Parent = Backpack
|
||||
|
||||
local AssetList = Instance.new("Frame")
|
||||
local AssetList = Instance.new "Frame"
|
||||
AssetList.RobloxLocked = true
|
||||
AssetList.Name = "AssetList"
|
||||
AssetList.Position = UDim2.new(0, 4, 0, 5)
|
||||
|
|
@ -686,7 +682,7 @@ Backpack.Active = true
|
|||
AssetList.Visible = true
|
||||
AssetList.Parent = Wardrobe
|
||||
|
||||
local PreviewAssetFrame = Instance.new("Frame")
|
||||
local PreviewAssetFrame = Instance.new "Frame"
|
||||
PreviewAssetFrame.RobloxLocked = true
|
||||
PreviewAssetFrame.Name = "PreviewAssetFrame"
|
||||
PreviewAssetFrame.BackgroundTransparency = 1
|
||||
|
|
@ -694,7 +690,7 @@ Backpack.Active = true
|
|||
PreviewAssetFrame.Size = UDim2.new(0, 250, 0, 250)
|
||||
PreviewAssetFrame.Parent = Wardrobe
|
||||
|
||||
local PreviewAssetBacking = Instance.new("TextButton")
|
||||
local PreviewAssetBacking = Instance.new "TextButton"
|
||||
PreviewAssetBacking.RobloxLocked = true
|
||||
PreviewAssetBacking.Name = "PreviewAssetBacking"
|
||||
PreviewAssetBacking.Active = false
|
||||
|
|
@ -706,7 +702,7 @@ Backpack.Active = true
|
|||
PreviewAssetBacking.ZIndex = 9
|
||||
PreviewAssetBacking.Parent = PreviewAssetFrame
|
||||
|
||||
local PreviewAssetImage = Instance.new("ImageLabel")
|
||||
local PreviewAssetImage = Instance.new "ImageLabel"
|
||||
PreviewAssetImage.RobloxLocked = true
|
||||
PreviewAssetImage.Name = "PreviewAssetImage"
|
||||
PreviewAssetImage.BackgroundTransparency = 0.8
|
||||
|
|
@ -716,7 +712,7 @@ Backpack.Active = true
|
|||
PreviewAssetImage.ZIndex = 10
|
||||
PreviewAssetImage.Parent = PreviewAssetBacking
|
||||
|
||||
local AssetNameLabel = Instance.new("TextLabel")
|
||||
local AssetNameLabel = Instance.new "TextLabel"
|
||||
AssetNameLabel.Name = "AssetNameLabel"
|
||||
AssetNameLabel.RobloxLocked = true
|
||||
AssetNameLabel.BackgroundTransparency = 1
|
||||
|
|
@ -737,9 +733,7 @@ Backpack.Active = true
|
|||
AssetTypeLabel.Position = UDim2.new(0.5, 3, 1, -20)
|
||||
AssetTypeLabel.Parent = PreviewAssetBacking
|
||||
|
||||
|
||||
|
||||
local PreviewButton = Instance.new("TextButton")
|
||||
local PreviewButton = Instance.new "TextButton"
|
||||
PreviewButton.RobloxLocked = true
|
||||
PreviewButton.Name = "PreviewButton"
|
||||
PreviewButton.Text = "Rotate"
|
||||
|
|
@ -755,7 +749,7 @@ Backpack.Active = true
|
|||
PreviewButton.TextStrokeTransparency = 0
|
||||
PreviewButton.Parent = Wardrobe
|
||||
|
||||
local CharacterPane = Instance.new("Frame")
|
||||
local CharacterPane = Instance.new "Frame"
|
||||
CharacterPane.RobloxLocked = true
|
||||
CharacterPane.Name = "CharacterPane"
|
||||
CharacterPane.Position = UDim2.new(1, -220, 0, 32)
|
||||
|
|
@ -766,26 +760,68 @@ Backpack.Active = true
|
|||
|
||||
--CharacterPane Children
|
||||
local FaceFrame = makeCharFrame("FacesFrame", CharacterPane)
|
||||
game:GetService("ContentProvider"):Preload("http://www.roblox.com/asset/?id=75460621")
|
||||
makeZone("FaceZone","http://www.roblox.com/asset/?id=75460621",UDim2.new(0,157,0,137),UDim2.new(0.5,-78,0.5,-68),FaceFrame)
|
||||
game:GetService("ContentProvider"):Preload "http://www.roblox.com/asset/?id=75460621"
|
||||
makeZone(
|
||||
"FaceZone",
|
||||
"http://www.roblox.com/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.roblox.com/asset/?id=75460621",UDim2.new(0,157,0,137),UDim2.new(0.5,-78,0.5,-68),HeadFrame)
|
||||
makeZone(
|
||||
"FaceZone",
|
||||
"http://www.roblox.com/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.roblox.com/asset/?id=75457888")
|
||||
local HatsZone = makeZone("HatsZone","http://www.roblox.com/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)
|
||||
game:GetService("ContentProvider"):Preload "http://www.roblox.com/asset/?id=75457888"
|
||||
local HatsZone = makeZone(
|
||||
"HatsZone",
|
||||
"http://www.roblox.com/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.roblox.com/asset/?id=75457920")
|
||||
makeZone("PantsZone","http://www.roblox.com/asset/?id=75457920",UDim2.new(0,121,0,99),UDim2.new(0.5,-60,0.5,-100),PantsFrame)
|
||||
game:GetService("ContentProvider"):Preload "http://www.roblox.com/asset/?id=75457920"
|
||||
makeZone(
|
||||
"PantsZone",
|
||||
"http://www.roblox.com/asset/?id=75457920",
|
||||
UDim2.new(0, 121, 0, 99),
|
||||
UDim2.new(0.5, -60, 0.5, -100),
|
||||
PantsFrame
|
||||
)
|
||||
|
||||
local pantFrame = Instance.new("Frame")
|
||||
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)
|
||||
|
|
@ -799,7 +835,7 @@ Backpack.Active = true
|
|||
otherPantFrame.RobloxLocked = true
|
||||
otherPantFrame.Parent = PantsFrame
|
||||
|
||||
local CurrentPants = Instance.new("ImageButton")
|
||||
local CurrentPants = Instance.new "ImageButton"
|
||||
CurrentPants.RobloxLocked = true
|
||||
CurrentPants.BackgroundTransparency = 1
|
||||
CurrentPants.ZIndex = 2
|
||||
|
|
@ -809,40 +845,89 @@ Backpack.Active = true
|
|||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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.roblox.com/asset/?id=75460642")
|
||||
makeZone("TShirtZone","http://www.roblox.com/asset/?id=75460642",UDim2.new(0,121,0,154),UDim2.new(0.5,-60,0.5,-100),TShirtFrame)
|
||||
game:GetService("ContentProvider"):Preload "http://www.roblox.com/asset/?id=75460642"
|
||||
makeZone(
|
||||
"TShirtZone",
|
||||
"http://www.roblox.com/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.roblox.com/asset/?id=75460642",UDim2.new(0,121,0,154),UDim2.new(0.5,-60,0.5,-100),ShirtFrame)
|
||||
makeZone(
|
||||
"ShirtZone",
|
||||
"http://www.roblox.com/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.roblox.com/asset/?id=76049888")
|
||||
local ColorZone = makeZone("ColorZone","http://www.roblox.com/asset/?id=76049888", UDim2.new(0,120,0,150),UDim2.new(0.5,-60,0.5,-100),ColorFrame)
|
||||
game:GetService("ContentProvider"):Preload "http://www.roblox.com/asset/?id=76049888"
|
||||
local ColorZone = makeZone(
|
||||
"ColorZone",
|
||||
"http://www.roblox.com/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("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
|
||||
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")
|
||||
local CategoryLabel = Instance.new "TextLabel"
|
||||
CategoryLabel.RobloxLocked = true
|
||||
CategoryLabel.Name = "CategoryLabel"
|
||||
CategoryLabel.BackgroundTransparency = 1
|
||||
|
|
@ -856,7 +941,7 @@ Backpack.Active = true
|
|||
CategoryLabel.Parent = CharacterPane
|
||||
|
||||
--Save Button
|
||||
local SaveButton = Instance.new("TextButton")
|
||||
local SaveButton = Instance.new "TextButton"
|
||||
SaveButton.RobloxLocked = true
|
||||
SaveButton.Name = "SaveButton"
|
||||
SaveButton.Size = UDim2.new(0.6, 0, 0, 50)
|
||||
|
|
|
|||
461
53878057.lua
461
53878057.lua
|
|
@ -1,4 +1,6 @@
|
|||
if game.CoreGui.Version < 3 then return end -- peace out if we aren't using the right client
|
||||
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)
|
||||
|
|
@ -17,51 +19,54 @@ local currentLoadout = script.Parent
|
|||
local StaticTabName = "gear"
|
||||
local backpackEnabled = true
|
||||
|
||||
local robloxGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui")
|
||||
local robloxGui = game:GetService("CoreGui"):FindFirstChild "RobloxGui"
|
||||
assert(robloxGui)
|
||||
local controlFrame = waitForChild(robloxGui, 'ControlFrame')
|
||||
local backpackButton = waitForChild(controlFrame, 'BackpackButton')
|
||||
local backpack = waitForChild(robloxGui, 'Backpack')
|
||||
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')
|
||||
waitForChild(currentLoadout, "Background")
|
||||
local clBackground = currentLoadout.Background
|
||||
|
||||
local function IsTouchDevice()
|
||||
local touchEnabled = false
|
||||
pcall(function() touchEnabled = Game:GetService('UserInputService').TouchEnabled end)
|
||||
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']
|
||||
waitForChild(pGui, "HealthGUI")
|
||||
waitForChild(pGui["HealthGUI"], "tray")
|
||||
local tray = pGui["HealthGUI"]["tray"]
|
||||
tray.Position = UDim2.new(0.5, -85, 1, -26)
|
||||
end
|
||||
|
||||
local function setHealthBarVisible(pGui, visible)
|
||||
waitForChild(pGui, 'HealthGUI')
|
||||
waitForChild(pGui['HealthGUI'], 'tray')
|
||||
local tray = pGui['HealthGUI']['tray']
|
||||
waitForChild(pGui, "HealthGUI")
|
||||
waitForChild(pGui["HealthGUI"], "tray")
|
||||
local tray = pGui["HealthGUI"]["tray"]
|
||||
tray.Visible = visible
|
||||
end
|
||||
|
||||
|
||||
--- Begin Locals
|
||||
waitForChild(game, "Players")
|
||||
waitForProperty(game.Players, "LocalPlayer")
|
||||
local player = game.Players.LocalPlayer
|
||||
|
||||
waitForChild(player, 'PlayerGui')
|
||||
waitForChild(player, "PlayerGui")
|
||||
Spawn(function()
|
||||
moveHealthBar(player.PlayerGui)
|
||||
end)
|
||||
|
||||
while player.Character == nil do wait(0.03) end
|
||||
local humanoid = waitForChild(player.Character, 'Humanoid')
|
||||
while player.Character == nil do
|
||||
wait(0.03)
|
||||
end
|
||||
local humanoid = waitForChild(player.Character, "Humanoid")
|
||||
humanoid.Died:connect(function()
|
||||
backpackButton.Visible = false
|
||||
end)
|
||||
|
|
@ -85,7 +90,6 @@ if robloxGui.AbsoluteSize.Y <= 320 then
|
|||
maxNumLoadoutItems = 4
|
||||
end
|
||||
|
||||
|
||||
local characterChildAddedCon = nil
|
||||
local backpackChildCon = nil
|
||||
|
||||
|
|
@ -109,11 +113,6 @@ end
|
|||
local backpackWasOpened = false
|
||||
--- End Locals
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- Begin Functions
|
||||
local function backpackIsOpen()
|
||||
if guiBackpack then
|
||||
|
|
@ -122,9 +121,10 @@ local function backpackIsOpen()
|
|||
return false
|
||||
end
|
||||
|
||||
|
||||
local function kill(prop, con, gear)
|
||||
if con then con:disconnect() end
|
||||
if con then
|
||||
con:disconnect()
|
||||
end
|
||||
if prop == true and gear then
|
||||
reorganizeLoadout(gear, false)
|
||||
end
|
||||
|
|
@ -172,7 +172,10 @@ function removeGear(gear)
|
|||
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
|
||||
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
|
||||
|
|
@ -185,17 +188,18 @@ function removeGear(gear)
|
|||
--[[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()
|
||||
delay(0, function()
|
||||
gear:remove()
|
||||
end)
|
||||
|
||||
Spawn(function()
|
||||
while backpackIsOpen() do wait(0.03) end
|
||||
waitForChild(player, 'Backpack')
|
||||
while backpackIsOpen() do
|
||||
wait(0.03)
|
||||
end
|
||||
waitForChild(player, "Backpack")
|
||||
local allEmpty = true
|
||||
for i = 1, #gearSlots do
|
||||
if gearSlots[i] ~= 'empty' then
|
||||
if gearSlots[i] ~= "empty" then
|
||||
allEmpty = false
|
||||
end
|
||||
end
|
||||
|
|
@ -222,7 +226,10 @@ function insertGear(gear, addToSlot)
|
|||
end
|
||||
end
|
||||
|
||||
if pos == 1 and gearSlots[1] ~= "empty" then gear:remove() return end -- we are currently full, can't add in
|
||||
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
|
||||
|
|
@ -249,7 +256,7 @@ function insertGear(gear, addToSlot)
|
|||
|
||||
gearSlots[pos] = gear
|
||||
if pos ~= maxNumLoadoutItems then
|
||||
if(type(tostring(pos)) == "string") then
|
||||
if type(tostring(pos)) == "string" then
|
||||
local posString = tostring(pos)
|
||||
gear.SlotNumber.Text = posString
|
||||
gear.SlotNumberDownShadow.Text = posString
|
||||
|
|
@ -263,22 +270,27 @@ function insertGear(gear, addToSlot)
|
|||
gear.Visible = true
|
||||
|
||||
local con = nil
|
||||
con = gear.Kill.Changed:connect(function(prop) kill(prop,con,gear) end)
|
||||
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
|
||||
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
|
||||
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
|
||||
|
|
@ -288,7 +300,9 @@ function checkToolAncestry(child,parent)
|
|||
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
|
||||
if child:IsA "Tool" or child:IsA "HopperBin" then
|
||||
gearSlots[i].Selected = false
|
||||
end
|
||||
return true
|
||||
else
|
||||
gearSlots[i].Kill.Value = true
|
||||
|
|
@ -303,9 +317,11 @@ 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
|
||||
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
|
||||
|
|
@ -313,11 +329,15 @@ function removeAllEquippedGear(physGear)
|
|||
end
|
||||
|
||||
function hopperBinSwitcher(numKey, physGear)
|
||||
if not physGear then return end
|
||||
if not physGear then
|
||||
return
|
||||
end
|
||||
|
||||
physGear:ToggleSelect()
|
||||
|
||||
if gearSlots[numKey] == "empty" then return end
|
||||
if gearSlots[numKey] == "empty" then
|
||||
return
|
||||
end
|
||||
|
||||
if not physGear.Active then
|
||||
gearSlots[numKey].Selected = false
|
||||
|
|
@ -329,27 +349,37 @@ function hopperBinSwitcher(numKey, physGear)
|
|||
end
|
||||
|
||||
function toolSwitcher(numKey)
|
||||
|
||||
if not gearSlots[numKey] then return end
|
||||
if not gearSlots[numKey] then
|
||||
return
|
||||
end
|
||||
local physGear = gearSlots[numKey].GearReference.Value
|
||||
if physGear == nil then return end
|
||||
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
|
||||
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
|
||||
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
|
||||
if physGear:IsA "HopperBin" then
|
||||
hopperBinSwitcher(numKey, physGear)
|
||||
else
|
||||
if physGear.Parent == player.Character then
|
||||
|
|
@ -370,7 +400,6 @@ function toolSwitcher(numKey)
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
function activateGear(num)
|
||||
local numKey = nil
|
||||
if num == "0" then
|
||||
|
|
@ -379,21 +408,30 @@ function activateGear(num)
|
|||
numKey = tonumber(num)
|
||||
end
|
||||
|
||||
if(numKey == nil) then return 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
|
||||
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] == "empty" then
|
||||
break
|
||||
end
|
||||
if gearSlots[i] ~= button then
|
||||
normalizeButton(gearSlots[i])
|
||||
end
|
||||
|
|
@ -403,51 +441,82 @@ enlargeButton = function(button)
|
|||
return
|
||||
end
|
||||
|
||||
if button:FindFirstChild('Highlight') then
|
||||
if button:FindFirstChild "Highlight" then
|
||||
button.Highlight.Visible = true
|
||||
end
|
||||
|
||||
if button:IsA("ImageButton") or button:IsA("TextButton") then
|
||||
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)
|
||||
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] == "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
|
||||
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 moveSpeed == nil or type(moveSpeed) ~= "number" then
|
||||
moveSpeed = guiTweenSpeed / 5
|
||||
end
|
||||
|
||||
if button:FindFirstChild('Highlight') then
|
||||
if button:FindFirstChild "Highlight" then
|
||||
button.Highlight.Visible = false
|
||||
end
|
||||
|
||||
if button:IsA("ImageButton") or button:IsA("TextButton") then
|
||||
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)
|
||||
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
|
||||
|
||||
|
|
@ -469,12 +538,15 @@ end
|
|||
function swapGear(gearClone, toFrame)
|
||||
local toFrameChildren = toFrame:GetChildren()
|
||||
if #toFrameChildren == 1 then
|
||||
if toFrameChildren[1]:FindFirstChild("SlotNumber") 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
|
||||
if toSlot == 0 then
|
||||
toSlot = 10
|
||||
end
|
||||
if gearCloneSlot == 0 then
|
||||
gearCloneSlot = 10
|
||||
end
|
||||
|
||||
gearSlots[toSlot] = gearClone
|
||||
gearSlots[gearCloneSlot] = toFrameChildren[1]
|
||||
|
|
@ -489,14 +561,17 @@ function swapGear(gearClone,toFrame)
|
|||
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].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
|
||||
if slotNum == 0 then
|
||||
slotNum = 10
|
||||
end
|
||||
gearSlots[slotNum] = "empty" -- reset this gear slot
|
||||
|
||||
local subString = string.sub(toFrame.Name, 5)
|
||||
|
|
@ -505,7 +580,9 @@ function swapGear(gearClone,toFrame)
|
|||
gearClone.SlotNumberUpShadow.Text = subString
|
||||
|
||||
local toSlotNum = tonumber(gearClone.SlotNumber.Text)
|
||||
if toSlotNum == 0 then toSlotNum = 10 end
|
||||
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
|
||||
|
|
@ -519,7 +596,7 @@ function resolveDrag(gearClone,x,y)
|
|||
local frames = frame.Parent:GetChildren()
|
||||
|
||||
for i = 1, #frames do
|
||||
if frames[i]:IsA("Frame") then
|
||||
if frames[i]:IsA "Frame" then
|
||||
if pointInRectangle(mousePoint, frames[i].AbsolutePosition, frames[i].AbsoluteSize) then
|
||||
swapGear(gearClone, frames[i])
|
||||
return true
|
||||
|
|
@ -534,18 +611,22 @@ function resolveDrag(gearClone,x,y)
|
|||
reorganizeLoadout(gearClone, false)
|
||||
return false
|
||||
else
|
||||
if dragBeginPos then gearClone.Position = dragBeginPos end
|
||||
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] == "empty" then
|
||||
break
|
||||
end
|
||||
if gearSlots[i].GearReference.Value and gearSlots[i].GearReference.Value ~= dontEquipThis then
|
||||
if gearSlots[i].GearReference.Value:IsA("HopperBin") then
|
||||
if gearSlots[i].GearReference.Value:IsA "HopperBin" then
|
||||
gearSlots[i].GearReference.Value:Disable()
|
||||
elseif gearSlots[i].GearReference.Value:IsA("Tool") then
|
||||
elseif gearSlots[i].GearReference.Value:IsA "Tool" then
|
||||
gearSlots[i].GearReference.Value.Parent = game.Players.LocalPlayer.Backpack
|
||||
end
|
||||
gearSlots[i].Selected = false
|
||||
|
|
@ -554,7 +635,12 @@ function unequipAllItems(dontEquipThis)
|
|||
end
|
||||
|
||||
function showToolTip(button, tip)
|
||||
if button and button:FindFirstChild("ToolTipLabel") and button.ToolTipLabel:IsA("TextLabel") and not IsTouchDevice() then
|
||||
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)
|
||||
|
|
@ -564,7 +650,7 @@ function showToolTip(button, tip)
|
|||
end
|
||||
|
||||
function hideToolTip(button, tip)
|
||||
if button and button:FindFirstChild("ToolTipLabel") and button.ToolTipLabel:IsA("TextLabel") then
|
||||
if button and button:FindFirstChild "ToolTipLabel" and button.ToolTipLabel:IsA "TextLabel" then
|
||||
button.ToolTipLabel.Visible = false
|
||||
end
|
||||
end
|
||||
|
|
@ -573,9 +659,12 @@ local addingPlayerChild = function(child, equipped, addToSlot, inventoryGearButt
|
|||
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
|
||||
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
|
||||
|
|
@ -599,13 +688,21 @@ local addingPlayerChild = function(child, equipped, addToSlot, inventoryGearButt
|
|||
gearClone.GearReference.Value = child
|
||||
|
||||
gearClone.MouseEnter:connect(function()
|
||||
if gearClone.GearReference and gearClone.GearReference.Value["ToolTip"] and gearClone.GearReference.Value.ToolTip ~= "" then
|
||||
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
|
||||
if
|
||||
gearClone.GearReference
|
||||
and gearClone.GearReference.Value["ToolTip"]
|
||||
and gearClone.GearReference.Value.ToolTip ~= ""
|
||||
then
|
||||
hideToolTip(gearClone, gearClone.GearReference.Value.ToolTip)
|
||||
end
|
||||
end)
|
||||
|
|
@ -648,14 +745,25 @@ local addingPlayerChild = function(child, equipped, addToSlot, inventoryGearButt
|
|||
reorganizeLoadout(gearClone, true)
|
||||
end
|
||||
|
||||
if gearClone.Parent == nil then debounce = false return end -- couldn't fit in (hopper is full!)
|
||||
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
|
||||
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)
|
||||
|
|
@ -680,13 +788,13 @@ local addingPlayerChild = function(child, equipped, addToSlot, inventoryGearButt
|
|||
gearClone.ZIndex = 7
|
||||
local children = gearClone:GetChildren()
|
||||
for i = 1, #children do
|
||||
if children[i]:IsA("TextLabel") then
|
||||
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
|
||||
elseif children[i]:IsA "Frame" or children[i]:IsA "ImageLabel" then
|
||||
children[i].ZIndex = 7
|
||||
end
|
||||
end
|
||||
|
|
@ -699,13 +807,13 @@ local addingPlayerChild = function(child, equipped, addToSlot, inventoryGearButt
|
|||
end
|
||||
local children = gearClone:GetChildren()
|
||||
for i = 1, #children do
|
||||
if children[i]:IsA("TextLabel") then
|
||||
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
|
||||
elseif children[i]:IsA "Frame" or children[i]:IsA "ImageLabel" then
|
||||
children[i].ZIndex = 2
|
||||
end
|
||||
end
|
||||
|
|
@ -715,21 +823,39 @@ local addingPlayerChild = function(child, equipped, addToSlot, inventoryGearButt
|
|||
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
|
||||
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
|
||||
if childCon then
|
||||
childCon:disconnect()
|
||||
end
|
||||
if childChangeCon then
|
||||
childChangeCon:disconnect()
|
||||
end
|
||||
removeFromInventory(child)
|
||||
elseif parent == game.Players.LocalPlayer.Backpack then
|
||||
normalizeButton(gearClone)
|
||||
|
|
@ -742,7 +868,7 @@ local addingPlayerChild = function(child, equipped, addToSlot, inventoryGearButt
|
|||
gearClone.GearText.Text = child.Name
|
||||
end
|
||||
elseif prop == "Active" then
|
||||
if child and child:IsA("HopperBin") then
|
||||
if child and child:IsA "HopperBin" then
|
||||
if not child.Active then
|
||||
gearClone.Selected = false
|
||||
normalizeButton(gearClone)
|
||||
|
|
@ -756,9 +882,11 @@ local addingPlayerChild = function(child, equipped, addToSlot, inventoryGearButt
|
|||
debounce = false
|
||||
|
||||
Spawn(function()
|
||||
while backpackIsOpen() do wait(0.03) end
|
||||
while backpackIsOpen() do
|
||||
wait(0.03)
|
||||
end
|
||||
for i = 1, #gearSlots do
|
||||
if gearSlots[i] ~= 'empty' then
|
||||
if gearSlots[i] ~= "empty" then
|
||||
backpackButton.Position = UDim2.new(0.5, -60, 1, -108)
|
||||
if backpackEnabled then
|
||||
backpackButton.Visible = true
|
||||
|
|
@ -770,12 +898,18 @@ local addingPlayerChild = function(child, equipped, addToSlot, inventoryGearButt
|
|||
end
|
||||
|
||||
function addToInventory(child)
|
||||
if not child:IsA("Tool") or not child:IsA("HopperBin") then return end
|
||||
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
|
||||
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
|
||||
|
|
@ -799,14 +933,28 @@ local spreadOutGear = function()
|
|||
loadoutChildren = currentLoadout:GetChildren()
|
||||
|
||||
for i = 1, #loadoutChildren do
|
||||
if loadoutChildren[i]:IsA("Frame") then
|
||||
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 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)
|
||||
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)
|
||||
loadoutChildren[i]:TweenPosition(
|
||||
UDim2.new((slot - 1) / 10, 0, 0, 0),
|
||||
Enum.EasingDirection.Out,
|
||||
Enum.EasingStyle.Quad,
|
||||
0.25,
|
||||
true
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -818,7 +966,7 @@ local centerGear = function()
|
|||
local lastSlotAdd = nil
|
||||
|
||||
for i = 1, #loadoutChildren do
|
||||
if loadoutChildren[i]:IsA("Frame") then
|
||||
if loadoutChildren[i]:IsA "Frame" then
|
||||
if #loadoutChildren[i]:GetChildren() > 0 then
|
||||
if loadoutChildren[i].Name == "Slot0" then
|
||||
lastSlotAdd = loadoutChildren[i]
|
||||
|
|
@ -829,15 +977,29 @@ local centerGear = function()
|
|||
loadoutChildren[i].BackgroundTransparency = 1
|
||||
end
|
||||
end
|
||||
if lastSlotAdd then table.insert(gearButtons,lastSlotAdd) 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)
|
||||
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)
|
||||
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
|
||||
|
|
@ -856,7 +1018,10 @@ function readonlyLoadout()
|
|||
end
|
||||
|
||||
function setupBackpackListener()
|
||||
if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end
|
||||
if backpackChildCon then
|
||||
backpackChildCon:disconnect()
|
||||
backpackChildCon = nil
|
||||
end
|
||||
backpackChildCon = player.Backpack.ChildAdded:connect(function(child)
|
||||
if not firstInstanceOfLoadout then
|
||||
firstInstanceOfLoadout = true
|
||||
|
|
@ -911,11 +1076,6 @@ function coreGuiChanged(coreGuiType,enabled)
|
|||
end
|
||||
-- End Functions
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- Begin Script
|
||||
registerNumberKeys()
|
||||
|
||||
|
|
@ -951,7 +1111,7 @@ delay(2, function()
|
|||
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
|
||||
if type(slotNum) == "number" then
|
||||
cChildren[i].Position = UDim2.new(0, (slotNum - 1) * 60, 0, 0)
|
||||
end
|
||||
end
|
||||
|
|
@ -962,7 +1122,7 @@ delay(2, function()
|
|||
end)
|
||||
|
||||
player.ChildAdded:connect(function(child)
|
||||
if child:IsA('PlayerGui') then
|
||||
if child:IsA "PlayerGui" then
|
||||
moveHealthBar(child)
|
||||
end
|
||||
end)
|
||||
|
|
@ -971,13 +1131,21 @@ 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)
|
||||
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
|
||||
if humanoidDiedCon then
|
||||
humanoidDiedCon:disconnect()
|
||||
humanoidDiedCon = nil
|
||||
end
|
||||
deactivateLoadout()
|
||||
if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end
|
||||
if backpackChildCon then
|
||||
backpackChildCon:disconnect()
|
||||
backpackChildCon = nil
|
||||
end
|
||||
backpackWasOpened = false
|
||||
end)
|
||||
|
||||
|
|
@ -995,7 +1163,6 @@ player.CharacterAdded:connect(function()
|
|||
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)
|
||||
|
|
@ -1016,8 +1183,7 @@ player.CharacterAdded:connect(function()
|
|||
characterChildAddedCon = nil
|
||||
end
|
||||
|
||||
characterChildAddedCon =
|
||||
player.Character.ChildAdded:connect(function(child)
|
||||
characterChildAddedCon = player.Character.ChildAdded:connect(function(child)
|
||||
addingPlayerChild(child, true)
|
||||
end)
|
||||
|
||||
|
|
@ -1025,8 +1191,7 @@ player.CharacterAdded:connect(function()
|
|||
if backpack.Visible then
|
||||
backpackOpenEvent:Fire()
|
||||
end
|
||||
humanoidDiedCon =
|
||||
player.Character.Humanoid.Died:connect(function()
|
||||
humanoidDiedCon = player.Character.Humanoid.Died:connect(function()
|
||||
if backpackEnabled then
|
||||
backpackButton.Visible = false
|
||||
clBackground.Visible = false
|
||||
|
|
@ -1034,10 +1199,16 @@ player.CharacterAdded:connect(function()
|
|||
firstInstanceOfLoadout = false
|
||||
deactivateLoadout()
|
||||
|
||||
if humanoidDiedCon then humanoidDiedCon:disconnect() humanoidDiedCon = nil end
|
||||
if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end
|
||||
if humanoidDiedCon then
|
||||
humanoidDiedCon:disconnect()
|
||||
humanoidDiedCon = nil
|
||||
end
|
||||
if backpackChildCon then
|
||||
backpackChildCon:disconnect()
|
||||
backpackChildCon = nil
|
||||
end
|
||||
end)
|
||||
waitForChild(player, 'PlayerGui')
|
||||
waitForChild(player, "PlayerGui")
|
||||
moveHealthBar(player.PlayerGui)
|
||||
delay(2, function()
|
||||
--while true do
|
||||
|
|
@ -1046,7 +1217,7 @@ player.CharacterAdded:connect(function()
|
|||
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
|
||||
if type(slotNum) == "number" then
|
||||
cChildren[i].Position = UDim2.new(0, (slotNum - 1) * 60, 0, 0)
|
||||
end
|
||||
end
|
||||
|
|
@ -1062,7 +1233,9 @@ 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 pos == 0 then
|
||||
pos = 10
|
||||
end
|
||||
if gearSlots[pos] then
|
||||
reorganizeLoadout(gearSlots[pos], false)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
|
||||
432
60595411.lua
432
60595411.lua
|
|
@ -1,7 +1,5 @@
|
|||
local t = {}
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
|
@ -47,9 +45,8 @@ local ipairs = ipairs
|
|||
local assert = assert
|
||||
local Chipmunk = Chipmunk
|
||||
|
||||
|
||||
local StringBuilder = {
|
||||
buffer = {}
|
||||
buffer = {},
|
||||
}
|
||||
|
||||
function StringBuilder:New()
|
||||
|
|
@ -70,15 +67,15 @@ end
|
|||
|
||||
local JsonWriter = {
|
||||
backslashes = {
|
||||
['\b'] = "\\b",
|
||||
['\t'] = "\\t",
|
||||
['\n'] = "\\n",
|
||||
['\f'] = "\\f",
|
||||
['\r'] = "\\r",
|
||||
['"'] = "\\\"",
|
||||
['\\'] = "\\\\",
|
||||
['/'] = "\\/"
|
||||
}
|
||||
["\b"] = "\\b",
|
||||
["\t"] = "\\t",
|
||||
["\n"] = "\\n",
|
||||
["\f"] = "\\f",
|
||||
["\r"] = "\\r",
|
||||
['"'] = '\\"',
|
||||
["\\"] = "\\\\",
|
||||
["/"] = "\\/",
|
||||
},
|
||||
}
|
||||
|
||||
function JsonWriter:New()
|
||||
|
|
@ -119,7 +116,7 @@ function JsonWriter:Write(o)
|
|||
end
|
||||
|
||||
function JsonWriter:WriteNil()
|
||||
self:Append("null")
|
||||
self:Append "null"
|
||||
end
|
||||
|
||||
function JsonWriter:WriteString(o)
|
||||
|
|
@ -127,13 +124,15 @@ function JsonWriter:WriteString(o)
|
|||
end
|
||||
|
||||
function JsonWriter:ParseString(s)
|
||||
self:Append('"')
|
||||
self:Append(string.gsub(s, "[%z%c\\\"/]", function(n)
|
||||
self:Append '"'
|
||||
self:Append(string.gsub(s, '[%z%c\\"/]', function(n)
|
||||
local c = self.backslashes[n]
|
||||
if c then return c end
|
||||
if c then
|
||||
return c
|
||||
end
|
||||
return string.format("\\u%.4X", string.byte(n))
|
||||
end))
|
||||
self:Append('"')
|
||||
self:Append '"'
|
||||
end
|
||||
|
||||
function JsonWriter:IsArray(t)
|
||||
|
|
@ -148,12 +147,12 @@ function JsonWriter:IsArray(t)
|
|||
end
|
||||
for k, v in pairs(t) do
|
||||
if not isindex(k) then
|
||||
return false, '{', '}'
|
||||
return false, "{", "}"
|
||||
else
|
||||
count = math.max(count, k)
|
||||
end
|
||||
end
|
||||
return true, '[', ']', count
|
||||
return true, "[", "]", count
|
||||
end
|
||||
|
||||
function JsonWriter:WriteTable(t)
|
||||
|
|
@ -163,18 +162,18 @@ function JsonWriter:WriteTable(t)
|
|||
for i = 1, n do
|
||||
self:Write(t[i])
|
||||
if i < n then
|
||||
self:Append(',')
|
||||
self:Append ","
|
||||
end
|
||||
end
|
||||
else
|
||||
local first = true;
|
||||
local first = true
|
||||
for k, v in pairs(t) do
|
||||
if not first then
|
||||
self:Append(',')
|
||||
self:Append ","
|
||||
end
|
||||
first = false;
|
||||
first = false
|
||||
self:ParseString(k)
|
||||
self:Append(':')
|
||||
self:Append ":"
|
||||
self:Write(v)
|
||||
end
|
||||
end
|
||||
|
|
@ -182,9 +181,7 @@ function JsonWriter:WriteTable(t)
|
|||
end
|
||||
|
||||
function JsonWriter:WriteError(o)
|
||||
error(string.format(
|
||||
"Encoding of %s unsupported",
|
||||
tostring(o)))
|
||||
error(string.format("Encoding of %s unsupported", tostring(o)))
|
||||
end
|
||||
|
||||
function JsonWriter:WriteFunction(o)
|
||||
|
|
@ -197,7 +194,7 @@ end
|
|||
|
||||
local StringReader = {
|
||||
s = "",
|
||||
i = 0
|
||||
i = 0,
|
||||
}
|
||||
|
||||
function StringReader:New(s)
|
||||
|
|
@ -230,12 +227,12 @@ end
|
|||
|
||||
local JsonReader = {
|
||||
escapes = {
|
||||
['t'] = '\t',
|
||||
['n'] = '\n',
|
||||
['f'] = '\f',
|
||||
['r'] = '\r',
|
||||
['b'] = '\b',
|
||||
}
|
||||
["t"] = "\t",
|
||||
["n"] = "\n",
|
||||
["f"] = "\f",
|
||||
["r"] = "\r",
|
||||
["b"] = "\b",
|
||||
},
|
||||
}
|
||||
|
||||
function JsonReader:New(s)
|
||||
|
|
@ -243,31 +240,29 @@ function JsonReader:New(s)
|
|||
o.reader = StringReader:New(s)
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o;
|
||||
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
|
||||
error(string.format("Nil string: '%s'", self:All()))
|
||||
elseif peek == "{" then
|
||||
return self:ReadObject()
|
||||
elseif peek == '[' then
|
||||
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
|
||||
elseif peek == "t" then
|
||||
return self:ReadTrue()
|
||||
elseif peek == 'f' then
|
||||
elseif peek == "f" then
|
||||
return self:ReadFalse()
|
||||
elseif peek == 'n' then
|
||||
elseif peek == "n" then
|
||||
return self:ReadNull()
|
||||
elseif peek == '/' then
|
||||
elseif peek == "/" then
|
||||
self:ReadComment()
|
||||
return self:Read()
|
||||
else
|
||||
|
|
@ -276,27 +271,24 @@ function JsonReader:Read()
|
|||
end
|
||||
|
||||
function JsonReader:ReadTrue()
|
||||
self:TestReservedWord{'t','r','u','e'}
|
||||
self:TestReservedWord { "t", "r", "u", "e" }
|
||||
return true
|
||||
end
|
||||
|
||||
function JsonReader:ReadFalse()
|
||||
self:TestReservedWord{'f','a','l','s','e'}
|
||||
self:TestReservedWord { "f", "a", "l", "s", "e" }
|
||||
return false
|
||||
end
|
||||
|
||||
function JsonReader:ReadNull()
|
||||
self:TestReservedWord{'n','u','l','l'}
|
||||
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()))
|
||||
error(string.format("Error reading '%s': %s", table.concat(t), self:All()))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -304,17 +296,13 @@ end
|
|||
function JsonReader:ReadNumber()
|
||||
local result = self:Next()
|
||||
local peek = self:Peek()
|
||||
while peek ~= nil and string.find(
|
||||
peek,
|
||||
"[%+%-%d%.eE]") do
|
||||
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))
|
||||
error(string.format("Invalid number: '%s'", result))
|
||||
else
|
||||
return result
|
||||
end
|
||||
|
|
@ -325,7 +313,7 @@ function JsonReader:ReadString()
|
|||
assert(self:Next() == '"')
|
||||
while self:Peek() ~= '"' do
|
||||
local ch = self:Next()
|
||||
if ch == '\\' then
|
||||
if ch == "\\" then
|
||||
ch = self:Next()
|
||||
if self.escapes[ch] then
|
||||
ch = self.escapes[ch]
|
||||
|
|
@ -337,23 +325,18 @@ function JsonReader:ReadString()
|
|||
local fromunicode = function(m)
|
||||
return string.char(tonumber(m, 16))
|
||||
end
|
||||
return string.gsub(
|
||||
result,
|
||||
"u%x%x(%x%x)",
|
||||
fromunicode)
|
||||
return string.gsub(result, "u%x%x(%x%x)", fromunicode)
|
||||
end
|
||||
|
||||
function JsonReader:ReadComment()
|
||||
assert(self:Next() == '/')
|
||||
assert(self:Next() == "/")
|
||||
local second = self:Next()
|
||||
if second == '/' then
|
||||
if second == "/" then
|
||||
self:ReadSingleLineComment()
|
||||
elseif second == '*' then
|
||||
elseif second == "*" then
|
||||
self:ReadBlockComment()
|
||||
else
|
||||
error(string.format(
|
||||
"Invalid comment: %s",
|
||||
self:All()))
|
||||
error(string.format("Invalid comment: %s", self:All()))
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -361,15 +344,11 @@ function JsonReader:ReadBlockComment()
|
|||
local done = false
|
||||
while not done do
|
||||
local ch = self:Next()
|
||||
if ch == '*' and self:Peek() == '/' then
|
||||
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()))
|
||||
if not done and ch == "/" and self:Peek() == "*" then
|
||||
error(string.format("Invalid comment: %s, '/*' illegal.", self:All()))
|
||||
end
|
||||
end
|
||||
self:Next()
|
||||
|
|
@ -377,74 +356,64 @@ end
|
|||
|
||||
function JsonReader:ReadSingleLineComment()
|
||||
local ch = self:Next()
|
||||
while ch ~= '\r' and ch ~= '\n' do
|
||||
while ch ~= "\r" and ch ~= "\n" do
|
||||
ch = self:Next()
|
||||
end
|
||||
end
|
||||
|
||||
function JsonReader:ReadArray()
|
||||
local result = {}
|
||||
assert(self:Next() == '[')
|
||||
assert(self:Next() == "[")
|
||||
local done = false
|
||||
if self:Peek() == ']' then
|
||||
done = true;
|
||||
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
|
||||
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))
|
||||
if ch ~= "," then
|
||||
error(string.format("Invalid array: '%s' due to: '%s'", self:All(), ch))
|
||||
end
|
||||
end
|
||||
end
|
||||
assert(']' == self:Next())
|
||||
assert("]" == self:Next())
|
||||
return result
|
||||
end
|
||||
|
||||
function JsonReader:ReadObject()
|
||||
local result = {}
|
||||
assert(self:Next() == '{')
|
||||
assert(self:Next() == "{")
|
||||
local done = false
|
||||
if self:Peek() == '}' then
|
||||
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))
|
||||
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))
|
||||
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
|
||||
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))
|
||||
if ch ~= "," then
|
||||
error(string.format("Invalid array: '%s' near: '%s'", self:All(), ch))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -455,7 +424,7 @@ end
|
|||
function JsonReader:SkipWhiteSpace()
|
||||
local p = self:Peek()
|
||||
while p ~= nil and string.find(p, "[%s/]") do
|
||||
if p == '/' then
|
||||
if p == "/" then
|
||||
self:ReadComment()
|
||||
else
|
||||
self:Next()
|
||||
|
|
@ -492,12 +461,11 @@ function Null()
|
|||
end
|
||||
-------------------- End JSON Parser ------------------------
|
||||
|
||||
|
||||
t.DecodeJSON = function(jsonString)
|
||||
if type(jsonString) == "string" then
|
||||
return Decode(jsonString)
|
||||
end
|
||||
print("RbxUtil.DecodeJSON expects string argument!")
|
||||
print "RbxUtil.DecodeJSON expects string argument!"
|
||||
return nil
|
||||
end
|
||||
|
||||
|
|
@ -505,13 +473,6 @@ t.EncodeJSON = function(jsonTable)
|
|||
return Encode(jsonTable)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
|
@ -527,8 +488,10 @@ t.MakeWedge = function(x, y, z, defaultmaterial)
|
|||
end
|
||||
|
||||
t.SelectTerrainRegion = function(regionToSelect, color, selectEmptyCells, selectionParent)
|
||||
local terrain = game.Workspace:FindFirstChild("Terrain")
|
||||
if not terrain then return end
|
||||
local terrain = game.Workspace:FindFirstChild "Terrain"
|
||||
if not terrain then
|
||||
return
|
||||
end
|
||||
|
||||
assert(regionToSelect)
|
||||
assert(color)
|
||||
|
|
@ -547,7 +510,7 @@ t.SelectTerrainRegion = function(regionToSelect, color, selectEmptyCells, select
|
|||
local emptyMaterial = Enum.CellMaterial.Empty
|
||||
|
||||
-- container for all adornments, passed back to user
|
||||
local selectionContainer = Instance.new("Model")
|
||||
local selectionContainer = Instance.new "Model"
|
||||
selectionContainer.Name = "SelectionContainer"
|
||||
selectionContainer.Archivable = false
|
||||
if selectionParent then
|
||||
|
|
@ -563,7 +526,7 @@ t.SelectTerrainRegion = function(regionToSelect, color, selectEmptyCells, select
|
|||
local adornments = {} -- contains all adornments
|
||||
local reusableAdorns = {}
|
||||
|
||||
local selectionPart = Instance.new("Part")
|
||||
local selectionPart = Instance.new "Part"
|
||||
selectionPart.Name = "SelectionPart"
|
||||
selectionPart.Transparency = 1
|
||||
selectionPart.Anchored = true
|
||||
|
|
@ -572,7 +535,7 @@ t.SelectTerrainRegion = function(regionToSelect, color, selectEmptyCells, select
|
|||
selectionPart.FormFactor = Enum.FormFactor.Custom
|
||||
selectionPart.Size = Vector3.new(4.2, 4.2, 4.2)
|
||||
|
||||
local selectionBox = Instance.new("SelectionBox")
|
||||
local selectionBox = Instance.new "SelectionBox"
|
||||
|
||||
-- srs translation from region3 to region3int16
|
||||
function Region3ToRegion3int16(region3)
|
||||
|
|
@ -624,7 +587,6 @@ t.SelectTerrainRegion = function(regionToSelect, color, selectEmptyCells, select
|
|||
-- 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 })
|
||||
|
|
@ -676,7 +638,11 @@ t.SelectTerrainRegion = function(regionToSelect, color, selectEmptyCells, select
|
|||
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}
|
||||
local adornTable = {
|
||||
SelectionPart = selectionPart,
|
||||
SelectionBox = selectionBox,
|
||||
KeepAlive = currentKeepAliveTag,
|
||||
}
|
||||
adornments[cellPos] = adornTable
|
||||
end
|
||||
end
|
||||
|
|
@ -686,7 +652,6 @@ t.SelectTerrainRegion = function(regionToSelect, color, selectEmptyCells, select
|
|||
cleanUpAdornments()
|
||||
end
|
||||
|
||||
|
||||
------------------------------------- setup code ------------------------------
|
||||
lastRegion = regionToSelect
|
||||
|
||||
|
|
@ -699,8 +664,7 @@ t.SelectTerrainRegion = function(regionToSelect, color, selectEmptyCells, select
|
|||
adornments.SelectionPart = selectionPart
|
||||
adornments.SelectionBox = selectionBox
|
||||
|
||||
updateSelection =
|
||||
function (newRegion, color)
|
||||
updateSelection = function(newRegion, color)
|
||||
if newRegion and newRegion ~= lastRegion then
|
||||
lastRegion = newRegion
|
||||
selectionPart.Size = newRegion.Size
|
||||
|
|
@ -712,19 +676,19 @@ t.SelectTerrainRegion = function(regionToSelect, color, selectEmptyCells, select
|
|||
end
|
||||
else -- use individual cell adorns to represent the area selected
|
||||
adornFullCellsInRegion(regionToSelect, color)
|
||||
updateSelection =
|
||||
function (newRegion, 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
|
||||
if selectionContainer then
|
||||
selectionContainer:Destroy()
|
||||
end
|
||||
adornments = nil
|
||||
end
|
||||
|
||||
|
|
@ -733,12 +697,6 @@ end
|
|||
|
||||
-----------------------------Terrain Utilities End-----------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
|
@ -777,13 +735,15 @@ Method :wait()
|
|||
function t.CreateSignal()
|
||||
local this = {}
|
||||
|
||||
local mBindableEvent = Instance.new('BindableEvent')
|
||||
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
|
||||
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)
|
||||
|
|
@ -796,18 +756,24 @@ function t.CreateSignal()
|
|||
return pubCn
|
||||
end
|
||||
function this:disconnect()
|
||||
if self ~= this then error("disconnect must be called with `:`, not `.`", 2) end
|
||||
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
|
||||
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
|
||||
if self ~= this then
|
||||
error("fire must be called with `:`, not `.`", 2)
|
||||
end
|
||||
mBindableEvent:Fire(...)
|
||||
end
|
||||
|
||||
|
|
@ -816,9 +782,6 @@ end
|
|||
|
||||
------------------------------------------------- Sigal class End ------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
|
@ -913,7 +876,7 @@ Note: It is also perfectly legal to save a reference to the function returned by
|
|||
--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
|
||||
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
|
||||
|
|
@ -932,39 +895,42 @@ local function Create_PrivImpl(objectType)
|
|||
|
||||
for k, v in pairs(dat) do
|
||||
--add property
|
||||
if type(k) == 'string' then
|
||||
if type(k) == "string" then
|
||||
obj[k] = v
|
||||
|
||||
|
||||
--add child
|
||||
elseif type(k) == 'number' then
|
||||
if type(v) ~= 'userdata' then
|
||||
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)
|
||||
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)
|
||||
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
|
||||
|
|
@ -981,7 +947,11 @@ local function Create_PrivImpl(objectType)
|
|||
end
|
||||
|
||||
--now, create the functor:
|
||||
t.Create = setmetatable({}, {__call = function(tb, ...) return Create_PrivImpl(...) end})
|
||||
t.Create = setmetatable({}, {
|
||||
__call = function(_, ...)
|
||||
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.
|
||||
|
|
@ -991,9 +961,6 @@ end
|
|||
|
||||
-------------------------------------------------Create function End----------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
|
@ -1002,114 +969,87 @@ end
|
|||
------------------------------------------------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
t.Help =
|
||||
function(funcNameOrFunc)
|
||||
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"
|
||||
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"
|
||||
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 "
|
||||
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"
|
||||
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')."
|
||||
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|."
|
||||
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."
|
||||
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."
|
||||
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."
|
||||
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."
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@
|
|||
-- access to all of the libraries (otherwise only local scripts do)
|
||||
|
||||
local deepakTestingPlace = 3569749
|
||||
local sc = game:GetService("ScriptContext")
|
||||
local sc = game:GetService "ScriptContext"
|
||||
local tries = 0
|
||||
|
||||
while not sc and tries < 3 do
|
||||
tries = tries + 1
|
||||
sc = game:GetService("ScriptContext")
|
||||
sc = game:GetService "ScriptContext"
|
||||
wait(0.2)
|
||||
end
|
||||
|
||||
|
|
@ -22,5 +22,5 @@ if sc then
|
|||
sc:RegisterLibrary("Libraries/RbxStamper", "73157242")
|
||||
sc:LibraryRegistrationComplete()
|
||||
else
|
||||
print("failed to find script context, libraries did not load")
|
||||
print "failed to find script context, libraries did not load"
|
||||
end
|
||||
|
|
|
|||
1011
73157242.lua
1011
73157242.lua
File diff suppressed because it is too large
Load Diff
265
89449008.lua
265
89449008.lua
|
|
@ -3,7 +3,7 @@ local function waitForChild(instance, name)
|
|||
assert(instance)
|
||||
assert(name)
|
||||
while not instance:FindFirstChild(name) do
|
||||
print('Waiting for ...', instance, name)
|
||||
print("Waiting for ...", instance, name)
|
||||
instance.ChildAdded:wait()
|
||||
end
|
||||
return instance:FindFirstChild(name)
|
||||
|
|
@ -18,23 +18,26 @@ end
|
|||
|
||||
local function IsTouchDevice()
|
||||
local touchEnabled = false
|
||||
pcall(function() touchEnabled = Game:GetService('UserInputService').TouchEnabled end)
|
||||
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
|
||||
local RbxGui, _ = 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 = {}
|
||||
|
|
@ -80,7 +83,7 @@ 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")
|
||||
local scrollBar = Instance.new "Frame"
|
||||
scrollBar.Name = "ScrollBar"
|
||||
scrollBar.BackgroundTransparency = 0.9
|
||||
scrollBar.BackgroundColor3 = Color3.new(1, 1, 1)
|
||||
|
|
@ -100,7 +103,7 @@ 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")
|
||||
local LoadoutButton = Instance.new "TextButton"
|
||||
LoadoutButton.RobloxLocked = true
|
||||
LoadoutButton.Name = "LoadoutButton"
|
||||
LoadoutButton.Font = Enum.Font.ArialBold
|
||||
|
|
@ -124,7 +127,7 @@ local LoadoutButtonFour = LoadoutButton:clone()
|
|||
LoadoutButtonFour.Text = "Loadout #4"
|
||||
LoadoutButtonFour.Parent = scrollFrameLoadout
|
||||
|
||||
local scrollBarLoadout = Instance.new("Frame")
|
||||
local scrollBarLoadout = Instance.new "Frame"
|
||||
scrollBarLoadout.Name = "ScrollBarLoadout"
|
||||
scrollBarLoadout.BackgroundTransparency = 0.9
|
||||
scrollBarLoadout.BackgroundColor3 = Color3.new(1, 1, 1)
|
||||
|
|
@ -138,7 +141,6 @@ 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
|
||||
|
|
@ -153,7 +155,7 @@ function robloxLock(instance)
|
|||
instance.RobloxLocked = true
|
||||
children = instance:GetChildren()
|
||||
if children then
|
||||
for i, child in ipairs(children) do
|
||||
for _, child in ipairs(children) do
|
||||
robloxLock(child)
|
||||
end
|
||||
end
|
||||
|
|
@ -175,15 +177,19 @@ function resize()
|
|||
end
|
||||
|
||||
function addToGrid(child)
|
||||
if not child:IsA("Tool") then
|
||||
if not child:IsA("HopperBin") then
|
||||
if not child:IsA "Tool" then
|
||||
if not child:IsA "HopperBin" then
|
||||
return
|
||||
end
|
||||
end
|
||||
if child:FindFirstChild("RobloxBuildTool") then return 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
|
||||
if v == child then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(backpackItems, child)
|
||||
|
|
@ -209,14 +215,22 @@ function addToGrid(child)
|
|||
|
||||
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
|
||||
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
|
||||
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
|
||||
|
|
@ -235,7 +249,7 @@ function addToGrid(child)
|
|||
end
|
||||
|
||||
function buttonClick(button)
|
||||
if button:FindFirstChild("UnequipContextMenu") and not button.Active then
|
||||
if button:FindFirstChild "UnequipContextMenu" and not button.Active then
|
||||
button.UnequipContextMenu.Visible = true
|
||||
browsingMenu = true
|
||||
end
|
||||
|
|
@ -253,24 +267,34 @@ 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
|
||||
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 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
|
||||
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
|
||||
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
|
||||
|
|
@ -283,7 +307,7 @@ end
|
|||
|
||||
function resizeGrid()
|
||||
for k, v in pairs(backpackItems) do
|
||||
if not v:FindFirstChild("RobloxBuildTool") then
|
||||
if not v:FindFirstChild "RobloxBuildTool" then
|
||||
if not buttons[v] then
|
||||
local buttonClone = gearButton:clone()
|
||||
buttonClone.Parent = grid.ScrollingFrame
|
||||
|
|
@ -297,29 +321,33 @@ function resizeGrid()
|
|||
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
|
||||
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
|
||||
waitForChild(buttonClone, "Background")
|
||||
buttonClone["Background"].ZIndex = 1
|
||||
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:TweenPosition(
|
||||
beginPos,
|
||||
Enum.EasingDirection.Out,
|
||||
Enum.EasingStyle.Quad,
|
||||
0.5,
|
||||
true
|
||||
)
|
||||
buttonClone.Draggable = false
|
||||
delay(0.5, function()
|
||||
buttonClone.Draggable = true
|
||||
|
|
@ -330,7 +358,9 @@ function resizeGrid()
|
|||
end
|
||||
end)
|
||||
local clickTime = tick()
|
||||
mouseEnterCons[buttonClone] = buttonClone.MouseEnter:connect(function() previewGear(buttonClone) end)
|
||||
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
|
||||
|
|
@ -351,11 +381,11 @@ function resizeGrid()
|
|||
end
|
||||
|
||||
function showPartialGrid(subset)
|
||||
for k,v in pairs(buttons) do
|
||||
for _, v in pairs(buttons) do
|
||||
v.Parent = nil
|
||||
end
|
||||
if subset then
|
||||
for k,v in pairs(subset) do
|
||||
for _, v in pairs(subset) do
|
||||
v.Parent = grid.ScrollingFrame
|
||||
end
|
||||
end
|
||||
|
|
@ -363,7 +393,7 @@ function showPartialGrid(subset)
|
|||
end
|
||||
|
||||
function showEntireGrid()
|
||||
for k,v in pairs(buttons) do
|
||||
for _, v in pairs(buttons) do
|
||||
v.Parent = grid.ScrollingFrame
|
||||
end
|
||||
recalculateScroll()
|
||||
|
|
@ -372,7 +402,7 @@ end
|
|||
function inLoadout(gear)
|
||||
local children = currentLoadout:GetChildren()
|
||||
for i = 1, #children do
|
||||
if children[i]:IsA("Frame") then
|
||||
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
|
||||
|
|
@ -385,16 +415,16 @@ function inLoadout(gear)
|
|||
end
|
||||
|
||||
function updateGridActive()
|
||||
for k,v in pairs(backpackItems) do
|
||||
for _, v in pairs(backpackItems) do
|
||||
if buttons[v] then
|
||||
local gear = nil
|
||||
local gearRef = buttons[v]:FindFirstChild("GearReference")
|
||||
local gearRef = buttons[v]:FindFirstChild "GearReference"
|
||||
|
||||
if gearRef then gear = gearRef.Value end
|
||||
if gearRef then
|
||||
gear = gearRef.Value
|
||||
end
|
||||
|
||||
if not gear then
|
||||
buttons[v].Active = false
|
||||
elseif inLoadout(gear) then
|
||||
if (not gear) or inLoadout(gear) then
|
||||
buttons[v].Active = false
|
||||
else
|
||||
buttons[v].Active = true
|
||||
|
|
@ -407,7 +437,7 @@ 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]:IsA "Frame" and #loadoutChildren[i]:GetChildren() > 0 then
|
||||
if loadoutChildren[i].Name == "Slot0" then
|
||||
lastSlotAdd = loadoutChildren[i]
|
||||
else
|
||||
|
|
@ -415,11 +445,19 @@ function centerGear(loadoutChildren)
|
|||
end
|
||||
end
|
||||
end
|
||||
if lastSlotAdd then table.insert(gearButtons,lastSlotAdd) 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)
|
||||
gearButtons[i]:TweenPosition(
|
||||
UDim2.new(startPos + ((i - 1) * 0.1), 0, 0, 0),
|
||||
Enum.EasingDirection.Out,
|
||||
Enum.EasingStyle.Quad,
|
||||
0.25,
|
||||
true
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -459,10 +497,12 @@ function backpackCloseHandler(currentTab)
|
|||
end
|
||||
|
||||
function loadoutCheck(child, selectState)
|
||||
if not child:IsA("ImageButton") then return end
|
||||
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 child:FindFirstChild "GearReference" and buttons[v]:FindFirstChild "GearReference" then
|
||||
if buttons[v].GearReference.Value == child.GearReference.Value then
|
||||
buttons[v].Active = selectState
|
||||
break
|
||||
|
|
@ -480,7 +520,7 @@ 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" or stuff[i]:IsA "HopperBin") and stuff[i] ~= physGear then
|
||||
stuff[i].Parent = playerBackpack
|
||||
end
|
||||
end
|
||||
|
|
@ -515,9 +555,10 @@ function swapGearSlot(slot,gearButton)
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
local UnequipGearMenuClick = function(element, menu)
|
||||
if type(element.Action) ~= "number" then return end
|
||||
if type(element.Action) ~= "number" then
|
||||
return
|
||||
end
|
||||
local num = element.Action
|
||||
if num == 1 then -- remove from loadout
|
||||
unequipGear(menu.Parent.GearReference.Value)
|
||||
|
|
@ -526,7 +567,7 @@ local UnequipGearMenuClick = function(element, menu)
|
|||
local loadoutChildren = currentLoadout:GetChildren()
|
||||
local slot = -1
|
||||
for i = 1, #loadoutChildren do
|
||||
if loadoutChildren[i]:IsA("Frame") then
|
||||
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
|
||||
|
|
@ -539,9 +580,12 @@ local UnequipGearMenuClick = function(element, menu)
|
|||
end
|
||||
|
||||
function setupCharacterConnections()
|
||||
|
||||
if backpackAddCon then backpackAddCon:disconnect() end
|
||||
backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end)
|
||||
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()
|
||||
|
|
@ -549,16 +593,18 @@ function setupCharacterConnections()
|
|||
addToGrid(backpackChildren[i])
|
||||
end
|
||||
|
||||
if characterChildAddedCon then characterChildAddedCon:disconnect() end
|
||||
characterChildAddedCon =
|
||||
game.Players.LocalPlayer.Character.ChildAdded:connect(function(child)
|
||||
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)
|
||||
if characterChildRemovedCon then
|
||||
characterChildRemovedCon:disconnect()
|
||||
end
|
||||
characterChildRemovedCon = game.Players.LocalPlayer.Character.ChildRemoved:connect(function(_)
|
||||
updateGridActive()
|
||||
end)
|
||||
|
||||
|
|
@ -567,9 +613,15 @@ function setupCharacterConnections()
|
|||
end
|
||||
|
||||
function removeCharacterConnections()
|
||||
if characterChildAddedCon then characterChildAddedCon:disconnect() end
|
||||
if characterChildRemovedCon then characterChildRemovedCon:disconnect() end
|
||||
if backpackAddCon then backpackAddCon:disconnect() end
|
||||
if characterChildAddedCon then
|
||||
characterChildAddedCon:disconnect()
|
||||
end
|
||||
if characterChildRemovedCon then
|
||||
characterChildRemovedCon:disconnect()
|
||||
end
|
||||
if backpackAddCon then
|
||||
backpackAddCon:disconnect()
|
||||
end
|
||||
end
|
||||
|
||||
function trim(s)
|
||||
|
|
@ -594,7 +646,9 @@ function filterGear(terms)
|
|||
return filteredGear
|
||||
end
|
||||
function splitByWhitespace(text)
|
||||
if type(text) ~= "string" then return nil end
|
||||
if type(text) ~= "string" then
|
||||
return nil
|
||||
end
|
||||
|
||||
local terms = {}
|
||||
for token in string.gmatch(text, "[^%s]+") do
|
||||
|
|
@ -605,7 +659,9 @@ function splitByWhitespace(text)
|
|||
return terms
|
||||
end
|
||||
function showSearchGear(searchTerms)
|
||||
if not backpack.Gear.Visible then return end -- currently not active tab
|
||||
if not backpack.Gear.Visible then
|
||||
return
|
||||
end -- currently not active tab
|
||||
|
||||
local searchTermTable = splitByWhitespace(searchTerms)
|
||||
if searchTermTable and (#searchTermTable > 0) then
|
||||
|
|
@ -639,7 +695,7 @@ function nukeBackpack()
|
|||
end
|
||||
|
||||
function getGearContextMenu()
|
||||
local gearContextMenu = Instance.new("Frame")
|
||||
local gearContextMenu = Instance.new "Frame"
|
||||
gearContextMenu.Active = true
|
||||
gearContextMenu.Name = "UnequipContextMenu"
|
||||
gearContextMenu.Size = UDim2.new(0, 115, 0, 70)
|
||||
|
|
@ -647,7 +703,7 @@ function getGearContextMenu()
|
|||
gearContextMenu.BackgroundTransparency = 1
|
||||
gearContextMenu.Visible = false
|
||||
|
||||
local gearContextMenuButton = Instance.new("TextButton")
|
||||
local gearContextMenuButton = Instance.new "TextButton"
|
||||
gearContextMenuButton.Name = "UnequipContextMenuButton"
|
||||
gearContextMenuButton.Text = ""
|
||||
gearContextMenuButton.Style = Enum.ButtonStyle.RobloxButtonDefault
|
||||
|
|
@ -673,7 +729,7 @@ function getGearContextMenu()
|
|||
for i, contextElement in ipairs(contextMenuElements) do
|
||||
local element = contextElement
|
||||
if element.Type == "Button" then
|
||||
local button = Instance.new("TextButton")
|
||||
local button = Instance.new "TextButton"
|
||||
button.Name = "UnequipContextButton" .. i
|
||||
button.BackgroundColor3 = Color3.new(0, 0, 0)
|
||||
button.BorderSizePixel = 0
|
||||
|
|
@ -688,10 +744,11 @@ function getGearContextMenu()
|
|||
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)
|
||||
pcall(function()
|
||||
element.DoIt(element, gearContextMenu)
|
||||
end)
|
||||
browsingMenu = false
|
||||
gearContextMenu.Visible = false
|
||||
clearHighlight(button)
|
||||
|
|
@ -714,12 +771,12 @@ function getGearContextMenu()
|
|||
contextElement.Button = button
|
||||
contextElement.Element = button
|
||||
elseif element.Type == "Label" then
|
||||
local frame = Instance.new("Frame")
|
||||
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")
|
||||
local label = Instance.new "TextLabel"
|
||||
label.Name = "Text1"
|
||||
label.BackgroundTransparency = 1
|
||||
label.BackgroundColor3 = Color3.new(1, 1, 1)
|
||||
|
|
@ -727,7 +784,7 @@ function getGearContextMenu()
|
|||
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.Position = UDim2.new(0, 0, 0, 0)
|
||||
label.Size = UDim2.new(0.5, 0, 1, 0)
|
||||
label.TextColor3 = Color3.new(1, 1, 1)
|
||||
label.ZIndex = 9
|
||||
|
|
@ -735,7 +792,7 @@ function getGearContextMenu()
|
|||
element.Label1 = label
|
||||
|
||||
if element.GetText2 then
|
||||
label = Instance.new("TextLabel")
|
||||
label = Instance.new "TextLabel"
|
||||
label.Name = "Text2"
|
||||
label.BackgroundTransparency = 1
|
||||
label.BackgroundColor3 = Color3.new(1, 1, 1)
|
||||
|
|
@ -775,7 +832,6 @@ function coreGuiChanged(coreGuiType,enabled)
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
local backpackChildren = player.Backpack:GetChildren()
|
||||
for i = 1, #backpackChildren do
|
||||
addToGrid(backpackChildren[i])
|
||||
|
|
@ -783,9 +839,10 @@ end
|
|||
|
||||
------------------------- Start Lifelong Connections -----------------------
|
||||
|
||||
|
||||
resizeEvent.Event:connect(function(absSize)
|
||||
if debounce then return end
|
||||
resizeEvent.Event:connect(function(_)
|
||||
if debounce then
|
||||
return
|
||||
end
|
||||
|
||||
debounce = true
|
||||
wait()
|
||||
|
|
@ -794,35 +851,49 @@ resizeEvent.Event:connect(function(absSize)
|
|||
debounce = false
|
||||
end)
|
||||
|
||||
currentLoadout.ChildAdded:connect(function(child) loadoutCheck(child, false) end)
|
||||
currentLoadout.ChildRemoved:connect(function(child) loadoutCheck(child, true) 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
|
||||
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
|
||||
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)
|
||||
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.CharacterAdded:connect(function()
|
||||
setupCharacterConnections()
|
||||
end)
|
||||
|
||||
player.ChildAdded:connect(function(child)
|
||||
if child:IsA("Backpack") then
|
||||
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)
|
||||
if backpackAddCon then
|
||||
backpackAddCon:disconnect()
|
||||
end
|
||||
backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child)
|
||||
addToGrid(child)
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
|
|
@ -834,7 +905,7 @@ end)
|
|||
|
||||
local loadoutChildren = currentLoadout:GetChildren()
|
||||
for i = 1, #loadoutChildren do
|
||||
if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then
|
||||
if loadoutChildren[i]:IsA "Frame" and string.find(loadoutChildren[i].Name, "Slot") then
|
||||
loadoutChildren[i].ChildRemoved:connect(function()
|
||||
updateGridActive()
|
||||
end)
|
||||
|
|
@ -858,14 +929,18 @@ local loadoutChildren = currentLoadout:GetChildren()
|
|||
for i = 1, #loadoutChildren do
|
||||
loadoutCheck(loadoutChildren[i], false)
|
||||
end
|
||||
if not backpack.Visible then centerGear(currentLoadout:GetChildren()) 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)
|
||||
backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child)
|
||||
addToGrid(child)
|
||||
end)
|
||||
end
|
||||
|
||||
backpackOpenEvent.Event:connect(backpackOpenHandler)
|
||||
|
|
|
|||
140
89449093.lua
140
89449093.lua
|
|
@ -1,5 +1,7 @@
|
|||
-- 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
|
||||
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)
|
||||
|
|
@ -24,14 +26,12 @@ end
|
|||
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"))
|
||||
assert(screen:IsA "ScreenGui")
|
||||
|
||||
waitForChild(backpack, "Tabs")
|
||||
waitForChild(backpack.Tabs, "CloseButton")
|
||||
|
|
@ -53,9 +53,9 @@ 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 robloxGui = waitForChild(Game.CoreGui, "RobloxGui")
|
||||
local currentLoadout = waitForChild(robloxGui, "CurrentLoadout")
|
||||
local loadoutBackground = waitForChild(currentLoadout, "Background")
|
||||
|
||||
local canToggle = true
|
||||
local readyForNextEvent = true
|
||||
|
|
@ -79,17 +79,15 @@ 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")
|
||||
local newEvent = Instance.new "BindableEvent"
|
||||
newEvent.Name = tostring(eventName)
|
||||
newEvent.Parent = script
|
||||
|
||||
|
|
@ -102,7 +100,7 @@ function createPublicFunction(funcName, invokeFunc)
|
|||
assert(invokeFunc, "invokeFunc is nil")
|
||||
assert(type(invokeFunc) == "function", "invokeFunc should be of type 'function'")
|
||||
|
||||
local newFunction = Instance.new("BindableFunction")
|
||||
local newFunction = Instance.new "BindableFunction"
|
||||
newFunction.Name = tostring(funcName)
|
||||
newFunction.OnInvoke = invokeFunc
|
||||
newFunction.Parent = script
|
||||
|
|
@ -111,15 +109,13 @@ function createPublicFunction(funcName, invokeFunc)
|
|||
end
|
||||
|
||||
-- Events
|
||||
local resizeEvent = createPublicEvent("ResizeEvent")
|
||||
local backpackOpenEvent = createPublicEvent("BackpackOpenEvent")
|
||||
local backpackCloseEvent = createPublicEvent("BackpackCloseEvent")
|
||||
local tabClickedEvent = createPublicEvent("TabClickedEvent")
|
||||
local searchRequestedEvent = createPublicEvent("SearchRequestedEvent")
|
||||
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()
|
||||
|
|
@ -153,12 +149,19 @@ local hideBackpack = function()
|
|||
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,
|
||||
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)
|
||||
end
|
||||
)
|
||||
delay(guiTweenSpeed, function()
|
||||
game.GuiService:RemoveCenterDialog(backpack)
|
||||
backpack.Visible = false
|
||||
|
|
@ -169,41 +172,54 @@ local hideBackpack = function()
|
|||
end
|
||||
|
||||
function showBackpack()
|
||||
game.GuiService:AddCenterDialog(backpack, Enum.CenterDialogType.PlayerInitiatedDialog,
|
||||
function()
|
||||
game.GuiService:AddCenterDialog(backpack, Enum.CenterDialogType.PlayerInitiatedDialog, function()
|
||||
backpack.Visible = true
|
||||
backpackButton.Selected = true
|
||||
end,
|
||||
function()
|
||||
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)
|
||||
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.roblox.com/asset/?id=97644093'
|
||||
backpackButton.Image = "http://www.roblox.com/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
|
||||
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.roblox.com/asset/?id=97623721'
|
||||
loadoutBackground.Image = "http://www.roblox.com/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
|
||||
|
|
@ -214,21 +230,20 @@ function toggleBackpack()
|
|||
loadoutBackground.Visible = false
|
||||
backpackButton.Selected = false
|
||||
backpackButton.Image = "http://www.roblox.com/asset/?id=97617958"
|
||||
loadoutBackground.Image = 'http://www.roblox.com/asset/?id=96536002'
|
||||
loadoutBackground.Image = "http://www.roblox.com/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
|
||||
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
|
||||
if frame:GetChildren()[1]:IsA "ImageButton" then
|
||||
local imgButton = frame:GetChildren()[1]
|
||||
imgButton.Active = true
|
||||
imgButton.Draggable = false
|
||||
|
|
@ -236,7 +251,6 @@ function toggleBackpack()
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -248,7 +262,7 @@ end
|
|||
|
||||
function setSelected(tab)
|
||||
assert(tab)
|
||||
assert(tab:IsA("TextButton"))
|
||||
assert(tab:IsA "TextButton")
|
||||
|
||||
tab.BackgroundColor3 = Color3.new(1, 1, 1)
|
||||
tab.TextColor3 = Color3.new(0, 0, 0)
|
||||
|
|
@ -258,7 +272,7 @@ end
|
|||
|
||||
function setUnselected(tab)
|
||||
assert(tab)
|
||||
assert(tab:IsA("TextButton"))
|
||||
assert(tab:IsA "TextButton")
|
||||
|
||||
tab.BackgroundColor3 = Color3.new(0, 0, 0)
|
||||
tab.TextColor3 = Color3.new(1, 1, 1)
|
||||
|
|
@ -280,18 +294,22 @@ end
|
|||
|
||||
function mouseLeaveTab(button)
|
||||
assert(button)
|
||||
assert(button:IsA("TextButton"))
|
||||
assert(button:IsA "TextButton")
|
||||
|
||||
if button.Selected then return end
|
||||
if button.Selected then
|
||||
return
|
||||
end
|
||||
|
||||
button.BackgroundColor3 = Color3.new(0, 0, 0)
|
||||
end
|
||||
|
||||
function mouseOverTab(button)
|
||||
assert(button)
|
||||
assert(button:IsA("TextButton"))
|
||||
assert(button:IsA "TextButton")
|
||||
|
||||
if button.Selected then return end
|
||||
if button.Selected then
|
||||
return
|
||||
end
|
||||
|
||||
button.BackgroundColor3 = Color3.new(39 / 255, 39 / 255, 39 / 255)
|
||||
end
|
||||
|
|
@ -311,7 +329,9 @@ function trim(s)
|
|||
end
|
||||
|
||||
function splitByWhitespace(text)
|
||||
if type(text) ~= "string" then return nil end
|
||||
if type(text) ~= "string" then
|
||||
return nil
|
||||
end
|
||||
|
||||
local terms = {}
|
||||
for token in string.gmatch(text, "[^%s]+") do
|
||||
|
|
@ -374,13 +394,11 @@ end
|
|||
|
||||
--------------------------- End Internal Functions -------------------------------------
|
||||
|
||||
|
||||
------------------------------ Public Functions Setup -------------------------------------
|
||||
createPublicFunction("CloseBackpack", hideBackpack)
|
||||
createPublicFunction("BackpackReady", backpackReady)
|
||||
------------------------------ End Public Functions Setup ---------------------------------
|
||||
|
||||
|
||||
------------------------ Connections/Script Main -------------------------------------------
|
||||
|
||||
pcall(function()
|
||||
|
|
@ -388,14 +406,26 @@ pcall(function()
|
|||
Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged)
|
||||
end)
|
||||
|
||||
inventoryButton.MouseButton1Click:connect(function() newTabClicked("gear") end)
|
||||
inventoryButton.MouseEnter:connect(function() mouseOverTab(inventoryButton) end)
|
||||
inventoryButton.MouseLeave:connect(function() mouseLeaveTab(inventoryButton) end)
|
||||
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)
|
||||
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)
|
||||
|
|
@ -410,13 +440,17 @@ end)
|
|||
game:GetService("GuiService"):AddKey(tilde)
|
||||
game:GetService("GuiService"):AddKey(backquote)
|
||||
game:GetService("GuiService").KeyPressed:connect(function(key)
|
||||
if not active or disabledByDeveloper then return end
|
||||
if not active or disabledByDeveloper then
|
||||
return
|
||||
end
|
||||
if key == tilde or key == backquote then
|
||||
toggleBackpack()
|
||||
end
|
||||
end)
|
||||
backpackButton.MouseButton1Click:connect(function()
|
||||
if not active or disabledByDeveloper then return end
|
||||
if not active or disabledByDeveloper then
|
||||
return
|
||||
end
|
||||
toggleBackpack()
|
||||
end)
|
||||
|
||||
|
|
|
|||
1499
97188756.lua
1499
97188756.lua
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1 @@
|
|||
std = "mercury"
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
column_width = 120
|
||||
line_endings = "Unix"
|
||||
indent_type = "Tabs"
|
||||
indent_width = 4
|
||||
quote_style = "AutoPreferDouble"
|
||||
call_parentheses = "None"
|
||||
Loading…
Reference in New Issue