Corescript formatting, typing, and consistency improvements

This commit is contained in:
Lewin Kelly 2024-03-19 08:06:25 +00:00
parent 4d5f484abd
commit b9b47c1771
18 changed files with 973 additions and 911 deletions

View File

@ -1,17 +1,283 @@
-- You know what this is guyz
-- HELIODEX'S BASIC NEW FUNCTION
-- HELIODEX'S (not so anymore now) BASIC NEW FUNCTION
return function(className: InstanceName | Instance)
local obj
if type(className) == "string" then
obj = Instance.new(className)
else
obj = className
end
type Return<T> = (props: { [string]: any }) -> T
local parent = nil
type New =
((className: never) -> never) -- induces a never type, not good enough but whatever
& ((className: "Accoutrement") -> Return<Accoutrement>)
& ((className: "Hat") -> Return<Hat>)
& ((className: "AdvancedDragger") -> Return<AdvancedDragger>)
& ((className: "Animation") -> Return<Animation>)
& ((className: "CurveAnimation") -> Return<CurveAnimation>)
& ((className: "KeyframeSequence") -> Return<KeyframeSequence>)
& ((className: "AnimationController") -> Return<AnimationController>)
& ((className: "AnimationRigData") -> Return<AnimationRigData>)
& ((className: "Animator") -> Return<Animator>)
& ((className: "AudioDeviceInput") -> Return<AudioDeviceInput>)
& ((className: "AudioDeviceOutput") -> Return<AudioDeviceOutput>)
& ((className: "AudioDistortion") -> Return<AudioDistortion>)
& ((className: "AudioEcho") -> Return<AudioEcho>)
& ((className: "AudioEmitter") -> Return<AudioEmitter>)
& ((className: "AudioEqualizer") -> Return<AudioEqualizer>)
& ((className: "AudioFader") -> Return<AudioFader>)
& ((className: "AudioFlanger") -> Return<AudioFlanger>)
& ((className: "AudioListener") -> Return<AudioListener>)
& ((className: "AudioPitchShifter") -> Return<AudioPitchShifter>)
& ((className: "AudioPlayer") -> Return<AudioPlayer>)
& ((className: "AudioReverb") -> Return<AudioReverb>)
& ((className: "AudioSearchParams") -> Return<AudioSearchParams>)
& ((className: "Backpack") -> Return<Backpack>)
& ((className: "BindableEvent") -> Return<BindableEvent>)
& ((className: "BindableFunction") -> Return<BindableFunction>)
& ((className: "BodyAngularVelocity") -> Return<BodyAngularVelocity>)
& ((className: "BodyForce") -> Return<BodyForce>)
& ((className: "BodyGyro") -> Return<BodyGyro>)
& ((className: "BodyPosition") -> Return<BodyPosition>)
& ((className: "BodyThrust") -> Return<BodyThrust>)
& ((className: "BodyVelocity") -> Return<BodyVelocity>)
& ((className: "RocketPropulsion") -> Return<RocketPropulsion>)
& ((
className: "BubbleChatMessageProperties"
) -> Return<BubbleChatMessageProperties>)
& ((className: "Camera") -> Return<Camera>)
& ((className: "BodyColors") -> Return<BodyColors>)
& ((className: "CharacterMesh") -> Return<CharacterMesh>)
& ((className: "Pants") -> Return<Pants>)
& ((className: "Shirt") -> Return<Shirt>)
& ((className: "ShirtGraphic") -> Return<ShirtGraphic>)
& ((className: "Skin") -> Return<Skin>)
& ((className: "ClickDetector") -> Return<ClickDetector>)
& ((className: "DragDetector") -> Return<DragDetector>)
& ((className: "Configuration") -> Return<Configuration>)
& ((className: "AngularVelocity") -> Return<AngularVelocity>)
& ((className: "AnimationConstraint") -> Return<AnimationConstraint>)
& ((className: "BallSocketConstraint") -> Return<BallSocketConstraint>)
& ((className: "HingeConstraint") -> Return<HingeConstraint>)
& ((className: "LineForce") -> Return<LineForce>)
& ((className: "LinearVelocity") -> Return<LinearVelocity>)
& ((className: "PlaneConstraint") -> Return<PlaneConstraint>)
& ((className: "Plane") -> Return<Plane>)
& ((className: "RigidConstraint") -> Return<RigidConstraint>)
& ((className: "RodConstraint") -> Return<RodConstraint>)
& ((className: "RopeConstraint") -> Return<RopeConstraint>)
& ((className: "CylindricalConstraint") -> Return<CylindricalConstraint>)
& ((className: "PrismaticConstraint") -> Return<PrismaticConstraint>)
& ((className: "SpringConstraint") -> Return<SpringConstraint>)
& ((className: "Torque") -> Return<Torque>)
& ((
className: "TorsionSpringConstraint"
) -> Return<TorsionSpringConstraint>)
& ((className: "UniversalConstraint") -> Return<UniversalConstraint>)
& ((className: "HumanoidController") -> Return<HumanoidController>)
& ((className: "SkateboardController") -> Return<SkateboardController>)
& ((className: "VehicleController") -> Return<VehicleController>)
& ((className: "AirController") -> Return<AirController>)
& ((className: "ClimbController") -> Return<ClimbController>)
& ((className: "GroundController") -> Return<GroundController>)
& ((className: "SwimController") -> Return<SwimController>)
& ((className: "ControllerManager") -> Return<ControllerManager>)
& ((className: "CustomEvent") -> Return<CustomEvent>)
& ((className: "CustomEventReceiver") -> Return<CustomEventReceiver>)
& ((className: "CylinderMesh") -> Return<CylinderMesh>)
& ((className: "DynamicMesh") -> Return<DynamicMesh>)
& ((className: "FileMesh") -> Return<FileMesh>)
& ((className: "SpecialMesh") -> Return<SpecialMesh>)
& ((
className: "DataStoreIncrementOptions"
) -> Return<DataStoreIncrementOptions>)
& ((className: "DataStoreOptions") -> Return<DataStoreOptions>)
& ((className: "DataStoreSetOptions") -> Return<DataStoreSetOptions>)
& ((className: "DebuggerWatch") -> Return<DebuggerWatch>)
& ((className: "Dialog") -> Return<Dialog>)
& ((className: "DialogChoice") -> Return<DialogChoice>)
& ((className: "Dragger") -> Return<Dragger>)
& ((
className: "ExperienceInviteOptions"
) -> Return<ExperienceInviteOptions>)
& ((className: "Explosion") -> Return<Explosion>)
& ((className: "Decal") -> Return<Decal>)
& ((className: "Texture") -> Return<Texture>)
& ((className: "Hole") -> Return<Hole>)
& ((className: "MotorFeature") -> Return<MotorFeature>)
& ((className: "Fire") -> Return<Fire>)
& ((className: "CSGDictionaryService") -> Return<CSGDictionaryService>)
& ((
className: "NonReplicatedCSGDictionaryService"
) -> Return<NonReplicatedCSGDictionaryService>)
& ((className: "ForceField") -> Return<ForceField>)
& ((className: "FunctionalTest") -> Return<FunctionalTest>)
& ((className: "GetTextBoundsParams") -> Return<GetTextBoundsParams>)
& ((className: "Frame") -> Return<Frame>)
& ((className: "ImageButton") -> Return<ImageButton>)
& ((className: "TextButton") -> Return<TextButton>)
& ((className: "ImageLabel") -> Return<ImageLabel>)
& ((className: "TextLabel") -> Return<TextLabel>)
& ((className: "TextBox") -> Return<TextBox>)
& ((className: "VideoFrame") -> Return<VideoFrame>)
& ((className: "ViewportFrame") -> Return<ViewportFrame>)
& ((className: "BillboardGui") -> Return<BillboardGui>)
& ((className: "ScreenGui") -> Return<ScreenGui>)
& ((className: "GuiMain") -> Return<GuiMain>)
& ((className: "AdGui") -> Return<AdGui>)
& ((className: "SurfaceGui") -> Return<SurfaceGui>)
& ((className: "FloorWire") -> Return<FloorWire>)
& ((className: "SelectionBox") -> Return<SelectionBox>)
& ((className: "BoxHandleAdornment") -> Return<BoxHandleAdornment>)
& ((className: "ConeHandleAdornment") -> Return<ConeHandleAdornment>)
& ((
className: "CylinderHandleAdornment"
) -> Return<CylinderHandleAdornment>)
& ((className: "ImageHandleAdornment") -> Return<ImageHandleAdornment>)
& ((className: "LineHandleAdornment") -> Return<LineHandleAdornment>)
& ((className: "SphereHandleAdornment") -> Return<SphereHandleAdornment>)
& ((
className: "WireframeHandleAdornment"
) -> Return<WireframeHandleAdornment>)
& ((className: "ParabolaAdornment") -> Return<ParabolaAdornment>)
& ((className: "SelectionSphere") -> Return<SelectionSphere>)
& ((className: "ArcHandles") -> Return<ArcHandles>)
& ((className: "Handles") -> Return<Handles>)
& ((className: "SurfaceSelection") -> Return<SurfaceSelection>)
& ((className: "SelectionPartLasso") -> Return<SelectionPartLasso>)
& ((className: "SelectionPointLasso") -> Return<SelectionPointLasso>)
& ((
className: "HeightmapImporterService"
) -> Return<HeightmapImporterService>)
& ((
className: "HiddenSurfaceRemovalAsset"
) -> Return<HiddenSurfaceRemovalAsset>)
& ((className: "Humanoid") -> Return<Humanoid>)
& ((className: "RotateP") -> Return<RotateP>)
& ((className: "RotateV") -> Return<RotateV>)
& ((className: "Glue") -> Return<Glue>)
& ((className: "ManualGlue") -> Return<ManualGlue>)
& ((className: "ManualWeld") -> Return<ManualWeld>)
& ((className: "Motor") -> Return<Motor>)
& ((className: "Motor6D") -> Return<Motor6D>)
& ((className: "Rotate") -> Return<Rotate>)
& ((className: "Snap") -> Return<Snap>)
& ((className: "VelocityMotor") -> Return<VelocityMotor>)
& ((className: "Weld") -> Return<Weld>)
& ((className: "Keyframe") -> Return<Keyframe>)
& ((className: "KeyframeMarker") -> Return<KeyframeMarker>)
& ((className: "PointLight") -> Return<PointLight>)
& ((className: "SpotLight") -> Return<SpotLight>)
& ((className: "SurfaceLight") -> Return<SurfaceLight>)
& ((className: "Script") -> Return<Script>)
& ((className: "LocalScript") -> Return<LocalScript>)
& ((className: "ModuleScript") -> Return<ModuleScript>)
& ((className: "MarkerCurve") -> Return<MarkerCurve>)
& ((className: "MemoryStoreService") -> Return<MemoryStoreService>)
& ((className: "Message") -> Return<Message>)
& ((className: "Hint") -> Return<Hint>)
& ((className: "CornerWedgePart") -> Return<CornerWedgePart>)
& ((className: "Part") -> Return<Part>)
& ((className: "FlagStand") -> Return<FlagStand>)
& ((className: "Seat") -> Return<Seat>)
& ((className: "SkateboardPlatform") -> Return<SkateboardPlatform>)
& ((className: "SpawnLocation") -> Return<SpawnLocation>)
& ((className: "WedgePart") -> Return<WedgePart>)
& ((className: "PartOperation") -> Return<PartOperation>)
& ((className: "IntersectOperation") -> Return<IntersectOperation>)
& ((className: "NegateOperation") -> Return<NegateOperation>)
& ((className: "UnionOperation") -> Return<UnionOperation>)
& ((className: "TrussPart") -> Return<TrussPart>)
& ((className: "VehicleSeat") -> Return<VehicleSeat>)
& ((className: "Model") -> Return<Model>)
& ((className: "HopperBin") -> Return<HopperBin>)
& ((className: "Tool") -> Return<Tool>)
& ((className: "Flag") -> Return<Flag>)
& ((className: "WorldModel") -> Return<WorldModel>)
& ((className: "PartOperationAsset") -> Return<PartOperationAsset>)
& ((className: "PathfindingLink") -> Return<PathfindingLink>)
& ((className: "PathfindingModifier") -> Return<PathfindingModifier>)
& ((className: "Player") -> Return<Player>)
& ((className: "PluginAction") -> Return<PluginAction>)
& ((className: "PluginCapabilities") -> Return<PluginCapabilities>)
& ((className: "NumberPose") -> Return<NumberPose>)
& ((className: "Pose") -> Return<Pose>)
& ((className: "ReflectionMetadata") -> Return<ReflectionMetadata>)
& ((
className: "ReflectionMetadataCallbacks"
) -> Return<ReflectionMetadataCallbacks>)
& ((
className: "ReflectionMetadataClasses"
) -> Return<ReflectionMetadataClasses>)
& ((
className: "ReflectionMetadataEnums"
) -> Return<ReflectionMetadataEnums>)
& ((
className: "ReflectionMetadataEvents"
) -> Return<ReflectionMetadataEvents>)
& ((
className: "ReflectionMetadataFunctions"
) -> Return<ReflectionMetadataFunctions>)
& ((
className: "ReflectionMetadataClass"
) -> Return<ReflectionMetadataClass>)
& ((className: "ReflectionMetadataEnum") -> Return<ReflectionMetadataEnum>)
& ((
className: "ReflectionMetadataEnumItem"
) -> Return<ReflectionMetadataEnumItem>)
& ((
className: "ReflectionMetadataMember"
) -> Return<ReflectionMetadataMember>)
& ((
className: "ReflectionMetadataProperties"
) -> Return<ReflectionMetadataProperties>)
& ((
className: "ReflectionMetadataYieldFunctions"
) -> Return<ReflectionMetadataYieldFunctions>)
& ((className: "RemoteEvent") -> Return<RemoteEvent>)
& ((className: "RemoteFunction") -> Return<RemoteFunction>)
& ((className: "RenderingTest") -> Return<RenderingTest>)
& ((className: "BuoyancySensor") -> Return<BuoyancySensor>)
& ((className: "ControllerPartSensor") -> Return<ControllerPartSensor>)
& ((className: "Sky") -> Return<Sky>)
& ((className: "Smoke") -> Return<Smoke>)
& ((className: "Sound") -> Return<Sound>)
& ((className: "Sparkles") -> Return<Sparkles>)
& ((
className: "StandalonePluginScripts"
) -> Return<StandalonePluginScripts>)
& ((className: "StarterGear") -> Return<StarterGear>)
& ((className: "StudioCallout") -> Return<StudioCallout>)
& ((className: "StudioObjectBase") -> Return<StudioObjectBase>)
& ((className: "StudioWidget") -> Return<StudioWidget>)
& ((className: "StyleDerive") -> Return<StyleDerive>)
& ((className: "StyleLink") -> Return<StyleLink>)
& ((className: "SurfaceAppearance") -> Return<SurfaceAppearance>)
& ((className: "Team") -> Return<Team>)
& ((className: "TeleportOptions") -> Return<TeleportOptions>)
& ((className: "TerrainDetail") -> Return<TerrainDetail>)
& ((className: "TerrainRegion") -> Return<TerrainRegion>)
& ((className: "TestService") -> Return<TestService>)
& ((className: "TextChannel") -> Return<TextChannel>)
& ((className: "TextChatCommand") -> Return<TextChatCommand>)
& ((
className: "TextChatMessageProperties"
) -> Return<TextChatMessageProperties>)
& ((className: "TrackerStreamAnimation") -> Return<TrackerStreamAnimation>)
& ((className: "BinaryStringValue") -> Return<BinaryStringValue>)
& ((className: "BoolValue") -> Return<BoolValue>)
& ((className: "BrickColorValue") -> Return<BrickColorValue>)
& ((className: "CFrameValue") -> Return<CFrameValue>)
& ((className: "Color3Value") -> Return<Color3Value>)
& ((className: "DoubleConstrainedValue") -> Return<DoubleConstrainedValue>)
& ((className: "IntConstrainedValue") -> Return<IntConstrainedValue>)
& ((className: "IntValue") -> Return<IntValue>)
& ((className: "NumberValue") -> Return<NumberValue>)
& ((className: "ObjectValue") -> Return<ObjectValue>)
& ((className: "RayValue") -> Return<RayValue>)
& ((className: "StringValue") -> Return<StringValue>)
& ((className: "Vector3Value") -> Return<Vector3Value>)
& ((className: "Wire") -> Return<Wire>)
local function propsApplier(obj)
return function(props: { [string]: any })
local parent
for k, v in pairs(props) do
if type(k) == "string" then
if k == "Parent" then
@ -29,3 +295,13 @@ return function(className: InstanceName | Instance)
return obj
end
end
local New = function(className)
return propsApplier(Instance.new(className))
end :: New
local Hydrate = function(target)
return propsApplier(target)
end :: <T>(T) -> (props: { [string]: any }) -> T
return { New = New, Hydrate = Hydrate }

View File

@ -5,6 +5,8 @@ print "[Mercury]: Loaded corescript 107893730"
local MarketplaceService = game:GetService "MarketplaceService"
local GuiService = game:GetService "GuiService"
local ContentProvider = game:GetService "ContentProvider"
local HttpService = game:GetService "HttpService"
-- wait for important items to appear
while not Game do
@ -23,8 +25,7 @@ end
-------------------------------- Global Variables ----------------------------------------
-- utility variables
local RbxUtility
local baseUrl = game:GetService("ContentProvider").BaseUrl:lower()
local baseUrl = ContentProvider.BaseUrl:lower()
-- data variables
local currentProductInfo, currentAssetId, currentCurrencyType, currentCurrencyAmount, currentEquipOnPurchase, currentProductId, currentServerResponseTable
@ -40,10 +41,10 @@ local purchaseDialog
local tweenTime = 0.3
local showPosition = UDim2.new(0.5, -330, 0.5, -200)
local hidePosition = UDim2.new(0.5, -330, 1, 25)
local isSmallScreen
-- local isSmallScreen
local spinning = false
local spinnerIcons
local smallScreenThreshold = 450
-- local smallScreenThreshold = 450
-- user facing images
local function assetUrl(id: number)
@ -92,13 +93,6 @@ local function getSecureApiBaseUrl()
return secureApiUrl
end
local function getRbxUtility()
if not RbxUtility then
RbxUtility = LoadLibrary "RbxUtility"
end
return RbxUtility
end
local function preloadAssets()
for _, url in ipairs {
errorImageUrl,
@ -114,7 +108,7 @@ local function preloadAssets()
tixIcon,
robuxIcon,
} do
game:GetService("ContentProvider"):Preload(url)
ContentProvider:Preload(url)
end
end
@ -219,7 +213,7 @@ local function currencyEnumToInt(currencyEnum: Enum.CurrencyType)
end
-- oi, this is ugly
local function assetTypeToString(assetType)
local function assetTypeToString(assetType: number)
if assetType == 1 then
return "Image"
elseif assetType == 2 then
@ -307,7 +301,7 @@ local function currencyTypeToString(currencyType)
end
-- make sure our gui displays the proper purchase data, and set the productid we will try and buy if use specifies a buy action
local function updatePurchasePromptData(_)
local function updatePurchasePromptData()
local newItemDescription = ""
-- id to use when we request a purchase
@ -359,7 +353,7 @@ local function updatePurchasePromptData(_)
end
-- more enum to int fun!
local function membershipTypeToNumber(membership)
local function membershipTypeToNumber(membership: EnumItem) -- idk if there's a better type than EnumItem
if membership == Enum.MembershipType.None then
return 0
elseif membership == Enum.MembershipType.BuildersClub then
@ -451,9 +445,7 @@ local function getPlayerBalance()
return
end
playerBalance = getRbxUtility().DecodeJSON(playerBalance)
return playerBalance
return HttpService:JSONDecode(playerBalance)
end
-- figure out what currency to use based on the currency you can actually sell the item in and what the script specified
@ -504,8 +496,7 @@ local function canPurchaseItem()
)
end)
if success then
currentProductInfo =
getRbxUtility().DecodeJSON(currentProductInfoRaw)
currentProductInfo = HttpService:JSONDecode(currentProductInfoRaw)
end
else
success = ypcall(function()
@ -552,7 +543,7 @@ local function canPurchaseItem()
-- next we parse through product info and see if we can purchase
if type(currentProductInfo) ~= "table" then
currentProductInfo = getRbxUtility().DecodeJSON(currentProductInfo)
currentProductInfo = HttpService:JSONDecode(currentProductInfo)
end
if not currentProductInfo then
@ -851,9 +842,7 @@ local function acceptPurchase()
local currencyData = `&currencyTypeId={currencyEnumToInt(
currentCurrencyType
)}&currencyTypeId={currencyEnumToInt(
currentCurrencyType
)}`
)}&currencyTypeId={currencyEnumToInt(currentCurrencyType)}`
-- consumables need to use a different url
if purchasingConsumable then
@ -890,19 +879,17 @@ local function acceptPurchase()
end
-- parse our response, decide how to react
response = getRbxUtility().DecodeJSON(response)
response = HttpService:JSONDecode(response)
if response then
if response.success == false then
if response.status ~= "AlreadyOwned" then
print(
"web return response of fail on purchase of",
currentAssetId,
currentProductId
)
purchaseFailed((response.status == "EconomyDisabled"))
return
end
if response.success == false and response.status ~= "AlreadyOwned" then
print(
"web return response of fail on purchase of",
currentAssetId,
currentProductId
)
purchaseFailed((response.status == "EconomyDisabled"))
return
end
else
print(
@ -1261,42 +1248,42 @@ end
-- next 2 functions are convenienvce creation functions for guis
local function cutSizeInHalfRecursive(_)
-- local function cutSizeInHalfRecursive(_)
-- todo: change the gui size based on how much space we have
--[[changeSize(instance,0.5)
-- changeSize(instance, 0.5)
local children = instance:GetChildren()
for i = 1, #children do
cutSizeInHalfRecursive(children[i])
end]]
end
-- local children = instance:GetChildren()
-- for i = 1, #children do
-- cutSizeInHalfRecursive(children[i])
-- end
-- end
local function doubleSizeRecursive(_)
-- local function doubleSizeRecursive(_)
-- todo: change the gui size based on how much space we have
--[[changeSize(instance,2)
-- changeSize(instance, 2)
local children = instance:GetChildren()
for i = 1, #children do
doubleSizeRecursive(children[i])
end]]
end
-- local children = instance:GetChildren()
-- for i = 1, #children do
-- doubleSizeRecursive(children[i])
-- end
-- end
local function modifyForSmallScreen()
cutSizeInHalfRecursive(purchaseDialog)
end
-- local function modifyForSmallScreen()
-- cutSizeInHalfRecursive(purchaseDialog)
-- end
local function modifyForLargeScreen()
doubleSizeRecursive(purchaseDialog)
end
-- local function modifyForLargeScreen()
-- doubleSizeRecursive(purchaseDialog)
-- end
-- depending on screen size, we need to change the gui
local function changeGuiToScreenSize(smallScreen)
if smallScreen then
modifyForSmallScreen()
else
modifyForLargeScreen()
end
end
-- local function changeGuiToScreenSize(smallScreen)
-- if smallScreen then
-- modifyForSmallScreen()
-- else
-- modifyForLargeScreen()
-- end
-- end
local function doPurchasePrompt(
player,
@ -1373,20 +1360,20 @@ if enableBrowserWindowClosedEvent then
end)
end
Game.CoreGui.RobloxGui.Changed:connect(function()
local nowIsSmallScreen = (
game.CoreGui.RobloxGui.AbsoluteSize.Y <= smallScreenThreshold
)
if nowIsSmallScreen and not isSmallScreen then
changeGuiToScreenSize(true)
elseif not nowIsSmallScreen and isSmallScreen then
changeGuiToScreenSize(false)
end
-- Game.CoreGui.RobloxGui.Changed:connect(function()
-- local nowIsSmallScreen = (
-- game.CoreGui.RobloxGui.AbsoluteSize.Y <= smallScreenThreshold
-- )
-- if nowIsSmallScreen and not isSmallScreen then
-- changeGuiToScreenSize(true)
-- elseif not nowIsSmallScreen and isSmallScreen then
-- changeGuiToScreenSize(false)
-- end
isSmallScreen = nowIsSmallScreen
end)
-- isSmallScreen = nowIsSmallScreen
-- end)
isSmallScreen = (game.CoreGui.RobloxGui.AbsoluteSize.Y <= smallScreenThreshold)
if isSmallScreen then
changeGuiToScreenSize(true)
end
-- isSmallScreen = (game.CoreGui.RobloxGui.AbsoluteSize.Y <= smallScreenThreshold)
-- if isSmallScreen then
-- changeGuiToScreenSize(true)
-- end

View File

@ -5,7 +5,7 @@ for _ = 1, 8 do
end
--Include
local New = require "../Modules/New"
local New = (require "../Modules/New").New
-- A Few Script Globals
local gui
@ -39,7 +39,7 @@ function initializeDeveloperConsole()
end
devConsoleInitialized = true
---Dev-Console Variables
-- Dev-Console Variables
local LOCAL_CONSOLE = 1
local SERVER_CONSOLE = 2
@ -64,7 +64,7 @@ function initializeDeveloperConsole()
local frameNumber = 0
--Create Dev-Console
-- Create Dev-Console
local Dev_Body = New "Frame" {
Name = "Body",

View File

@ -1,7 +1,9 @@
-- CoreGui.RobloxGui.CoreScripts/ToolTip
print "[Mercury]: Loaded corescript 36868950"
local New = require "../Modules/New"
local News = require "../Modules/New"
local New = News.New
local Hydrate = News.Hydrate
local controlFrame = script.Parent:FindFirstChild "ControlFrame"
@ -72,12 +74,13 @@ local function createSettingsButtonTip(parent)
parent = bottomLeftControl:FindFirstChild "SettingsButton"
end
local toolTip = frameTip:clone()
toolTip.RobloxLocked = true
toolTip.Text = "Settings/Leave Game"
toolTip.Position = UDim2.new(0, 0, 0, -18)
toolTip.Size = UDim2.new(0, 120, 0, 20)
toolTip.Parent = parent
local toolTip = Hydrate(frameTip:Clone()) {
RobloxLocked = true,
Text = "Settings/Leave Game",
Position = UDim2.new(0, 0, 0, -18),
Size = UDim2.new(0, 120, 0, 20),
Parent = parent,
}
setUpListeners(toolTip)
end
@ -89,7 +92,7 @@ local bottomLeftChildren = bottomLeftControl:GetChildren()
for i = 1, #bottomLeftChildren do
if bottomLeftChildren[i].Name == "Exit" then
local exitTip = New(frameTip:clone()) {
local exitTip = Hydrate(frameTip:Clone()) {
RobloxLocked = true,
Text = "Leave Place",
Position = UDim2.new(0, 0, -1, 0),
@ -109,7 +112,7 @@ local bottomRightChildren = bottomRightControl:GetChildren()
for i = 1, #bottomRightChildren do
if bottomRightChildren[i].Name:find "Camera" ~= nil then
local cameraTip = New(frameTip:clone()) {
local cameraTip = Hydrate(frameTip:Clone()) {
RobloxLocked = true,
Text = "Camera View",
Size = UDim2.new(2, 0, 1.25, 0),

View File

@ -23,36 +23,21 @@ end
waitForChild(CoreGui, "RobloxGui")
local screenGui = CoreGui:FindFirstChild "RobloxGui"
-- ToolTipper (creates tool tips for gui)
ScriptContext:AddCoreScript(36868950, screenGui, "CoreScripts/ToolTip")
-- SettingsScript
ScriptContext:AddCoreScript(46295863, screenGui, "CoreScripts/Settings")
local scripts = {
[36868950] = "CoreScripts/ToolTip", -- ToolTipper (creates tool tips for gui)
[46295863] = "CoreScripts/Settings", -- SettingsScript
[39250920] = "CoreScripts/MainBotChatScript", -- MainBotChatScript
[48488451] = "CoreScripts/PopupScript", -- Popup Script
[48488398] = "CoreScripts/NotificationScript", -- Friend Notification Script (probably can use this script to expand out to other notifications)
[97188756] = "CoreScripts/ChatScript", -- Chat script
[107893730] = "CoreScripts/PurchasePromptScript", -- Purchase Prompt Script
}
-- MainBotChatScript
ScriptContext:AddCoreScript(
39250920,
screenGui,
"CoreScripts/MainBotChatScript"
)
for id, path in pairs(scripts) do
ScriptContext:AddCoreScript(id, screenGui, path)
end
-- Popup Script
ScriptContext:AddCoreScript(48488451, screenGui, "CoreScripts/PopupScript")
-- Friend Notification Script (probably can use this script to expand out to other notifications)
ScriptContext:AddCoreScript(
48488398,
screenGui,
"CoreScripts/NotificationScript"
)
-- Chat script
ScriptContext:AddCoreScript(97188756, screenGui, "CoreScripts/ChatScript")
-- Purchase Prompt Script
ScriptContext:AddCoreScript(
107893730,
screenGui,
"CoreScripts/PurchasePromptScript"
)
if screenGui.AbsoluteSize.Y > 600 then
if screenGui.AbsoluteSize.Y >= 600 then
-- New Player List
ScriptContext:AddCoreScript(
48488235,
@ -103,21 +88,4 @@ ScriptContext:AddCoreScript(
"CoreScripts/BackpackScripts/LoadoutScript"
)
local IsPersonalServer = not not game.Workspace:FindFirstChild "PSVariable"
if IsPersonalServer then
ScriptContext:AddCoreScript(
64164692,
game.Players.LocalPlayer,
"BuildToolManager"
)
end
game.Workspace.ChildAdded:connect(function(nchild)
if nchild.Name == "PSVariable" and nchild:IsA "BoolValue" then
IsPersonalServer = true
ScriptContext:AddCoreScript(
64164692,
game.Players.LocalPlayer,
"BuildToolManager"
)
end
end)
-- Personal servers are disabled, the corescript for it is not present

View File

@ -4,8 +4,8 @@ for _ = 1, 8 do
print "IF YOU SEE THIS MESSAGE, PLEASE REPORT IT TO THE MERCURY DEVELOPERS"
end
local damageGuiWidth = 5.0
local damageGuiHeight = 5.0
local damageGuiWidth = 5
local damageGuiHeight = 5
local function waitForChild(parent, childName)
local child = parent:findFirstChild(childName)

View File

@ -1,7 +1,9 @@
-- CoreGui.RobloxGui.CoreScripts/MainBotChatScript
print "[Mercury]: Loaded corescript 39250920"
local New = require "../Modules/New"
local News = require "../Modules/New"
local New = News.New
local Hydrate = News.Hydrate
local InsertService = game:GetService "InsertService"
@ -17,7 +19,9 @@ local function waitForChild(instance, name)
end
end
local mainFrame
local mainFrame: Frame & {
Tail: ImageLabel,
}
local choices = {}
local lastChoice
local choiceMap = {}
@ -308,7 +312,7 @@ local function renewKillswitch(dialog)
currentAbortDialogScript = nil
end
currentAbortDialogScript = New(timeoutScript:Clone()) {
currentAbortDialogScript = Hydrate(timeoutScript:Clone()) {
archivable = false,
Disabled = false,
@ -357,11 +361,37 @@ local function selectChoice(choice)
end
local function newChoice(numberText)
local frame = Instance.new "TextButton"
frame.BackgroundColor3 = Color3.new(0 / 255, 0 / 255, 179 / 255)
frame.AutoButtonColor = false
frame.BorderSizePixel = 0
frame.Text = ""
local frame = New "TextButton" {
BackgroundColor3 = Color3.new(0 / 255, 0 / 255, 179 / 255),
AutoButtonColor = false,
BorderSizePixel = 0,
Text = "",
RobloxLocked = true,
New "TextLabel" {
Name = "Number",
TextColor3 = Color3.new(127 / 255, 212 / 255, 255 / 255),
Text = numberText,
FontSize = Enum.FontSize.Size14,
BackgroundTransparency = 1,
Position = UDim2.new(0, 4, 0, 2),
Size = UDim2.new(0, 20, 0, 24),
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top,
RobloxLocked = true,
},
New "TextLabel" {
Name = "UserPrompt",
BackgroundTransparency = 1,
TextColor3 = Color3.new(1, 1, 1),
FontSize = Enum.FontSize.Size14,
Position = UDim2.new(0, 28, 0, 2),
Size = UDim2.new(1, -32, 1, -4),
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top,
TextWrap = true,
RobloxLocked = true,
},
}
frame.MouseEnter:connect(function()
highlightColor(frame, currentTone())
end)
@ -371,33 +401,6 @@ local function newChoice(numberText)
frame.MouseButton1Click:connect(function()
selectChoice(frame)
end)
frame.RobloxLocked = true
local number = Instance.new "TextLabel"
number.Name = "Number"
number.TextColor3 = Color3.new(127 / 255, 212 / 255, 255 / 255)
number.Text = numberText
number.FontSize = Enum.FontSize.Size14
number.BackgroundTransparency = 1
number.Position = UDim2.new(0, 4, 0, 2)
number.Size = UDim2.new(0, 20, 0, 24)
number.TextXAlignment = Enum.TextXAlignment.Left
number.TextYAlignment = Enum.TextYAlignment.Top
number.RobloxLocked = true
number.Parent = frame
local prompt = Instance.new "TextLabel"
prompt.Name = "UserPrompt"
prompt.BackgroundTransparency = 1
prompt.TextColor3 = Color3.new(1, 1, 1)
prompt.FontSize = Enum.FontSize.Size14
prompt.Position = UDim2.new(0, 28, 0, 2)
prompt.Size = UDim2.new(1, -32, 1, -4)
prompt.TextXAlignment = Enum.TextXAlignment.Left
prompt.TextYAlignment = Enum.TextYAlignment.Top
prompt.TextWrap = true
prompt.RobloxLocked = true
prompt.Parent = frame
return frame
end
@ -412,30 +415,29 @@ local function initialize(parent)
lastChoice.UserPrompt.Text = "Goodbye!"
lastChoice.Size = UDim2.new(1, 0, 0, 28)
mainFrame = Instance.new "Frame"
mainFrame.Name = "UserDialogArea"
mainFrame.Size = UDim2.new(0, 350, 0, 200)
mainFrame.Style = Enum.FrameStyle.ChatBlue
mainFrame.Visible = false
local imageLabel = Instance.new "ImageLabel"
imageLabel.Name = "Tail"
imageLabel.Size = UDim2.new(0, 62, 0, 53)
imageLabel.Position = UDim2.new(1, 8, 0.25)
imageLabel.Image = "rbxasset://textures/chatBubble_botBlue_tailRight.png"
imageLabel.BackgroundTransparency = 1
imageLabel.RobloxLocked = true
imageLabel.Parent = mainFrame
mainFrame = New "Frame" {
Name = "UserDialogArea",
Size = UDim2.new(0, 350, 0, 200),
Style = Enum.FrameStyle.ChatBlue,
Visible = false,
RobloxLocked = true,
New "ImageLabel" {
Name = "Tail",
Size = UDim2.new(0, 62, 0, 53),
Position = UDim2.new(1, 8, 0.25),
Image = "rbxasset://textures/chatBubble_botBlue_tailRight.png",
BackgroundTransparency = 1,
RobloxLocked = true,
},
}
for _, obj in pairs(choices) do
obj.RobloxLocked = true
obj.Parent = mainFrame
end
lastChoice.RobloxLocked = true
lastChoice.Parent = mainFrame
mainFrame.RobloxLocked = true
mainFrame.Parent = parent
lastChoice.Parent = mainFrame
end
local function doDialog(dialog)
@ -521,7 +523,7 @@ end
local function addDialog(dialog)
if dialog.Parent then
if dialog.Parent:IsA "BasePart" then
local chatGui = New(chatNotificationGui:clone()) {
local chatGui = Hydrate(chatNotificationGui:Clone()) {
Enabled = not dialog.InUse,
Adornee = dialog.Parent,
RobloxLocked = true,

View File

@ -1,7 +1,9 @@
-- RbxGui
print "[Mercury]: Loaded corescript 45284430"
local New = require "../Modules/New"
local News = require "../Modules/New"
local New = News.New
local Hydrate = News.Hydrate
local RbxGui = {}
@ -16,7 +18,7 @@ local function ScopedConnect(
local eventConnection
--Connection on parentInstance is scoped by parentInstance (when destroyed, it goes away)
local tryConnect = function()
local function tryConnect()
if game:IsAncestorOf(parentInstance) then
--Entering the world, make sure we are connected/synced
if not eventConnection then
@ -53,26 +55,25 @@ local function getScreenGuiAncestor(instance)
return localInstance
end
local function Colour3(r, g, b)
return Color3.new(r / 255, g / 255, b / 255)
end
local function CreateButtons(frame, buttons, yPos, ySize)
local buttonNum = 1
local buttonObjs = {}
for _, obj in ipairs(buttons) do
local button = Instance.new "TextButton"
button.Name = "Button" .. buttonNum
button.Font = Enum.Font.Arial
button.FontSize = Enum.FontSize.Size18
button.AutoButtonColor = true
button.Modal = true
if obj.Style then
button.Style = obj.Style
else
button.Style = Enum.ButtonStyle.RobloxButton
end
button.Text = obj.Text
button.TextColor3 = Color3.new(1, 1, 1)
button.MouseButton1Click:connect(obj.Function)
button.Parent = frame
buttonObjs[buttonNum] = button
buttonObjs[buttonNum] = New "TextButton" {
Name = "Button" .. buttonNum,
Font = Enum.Font.Arial,
FontSize = Enum.FontSize.Size18,
AutoButtonColor = true,
Modal = true,
Style = obj.Style or Enum.ButtonStyle.RobloxButton,
Text = obj.Text,
TextColor3 = Color3.new(1, 1, 1),
Parent = frame,
}
buttonNum += 1
end
@ -151,7 +152,7 @@ RbxGui.CreateStyledMessageDialog = function(title, message, style, buttons)
Text = title,
TextStrokeTransparency = 0,
BackgroundTransparency = 1,
TextColor3 = Color3.new(221 / 255, 221 / 255, 221 / 255),
TextColor3 = Colour3(221, 221, 221),
Position = UDim2.new(0, 80, 0, 0),
Size = UDim2.new(1, -80, 0, 40),
Font = Enum.Font.ArialBold,
@ -163,7 +164,7 @@ RbxGui.CreateStyledMessageDialog = function(title, message, style, buttons)
Name = "Message",
Text = message,
TextStrokeTransparency = 0,
TextColor3 = Color3.new(221 / 255, 221 / 255, 221 / 255),
TextColor3 = Colour3(221, 221, 221),
Position = UDim2.new(0.025, 80, 0, 45),
Size = UDim2.new(0.95, -80, 0, 55),
BackgroundTransparency = 1,
@ -211,7 +212,7 @@ RbxGui.CreateMessageDialog = function(title, message, buttons)
Name = "Title",
Text = title,
BackgroundTransparency = 1,
TextColor3 = Color3.new(221 / 255, 221 / 255, 221 / 255),
TextColor3 = Colour3(221, 221, 221),
Position = UDim2.new(0, 0, 0, 0),
Size = UDim2.new(1, 0, 0.15, 0),
Font = Enum.Font.ArialBold,
@ -222,7 +223,7 @@ RbxGui.CreateMessageDialog = function(title, message, buttons)
New "TextLabel" {
Name = "Message",
Text = message,
TextColor3 = Color3.new(221 / 255, 221 / 255, 221 / 255),
TextColor3 = Colour3(221, 221, 221),
Position = UDim2.new(0.025, 0, 0.175, 0),
Size = UDim2.new(0.95, 0, 0.55, 0),
BackgroundTransparency = 1,
@ -552,7 +553,7 @@ RbxGui.CreateDropDownMenu = function(items, onSelect, forRoblox)
for _, item in ipairs(items) do
-- needed to maintain local scope for items in event listeners below
local button = choiceButton:clone()
local button = choiceButton:Clone()
if forRoblox then
button.RobloxLocked = true
end
@ -857,7 +858,7 @@ RbxGui.CreateSlider = function(steps, width, position)
else
bar.Size = UDim2.new(0, 200, 0, 5)
end
bar.BorderColor3 = Color3.new(95 / 255, 95 / 255, 95 / 255)
bar.BorderColor3 = Colour3(95, 95, 95)
bar.ZIndex = 2
bar.Parent = sliderGui
@ -994,7 +995,7 @@ RbxGui.CreateTrueScrollingFrame = function()
end
end)
local scrollDownButton = scrollUpButton:clone()
local scrollDownButton = scrollUpButton:Clone()
scrollDownButton.Name = "ScrollDownButton"
scrollDownButton.Position = UDim2.new(0, 0, 1, -18)
local downChildren = scrollDownButton:GetChildren()
@ -1047,11 +1048,11 @@ RbxGui.CreateTrueScrollingFrame = function()
scrollNub.BackgroundTransparency = 0.5
scrollNub.Parent = scrollbar
local newNub = scrollNub:clone()
local newNub = scrollNub:Clone()
newNub.Position = UDim2.new(0.5, -5, 0.5, -2)
newNub.Parent = scrollbar
local lastNub = scrollNub:clone()
local lastNub = scrollNub:Clone()
lastNub.Position = UDim2.new(0.5, -5, 0.5, 2)
lastNub.Parent = scrollbar
@ -2170,16 +2171,17 @@ end
RbxGui.AutoTruncateTextObject = function(textLabel)
local text = textLabel.Text
local fullLabel = textLabel:Clone()
fullLabel.Name = "Full" .. textLabel.Name
fullLabel.BorderSizePixel = 0
fullLabel.BackgroundTransparency = 0
fullLabel.Text = text
fullLabel.TextXAlignment = Enum.TextXAlignment.Center
fullLabel.Position = UDim2.new(0, -3, 0, 0)
fullLabel.Size = UDim2.new(0, 100, 1, 0)
fullLabel.Visible = false
fullLabel.Parent = textLabel
local fullLabel = Hydrate(textLabel:Clone()) {
Name = "Full" .. textLabel.Name,
BorderSizePixel = 0,
BackgroundTransparency = 0,
Text = text,
TextXAlignment = Enum.TextXAlignment.Center,
Position = UDim2.new(0, -3, 0, 0),
Size = UDim2.new(0, 100, 1, 0),
Visible = false,
Parent = textLabel,
}
local shortText
local mouseEnterConnection
@ -2356,15 +2358,12 @@ RbxGui.CreateTutorial = function(name, tutorialKey, createButtons)
local function getVisiblePageAndHideOthers()
local visiblePage
local children = pages:GetChildren()
if children then
for _, child in ipairs(children) do
if child.Visible then
if visiblePage then
child.Visible = false
else
visiblePage = child
end
for _, child in ipairs(pages:GetChildren() or {}) do
if child.Visible then
if visiblePage then
child.Visible = false
else
visiblePage = child
end
end
end
@ -2521,11 +2520,8 @@ local function CreateBasicTutorialPage(
Parent = frame,
}
if giveDoneButton then
innerFrame.Size = UDim2.new(1, 0, 1, -75)
else
innerFrame.Size = UDim2.new(1, 0, 1, -22)
end
innerFrame.Size = giveDoneButton and UDim2.new(1, 0, 1, -75)
or UDim2.new(1, 0, 1, -22)
local parentConnection
@ -2837,7 +2833,7 @@ RbxGui.CreateSetPanel = function(
Parent = waterFrame,
}
local waterForceDirLabel = New(waterForceLabel:Clone()) {
local waterForceDirLabel = Hydrate(waterForceLabel:Clone()) {
Name = "WaterForceDirectionLabel",
Text = "Water Force Direction",
Position = UDim2.new(0, 0, 0, 50),
@ -2943,7 +2939,7 @@ RbxGui.CreateSetPanel = function(
Size = UDim2.new(0, 3, 0.9, 0),
ZIndex = 6,
},
New(setsLists) {
Hydrate(setsLists) {
Size = UDim2.new(1, -6, 0.94, 0),
Position = UDim2.new(0, 0, 0.06, 0),
BackgroundTransparency = 1,
@ -3015,7 +3011,7 @@ RbxGui.CreateSetPanel = function(
end
local function buildSetButton(name, setId, _, _, _)
return New(createSetButton(name)) {
return Hydrate(createSetButton(name)) {
Text = name,
Name = "SetButton",
Visible = true,
@ -3106,7 +3102,7 @@ RbxGui.CreateSetPanel = function(
Parent = button,
}
New(buttonImage:Clone()) {
Hydrate(buttonImage:Clone()) {
Name = "ConfigIcon",
Visible = false,
Position = UDim2.new(1, -23, 1, -24),
@ -3556,7 +3552,7 @@ RbxGui.CreateSetPanel = function(
)
local scrollFrame, controlFrame = RbxGui.CreateTrueScrollingFrame()
New(scrollFrame) {
Hydrate(scrollFrame) {
Size = UDim2.new(0.54, 0, 0.85, 0),
Position = UDim2.new(0.24, 0, 0.085, 0),
Name = "ItemsFrame",
@ -3640,86 +3636,60 @@ RbxGui.CreateSetPanel = function(
waterTypeChangedEvent
end
local cm = Enum.CellMaterial
local EnumMaterialNames = {
[cm.Grass] = "Grass",
[cm.Sand] = "Sand",
[cm.Empty] = "Erase",
[cm.Brick] = "Brick",
[cm.Granite] = "Granite",
[cm.Asphalt] = "Asphalt",
[cm.Iron] = "Iron",
[cm.Aluminum] = "Aluminum",
[cm.Gold] = "Gold",
[cm.WoodPlank] = "Plank",
[cm.WoodLog] = "Log",
[cm.Gravel] = "Gravel",
[cm.CinderBlock] = "Cinder Block",
[cm.MossyStone] = "Stone Wall",
[cm.Cement] = "Concrete",
[cm.RedPlastic] = "Plastic (red)",
[cm.BluePlastic] = "Plastic (blue)",
[cm.Water] = "Water",
}
local MaterialNames = {
"Grass",
"Sand",
"Erase",
"Brick",
"Granite",
"Asphalt",
"Iron",
"Aluminum",
"Gold",
"Plank",
"Log",
"Gravel",
"Cinder Block",
"Stone Wall",
"Concrete",
"Plastic (red)",
"Plastic (blue)",
"Water",
}
local StringChoices = {}
for k, v in pairs(EnumMaterialNames) do
StringChoices[v] = k
end
local function getEnumFromName(choice)
if choice == "Grass" then
return 1
elseif choice == "Sand" then
return 2
elseif choice == "Erase" then
return 0
elseif choice == "Brick" then
return 3
elseif choice == "Granite" then
return 4
elseif choice == "Asphalt" then
return 5
elseif choice == "Iron" then
return 6
elseif choice == "Aluminum" then
return 7
elseif choice == "Gold" then
return 8
elseif choice == "Plank" then
return 9
elseif choice == "Log" then
return 10
elseif choice == "Gravel" then
return 11
elseif choice == "Cinder Block" then
return 12
elseif choice == "Stone Wall" then
return 13
elseif choice == "Concrete" then
return 14
elseif choice == "Plastic (red)" then
return 15
elseif choice == "Plastic (blue)" then
return 16
elseif choice == "Water" then
return 17
end
return
return StringChoices[choice]
end
local function getNameFromEnum(choice)
if choice == Enum.CellMaterial.Grass or choice == 1 then
return "Grass"
elseif choice == Enum.CellMaterial.Sand or choice == 2 then
return "Sand"
elseif choice == Enum.CellMaterial.Empty or choice == 0 then
return "Erase"
elseif choice == Enum.CellMaterial.Brick or choice == 3 then
return "Brick"
elseif choice == Enum.CellMaterial.Granite or choice == 4 then
return "Granite"
elseif choice == Enum.CellMaterial.Asphalt or choice == 5 then
return "Asphalt"
elseif choice == Enum.CellMaterial.Iron or choice == 6 then
return "Iron"
elseif choice == Enum.CellMaterial.Aluminum or choice == 7 then
return "Aluminum"
elseif choice == Enum.CellMaterial.Gold or choice == 8 then
return "Gold"
elseif choice == Enum.CellMaterial.WoodPlank or choice == 9 then
return "Plank"
elseif choice == Enum.CellMaterial.WoodLog or choice == 10 then
return "Log"
elseif choice == Enum.CellMaterial.Gravel or choice == 11 then
return "Gravel"
elseif choice == Enum.CellMaterial.CinderBlock or choice == 12 then
return "Cinder Block"
elseif choice == Enum.CellMaterial.MossyStone or choice == 13 then
return "Stone Wall"
elseif choice == Enum.CellMaterial.Cement or choice == 14 then
return "Concrete"
elseif choice == Enum.CellMaterial.RedPlastic or choice == 15 then
return "Plastic (red)"
elseif choice == Enum.CellMaterial.BluePlastic or choice == 16 then
return "Plastic (blue)"
elseif choice == Enum.CellMaterial.Water or choice == 17 then
return "Water"
end
return
return EnumMaterialNames[choice] or MaterialNames[choice]
end
RbxGui.CreateTerrainMaterialSelector = function(size, position)
@ -3741,25 +3711,6 @@ RbxGui.CreateTerrainMaterialSelector = function(size, position)
terrainMaterialSelectionChanged.Parent = frame
local materialToImageMap = {}
local materialNames = {
"Grass",
"Sand",
"Brick",
"Granite",
"Asphalt",
"Iron",
"Aluminum",
"Gold",
"Plank",
"Log",
"Gravel",
"Cinder Block",
"Stone Wall",
"Concrete",
"Plastic (red)",
"Plastic (blue)",
"Water",
}
local currentMaterial = 1
@ -3768,46 +3719,31 @@ RbxGui.CreateTerrainMaterialSelector = function(size, position)
terrainMaterialSelectionChanged:Fire(currentMaterial)
end
-- we so need a better way to do this
for _, v in pairs(materialNames) do
local toAdd
if v == "Grass" then
toAdd = 56563112
elseif v == "Sand" then
toAdd = 62356652
elseif v == "Brick" then
toAdd = 65961537
elseif v == "Granite" then
toAdd = 67532153
elseif v == "Asphalt" then
toAdd = 67532038
elseif v == "Iron" then
toAdd = 67532093
elseif v == "Aluminum" then
toAdd = 67531995
elseif v == "Gold" then
toAdd = 67532118
elseif v == "Plastic (red)" then
toAdd = 67531848
elseif v == "Plastic (blue)" then
toAdd = 67531924
elseif v == "Plank" then
toAdd = 67532015
elseif v == "Log" then
toAdd = 67532051
elseif v == "Gravel" then
toAdd = 67532206
elseif v == "Cinder Block" then
toAdd = 67532103
elseif v == "Stone Wall" then
toAdd = 67531804
elseif v == "Concrete" then
toAdd = 67532059
elseif v == "Water" then
toAdd = 81407474
else
toAdd = 66887593 -- fill in the rest here!!
for _, v in pairs(MaterialNames) do
local materials = {
Grass = 56563112,
Sand = 62356652,
Brick = 65961537,
Granite = 67532153,
Asphalt = 67532038,
Iron = 67532093,
Aluminum = 67531995,
Gold = 67532118,
["Plastic (red)"] = 67531848,
["Plastic (blue)"] = 67531924,
Plank = 67532015,
Log = 67532051,
Gravel = 67532206,
["Cinder Block"] = 67532103,
["Stone Wall"] = 67531804,
Concrete = 67532059,
Water = 81407474,
}
local toAdd = materials[v]
if not toAdd then
toAdd = 66887593
end
materialToImageMap[v] =
{ Regular = `http://banland.xyz/asset/?id={toAdd}` }
end
@ -3875,10 +3811,10 @@ RbxGui.CreateTerrainMaterialSelector = function(size, position)
return buttonWrap
end
for i = 1, #materialNames do
local imageButton = createMaterialButton(materialNames[i])
for i = 1, #MaterialNames do
local imageButton = createMaterialButton(MaterialNames[i])
if materialNames[i] == "Grass" then -- always start with grass as the default
if MaterialNames[i] == "Grass" then -- always start with grass as the default
selectedButton = imageButton
imageButton.BackgroundTransparency = 0
end
@ -3886,11 +3822,8 @@ RbxGui.CreateTerrainMaterialSelector = function(size, position)
imageButton.Parent = scrollFrame
end
local forceTerrainMaterialSelection = function(newMaterialType)
if not newMaterialType then
return
end
if currentMaterial == newMaterialType then
local function forceTerrainMaterialSelection(newMaterialType)
if not newMaterialType or currentMaterial == newMaterialType then
return
end
@ -3898,23 +3831,16 @@ RbxGui.CreateTerrainMaterialSelector = function(size, position)
local buttons = scrollFrame:GetChildren()
for i = 1, #buttons do
if
buttons[i].Name == "Plastic (blue)"
and matName == "Plastic (blue)"
(
buttons[i].Name == "Plastic (blue)"
and matName == "Plastic (blue)"
)
or (buttons[i].Name == "Plastic (red)" and matName == "Plastic (red)")
or string.find(buttons[i].Name, matName)
then
goToNewMaterial(buttons[i], matName)
return
end
if
buttons[i].Name == "Plastic (red)"
and matName == "Plastic (red)"
then
goToNewMaterial(buttons[i], matName)
return
end
if string.find(buttons[i].Name, matName) then
goToNewMaterial(buttons[i], matName)
return
end
end
end
@ -3948,21 +3874,13 @@ RbxGui.CreateLoadingFrame = function(name, size, position)
},
}
if size then
loadingFrame.Size = size
else
loadingFrame.Size = UDim2.new(0, 300, 0, 160)
end
if position then
loadingFrame.Position = position
else
loadingFrame.Position = UDim2.new(0.5, -150, 0.5, -80)
end
loadingFrame.Size = size or UDim2.new(0, 300, 0, 160)
loadingFrame.Position = position or UDim2.new(0.5, -150, 0.5, -80)
local loadingBar = New "Frame" {
Name = "LoadingBar",
BackgroundColor3 = Color3.new(0, 0, 0),
BorderColor3 = Color3.new(79 / 255, 79 / 255, 79 / 255),
BorderColor3 = Colour3(79, 79, 79),
Position = UDim2.new(0, 0, 0, 41),
Size = UDim2.new(1, 0, 0, 30),
Parent = loadingFrame,
@ -4096,7 +4014,7 @@ RbxGui.CreatePluginFrame = function(name, size, position, scrollable, parent)
Text = text,
TextColor3 = Color3.new(1, 1, 1),
BorderSizePixel = 0,
BackgroundColor3 = Color3.new(20 / 255, 20 / 255, 20 / 255),
BackgroundColor3 = Colour3(20, 20, 20),
}
button.MouseEnter:connect(function()
@ -4119,7 +4037,7 @@ RbxGui.CreatePluginFrame = function(name, size, position, scrollable, parent)
local dragBar = New "ImageButton" {
Name = `{name}DragBar`,
BackgroundColor3 = Color3.new(39 / 255, 39 / 255, 39 / 255),
BackgroundColor3 = Colour3(39, 39, 39),
BorderColor3 = Color3.new(0, 0, 0),
Active = true,
Draggable = true,
@ -4147,10 +4065,10 @@ RbxGui.CreatePluginFrame = function(name, size, position, scrollable, parent)
end
--dragBar.Visible = false
dragBar.MouseEnter:connect(function()
dragBar.BackgroundColor3 = Color3.new(49 / 255, 49 / 255, 49 / 255)
dragBar.BackgroundColor3 = Colour3(49, 49, 49)
end)
dragBar.MouseLeave:connect(function()
dragBar.BackgroundColor3 = Color3.new(39 / 255, 39 / 255, 39 / 255)
dragBar.BackgroundColor3 = Colour3(39, 39, 39)
end)
dragBar.Parent = parent
@ -4230,7 +4148,7 @@ RbxGui.CreatePluginFrame = function(name, size, position, scrollable, parent)
local minimizeFrame = New "Frame" {
Name = "MinimizeFrame",
BackgroundColor3 = Color3.new(73 / 255, 73 / 255, 73 / 255),
BackgroundColor3 = Colour3(73, 73, 73),
BorderColor3 = Color3.new(0, 0, 0),
Position = UDim2.new(0, 0, 1, 0),
Visible = false,
@ -4257,14 +4175,14 @@ RbxGui.CreatePluginFrame = function(name, size, position, scrollable, parent)
local separatingLine = New "Frame" {
Name = "SeparatingLine",
BackgroundColor3 = Color3.new(115 / 255, 115 / 255, 115 / 255),
BackgroundColor3 = Colour3(115, 115, 115),
BorderSizePixel = 0,
Position = UDim2.new(1, -18, 0.5, -7),
Size = UDim2.new(0, 1, 0, 14),
Parent = dragBar,
}
-- otherSeparatingLine
New(separatingLine:clone()) {
Hydrate(separatingLine:Clone()) {
Position = UDim2.new(1, -35, 0.5, -7),
Parent = dragBar,
}
@ -4277,8 +4195,7 @@ RbxGui.CreatePluginFrame = function(name, size, position, scrollable, parent)
}
if not scrollable then
widgetContainer.BackgroundTransparency = 0
widgetContainer.BackgroundColor3 =
Color3.new(72 / 255, 72 / 255, 72 / 255)
widgetContainer.BackgroundColor3 = Colour3(72, 72, 72)
end
widgetContainer.Parent = dragBar
@ -4308,15 +4225,15 @@ RbxGui.CreatePluginFrame = function(name, size, position, scrollable, parent)
if scrollable then
--frame for widgets
frame, control = RbxGui.CreateTrueScrollingFrame()
New(frame) {
Hydrate(frame) {
Size = UDim2.new(1, 0, 1, 0),
BackgroundColor3 = Color3.new(72 / 255, 72 / 255, 72 / 255),
BackgroundColor3 = Colour3(72, 72, 72),
BorderColor3 = Color3.new(0, 0, 0),
Active = true,
Parent = widgetContainer,
}
New(control) {
BackgroundColor3 = Color3.new(72 / 255, 72 / 255, 72 / 255),
Hydrate(control) {
BackgroundColor3 = Colour3(72, 72, 72),
BorderSizePixel = 0,
BackgroundTransparency = 0,
Position = UDim2.new(1, -21, 1, 1),
@ -4338,37 +4255,36 @@ RbxGui.CreatePluginFrame = function(name, size, position, scrollable, parent)
control.Parent = dragBar
local function scrubFrame()
return New "Frame" {
Name = "ScrubFrame",
BackgroundColor3 = Color3.new(1, 1, 1),
BorderSizePixel = 0,
Size = UDim2.new(0, 10, 0, 1),
ZIndex = 5,
}
end
verticalDragger = New "TextButton" {
ZIndex = 2,
AutoButtonColor = false,
Name = "VerticalDragger",
BackgroundColor3 = Color3.new(50 / 255, 50 / 255, 50 / 255),
BackgroundColor3 = Colour3(50, 50, 50),
BorderColor3 = Color3.new(0, 0, 0),
Size = UDim2.new(1, 20, 0, 20),
Position = UDim2.new(0, 0, 1, 0),
Active = true,
Text = "",
Parent = widgetContainer,
}
local scrubFrame = New "Frame" {
Name = "ScrubFrame",
BackgroundColor3 = Color3.new(1, 1, 1),
BorderSizePixel = 0,
Position = UDim2.new(0.5, -5, 0.5, 0),
Size = UDim2.new(0, 10, 0, 1),
ZIndex = 5,
Parent = verticalDragger,
}
-- scrubTwo
New(scrubFrame:clone()) {
Position = UDim2.new(0.5, -5, 0.5, -2),
Parent = verticalDragger,
}
-- scrubThree
New(scrubFrame:clone()) {
Position = UDim2.new(0.5, -5, 0.5, 2),
Parent = verticalDragger,
Hydrate(scrubFrame()) {
Position = UDim2.new(0.5, -5, 0.5, -2),
},
Hydrate(scrubFrame()) {
Position = UDim2.new(0.5, -5, 0.5, 0),
},
Hydrate(scrubFrame()) {
Position = UDim2.new(0.5, -5, 0.5, 2),
},
}
local areaSoak = New "TextButton" {
@ -4386,12 +4302,10 @@ RbxGui.CreatePluginFrame = function(name, size, position, scrollable, parent)
local draggingVertical = false
local startYPos
verticalDragger.MouseEnter:connect(function()
verticalDragger.BackgroundColor3 =
Color3.new(60 / 255, 60 / 255, 60 / 255)
verticalDragger.BackgroundColor3 = Colour3(60, 60, 60)
end)
verticalDragger.MouseLeave:connect(function()
verticalDragger.BackgroundColor3 =
Color3.new(50 / 255, 50 / 255, 50 / 255)
verticalDragger.BackgroundColor3 = Colour3(50, 50, 50)
end)
verticalDragger.MouseButton1Down:connect(function(_, y)
draggingVertical = true
@ -4448,11 +4362,7 @@ RbxGui.CreatePluginFrame = function(name, size, position, scrollable, parent)
widgetContainer.Visible = not widgetContainer.Visible
end
if minimizeFrame.Visible then
minimizeButton.Text = "+"
else
minimizeButton.Text = "-"
end
minimizeButton.Text = minimizeFrame.Visible and "+" or "-"
end
minimizeBigButton.MouseButton1Click:connect(function()
@ -4470,84 +4380,84 @@ RbxGui.CreatePluginFrame = function(name, size, position, scrollable, parent)
end
RbxGui.Help = function(funcNameOrFunc)
--input argument can be a string or a function. Should return a description (of arguments and expected side effects)
--input argument can be a string or a function. Should return a description (of arguments and expected side effects)
if
funcNameOrFunc == "CreatePropertyDropDownMenu"
or funcNameOrFunc == RbxGui.CreatePropertyDropDownMenu
then
return "Function CreatePropertyDropDownMenu. "
.. "Arguments: (instance, propertyName, enumType). "
return "Function CreatePropertyDropDownMenu. "
.. "Arguments: (instance, propertyName, enumType). "
.. "Side effect: returns a container with a drop-down-box that is linked to the 'property' field of 'instance' which is of type 'enumType'"
elseif
funcNameOrFunc == "CreateDropDownMenu"
or funcNameOrFunc == RbxGui.CreateDropDownMenu
then
return "Function CreateDropDownMenu. "
.. "Arguments: (items, onItemSelected). "
.. "Side effect: Returns 2 results, a container to the gui object and a 'updateSelection' function for external updating. The container is a drop-down-box created around a list of items"
return "Function CreateDropDownMenu. "
.. "Arguments: (items, onItemSelected). "
.. "Side effect: Returns 2 results, a container to the gui object and a 'updateSelection' function for external updating. The container is a drop-down-box created around a list of items"
elseif
funcNameOrFunc == "CreateMessageDialog"
or funcNameOrFunc == RbxGui.CreateMessageDialog
then
return "Function CreateMessageDialog. "
return "Function CreateMessageDialog. "
.. "Arguments: (title, message, buttons). "
.. "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button"
.. "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button"
elseif
funcNameOrFunc == "CreateStyledMessageDialog"
or funcNameOrFunc == RbxGui.CreateStyledMessageDialog
then
return "Function CreateStyledMessageDialog. "
return "Function CreateStyledMessageDialog. "
.. "Arguments: (title, message, style, buttons). "
.. "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button, 'style' is a string, either Error, Notify or Confirm"
.. "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button, 'style' is a string, either Error, Notify or Confirm"
elseif
funcNameOrFunc == "GetFontHeight"
or funcNameOrFunc == RbxGui.GetFontHeight
then
return "Function GetFontHeight. "
return "Function GetFontHeight. "
.. "Arguments: (font, fontSize). "
.. "Side effect: returns the size in pixels of the given font + fontSize"
elseif
funcNameOrFunc == "CreateScrollingFrame"
or funcNameOrFunc == RbxGui.CreateScrollingFrame
then
return "Function CreateScrollingFrame. "
return "Function CreateScrollingFrame. "
.. "Arguments: (orderList, style) "
.. "Side effect: returns 4 objects, (scrollFrame, scrollUpButton, scrollDownButton, recalculateFunction). 'scrollFrame' can be filled with GuiObjects. It will lay them out and allow scrollUpButton/scrollDownButton to interact with them. Orderlist is optional (and specifies the order to layout the children. Without orderlist, it uses the children order. style is also optional, and allows for a 'grid' styling if style is passed 'grid' as a string. recalculateFunction can be called when a relayout is needed (when orderList changes)"
.. "Side effect: returns 4 objects, (scrollFrame, scrollUpButton, scrollDownButton, recalculateFunction). 'scrollFrame' can be filled with GuiObjects. It will lay them out and allow scrollUpButton/scrollDownButton to interact with them. Orderlist is optional (and specifies the order to layout the children. Without orderlist, it uses the children order. style is also optional, and allows for a 'grid' styling if style is passed 'grid' as a string. recalculateFunction can be called when a relayout is needed (when orderList changes)"
elseif
funcNameOrFunc == "CreateTrueScrollingFrame"
or funcNameOrFunc == RbxGui.CreateTrueScrollingFrame
then
return "Function CreateTrueScrollingFrame. "
return "Function CreateTrueScrollingFrame. "
.. "Arguments: (nil) "
.. "Side effect: returns 2 objects, (scrollFrame, controlFrame). 'scrollFrame' can be filled with GuiObjects, and they will be clipped if not inside the frame's bounds. controlFrame has children scrollup and scrolldown, as well as a slider. controlFrame can be parented to any guiobject and it will readjust itself to fit."
.. "Side effect: returns 2 objects, (scrollFrame, controlFrame). 'scrollFrame' can be filled with GuiObjects, and they will be clipped if not inside the frame's bounds. controlFrame has children scrollup and scrolldown, as well as a slider. controlFrame can be parented to any guiobject and it will readjust itself to fit."
elseif
funcNameOrFunc == "AutoTruncateTextObject"
or funcNameOrFunc == RbxGui.AutoTruncateTextObject
then
return "Function AutoTruncateTextObject. "
return "Function AutoTruncateTextObject. "
.. "Arguments: (textLabel) "
.. "Side effect: returns 2 objects, (textLabel, changeText). The 'textLabel' input is modified to automatically truncate text (with ellipsis), if it gets too small to fit. 'changeText' is a function that can be used to change the text, it takes 1 string as an argument"
.. "Side effect: returns 2 objects, (textLabel, changeText). The 'textLabel' input is modified to automatically truncate text (with ellipsis), if it gets too small to fit. 'changeText' is a function that can be used to change the text, it takes 1 string as an argument"
elseif
funcNameOrFunc == "CreateSlider"
or funcNameOrFunc == RbxGui.CreateSlider
then
return "Function CreateSlider. "
return "Function CreateSlider. "
.. "Arguments: (steps, width, position) "
.. "Side effect: returns 2 objects, (sliderGui, sliderPosition). The 'steps' argument specifies how many different positions the slider can hold along the bar. 'width' specifies in pixels how wide the bar should be (modifiable afterwards if desired). 'position' argument should be a UDim2 for slider positioning. 'sliderPosition' is an IntValue whose current .Value specifies the specific step the slider is currently on."
.. "Side effect: returns 2 objects, (sliderGui, sliderPosition). The 'steps' argument specifies how many different positions the slider can hold along the bar. 'width' specifies in pixels how wide the bar should be (modifiable afterwards if desired). 'position' argument should be a UDim2 for slider positioning. 'sliderPosition' is an IntValue whose current .Value specifies the specific step the slider is currently on."
elseif
funcNameOrFunc == "CreateLoadingFrame"
or funcNameOrFunc == RbxGui.CreateLoadingFrame
then
return "Function CreateLoadingFrame. "
return "Function CreateLoadingFrame. "
.. "Arguments: (name, size, position) "
.. "Side effect: Creates a gui that can be manipulated to show progress for a particular action. Name appears above the loading bar, and size and position are udim2 values (both size and position are optional arguments). Returns 3 arguments, the first being the gui created. The second being updateLoadingGuiPercent, which is a bindable function. This function takes one argument (two optionally), which should be a number between 0 and 1, representing the percentage the loading gui should be at. The second argument to this function is a boolean value that if set to true will tween the current percentage value to the new percentage value, therefore our third argument is how long this tween should take. Our third returned argument is a BindableEvent, that when fired means that someone clicked the cancel button on the dialog."
.. "Side effect: Creates a gui that can be manipulated to show progress for a particular action. Name appears above the loading bar, and size and position are udim2 values (both size and position are optional arguments). Returns 3 arguments, the first being the gui created. The second being updateLoadingGuiPercent, which is a bindable function. This function takes one argument (two optionally), which should be a number between 0 and 1, representing the percentage the loading gui should be at. The second argument to this function is a boolean value that if set to true will tween the current percentage value to the new percentage value, therefore our third argument is how long this tween should take. Our third returned argument is a BindableEvent, that when fired means that someone clicked the cancel button on the dialog."
elseif
funcNameOrFunc == "CreateTerrainMaterialSelector"
or funcNameOrFunc == RbxGui.CreateTerrainMaterialSelector
then
return "Function CreateTerrainMaterialSelector. "
return "Function CreateTerrainMaterialSelector. "
.. "Arguments: (size, position) "
.. "Side effect: Size and position are UDim2 values that specifies the selector's size and position. Both size and position are optional arguments. This method returns 3 objects (terrainSelectorGui, terrainSelected, forceTerrainSelection). terrainSelectorGui is just the gui object that we generate with this function, parent it as you like. TerrainSelected is a BindableEvent that is fired whenever a new terrain type is selected in the gui. ForceTerrainSelection is a function that takes an argument of Enum.CellMaterial and will force the gui to show that material as currently selected."
.. "Side effect: Size and position are UDim2 values that specifies the selector's size and position. Both size and position are optional arguments. This method returns 3 objects (terrainSelectorGui, terrainSelected, forceTerrainSelection). terrainSelectorGui is just the gui object that we generate with this function, parent it as you like. TerrainSelected is a BindableEvent that is fired whenever a new terrain type is selected in the gui. ForceTerrainSelection is a function that takes an argument of Enum.CellMaterial and will force the gui to show that material as currently selected."
end
return "No help available for this function"
end

View File

@ -713,7 +713,7 @@ local function createGameMainMenu(baseZIndex, shield)
screenshotButton.Visible = not macClient
screenshotButton:SetVerb "Screenshot"
local screenshotShortcut = helpShortcut:clone()
local screenshotShortcut = helpShortcut:Clone()
screenshotShortcut.Name = "ScreenshotShortcutText"
screenshotShortcut.Text = "PrintSc"
screenshotShortcut.Position = UDim2.new(0, 118, 0, 0)
@ -733,7 +733,7 @@ local function createGameMainMenu(baseZIndex, shield)
recordVideoButton.Visible = not macClient
recordVideoButton:SetVerb "RecordToggle"
local recordVideoShortcut = helpShortcut:clone()
local recordVideoShortcut = helpShortcut:Clone()
recordVideoShortcut.Visible = hasGraphicsSlider
recordVideoShortcut.Name = "RecordVideoShortcutText"
recordVideoShortcut.Text = "F12"
@ -899,7 +899,7 @@ local function createGameSettingsMenu(baseZIndex, _)
studioText.BackgroundTransparency = 1
studioText.Parent = gameSettingsMenuFrame
local studioShortcut = fullscreenShortcut:clone()
local studioShortcut = fullscreenShortcut:Clone()
studioShortcut.Name = "StudioShortcutText"
studioShortcut.Visible = false -- TODO: turn back on when f2 hack is fixed
studioShortcut.Text = "F2"
@ -921,7 +921,7 @@ local function createGameSettingsMenu(baseZIndex, _)
qualityText.Parent = gameSettingsMenuFrame
qualityText.Visible = not inStudioMode
local autoText = qualityText:clone()
local autoText = qualityText:Clone()
autoText.Name = "AutoText"
autoText.Text = "Auto"
autoText.Position = UDim2.new(0, 183, 0, 214)
@ -930,7 +930,7 @@ local function createGameSettingsMenu(baseZIndex, _)
autoText.Parent = gameSettingsMenuFrame
autoText.Visible = not inStudioMode
local fasterText = autoText:clone()
local fasterText = autoText:Clone()
fasterText.Name = "FasterText"
fasterText.Text = "Faster"
fasterText.Position = UDim2.new(0, 185, 0, 274)
@ -939,14 +939,14 @@ local function createGameSettingsMenu(baseZIndex, _)
fasterText.Parent = gameSettingsMenuFrame
fasterText.Visible = not inStudioMode
local fasterShortcut = fullscreenShortcut:clone()
local fasterShortcut = fullscreenShortcut:Clone()
fasterShortcut.Name = "FasterShortcutText"
fasterShortcut.Text = "F10 + Shift"
fasterShortcut.Position = UDim2.new(0, 185, 0, 283)
fasterShortcut.Parent = gameSettingsMenuFrame
fasterShortcut.Visible = not inStudioMode
local betterQualityText = autoText:clone()
local betterQualityText = autoText:Clone()
betterQualityText.Name = "BetterQualityText"
betterQualityText.Text = "Better Quality"
betterQualityText.TextWrap = true
@ -957,7 +957,7 @@ local function createGameSettingsMenu(baseZIndex, _)
betterQualityText.Parent = gameSettingsMenuFrame
betterQualityText.Visible = not inStudioMode
local betterQualityShortcut = fullscreenShortcut:clone()
local betterQualityShortcut = fullscreenShortcut:Clone()
betterQualityShortcut.Name = "BetterQualityShortcut"
betterQualityShortcut.Text = "F10"
betterQualityShortcut.Position = UDim2.new(0, 394, 0, 288)

View File

@ -1,7 +1,7 @@
-- CoreGui.RobloxGui.CoreScripts/PlayerListScript
print "[Mercury]: Loaded corescript 48488235"
local New = require "../Modules/New"
local New = (require "../Modules/New").New
--------------------
-- Super Util

View File

@ -1,7 +1,9 @@
-- CoreGui.RobloxGui.CoreScripts/PopupScript
print "[Mercury]: Loaded corescript 48488451"
local New = require "../Modules/New"
local News = require "../Modules/New"
local New = News.New
local Hydrate = News.Hydrate
--build our gui
@ -39,7 +41,7 @@ local popupFrame = New "Frame" {
ZIndex = 5,
},
}
New(popupFrame:clone()) {
Hydrate(popupFrame:Clone()) {
Name = "Darken",
Size = UDim2.new(1, 16, 1, 16),
Position = UDim2.new(0, -8, 0, -8),
@ -58,13 +60,13 @@ local acceptButton = New "TextButton" {
ZIndex = 5,
Parent = popupFrame,
}
New(acceptButton:clone()) {
Hydrate(acceptButton:Clone()) {
Name = "DeclineButton",
Text = "No",
Position = UDim2.new(1, -120, 0, 270),
Parent = popupFrame,
}
New(acceptButton:clone()) {
Hydrate(acceptButton:Clone()) {
Name = "OKButton",
Text = "OK",
Position = UDim2.new(0.5, -50, 0, 270),

View File

@ -1,7 +1,9 @@
-- CoreGui.RobloxGui.CoreScripts/BackpackScripts/BackpackBuild
print "[Mercury]: Loaded corescript 53878047"
local New = require "../Modules/New"
local News = require "../Modules/New"
local New = News.New
local Hydrate = News.Hydrate
-- This script creates almost all gui elements found in the backpack (warning: there are a lot!)
-- TODO: automate this process
@ -159,13 +161,13 @@ local CurrentLoadout = New "Frame" {
ZIndex = 5.0,
},
SlotNumber(),
New(SlotNumber()) {
Hydrate(SlotNumber()) {
Name = "SlotNumberDownShadow",
TextColor3 = Color3.new(0, 0, 0),
Position = UDim2.new(0, 1, 0, -1),
ZIndex = 2,
},
New(SlotNumber()) {
Hydrate(SlotNumber()) {
Name = "SlotNumberUpShadow",
TextColor3 = Color3.new(0, 0, 0),
Position = UDim2.new(0, -1, 0, -1),
@ -184,7 +186,7 @@ New "ImageButton" {
Image = "http://banland.xyz/asset/?id=97617958",
Position = UDim2.new(0.5, -60, 1, -108),
Size = UDim2.new(0, 120, 0, 18),
Parent = gui.ControlFrame
Parent = gui.ControlFrame,
}
for i = 0, 9 do
@ -391,7 +393,7 @@ New "Frame" {
TextColor3 = Color3.new(1, 1, 1),
},
},
New(GearGridScrollingArea()) {
Hydrate(GearGridScrollingArea()) {
Name = "GearLoadoutsScrollingArea",
Position = UDim2.new(1, -15, 0.15, 2),
Size = UDim2.new(0, 17, 0.85, -2),
@ -451,17 +453,17 @@ New "Frame" {
Visible = false,
ZIndex = 9,
AttributeImage(),
New(AttributeImage()) {
Hydrate(AttributeImage()) {
Name = "AttributeOneImage",
BackgroundColor3 = Color3.new(1, 51 / 255, 0),
Position = UDim2.new(0.25, 0, 0, 0),
},
New(AttributeImage()) {
Hydrate(AttributeImage()) {
Name = "AttributeTwoImage",
BackgroundColor3 = Color3.new(153 / 255, 1, 153 / 255),
Position = UDim2.new(0.5, 0, 0, 0),
},
New(AttributeImage()) {
Hydrate(AttributeImage()) {
Name = "AttributeThreeImage",
BackgroundColor3 = Color3.new(0, 0.5, 0.5),
Position = UDim2.new(0.75, 0, 0, 0),

View File

@ -620,17 +620,16 @@ local function resolveDrag(gearClone, x, y)
local frames = frame.Parent:GetChildren()
for i = 1, #frames do
if frames[i]:IsA "Frame" then
if
pointInRectangle(
mousePoint,
frames[i].AbsolutePosition,
frames[i].AbsoluteSize
)
then
swapGear(gearClone, frames[i])
return true
end
if
frames[i]:IsA "Frame"
and pointInRectangle(
mousePoint,
frames[i].AbsolutePosition,
frames[i].AbsoluteSize
)
then
swapGear(gearClone, frames[i])
return true
end
end
@ -738,7 +737,7 @@ local function addingPlayerChild(
end
end
local gearClone = currentLoadout.TempSlot:clone()
local gearClone = currentLoadout.TempSlot:Clone()
gearClone.Name = child.Name
gearClone.GearImage.Image = child.TextureId
if gearClone.GearImage.Image == "" then
@ -1174,27 +1173,20 @@ delay(1, function()
end)
delay(2, function()
--while true do
if not backpackWasOpened then
if robloxGui.AbsoluteSize.Y <= 320 then
local cChildren = currentLoadout:GetChildren()
for i = 1, #cChildren do
local slotNum = tonumber(
string.sub(
cChildren[i].Name,
5,
string.len(cChildren[i].Name)
)
)
if type(slotNum) == "number" then
cChildren[i].Position =
UDim2.new(0, (slotNum - 1) * 60, 0, 0)
end
-- while true do
if not backpackWasOpened and robloxGui.AbsoluteSize.Y <= 320 then
local cChildren = currentLoadout:GetChildren()
for i = 1, #cChildren do
local slotNum = tonumber(
string.sub(cChildren[i].Name, 5, string.len(cChildren[i].Name))
)
if type(slotNum) == "number" then
cChildren[i].Position = UDim2.new(0, (slotNum - 1) * 60, 0, 0)
end
end
end
wait(0.25)
--end
-- end
end)
player.ChildAdded:connect(function(child)
@ -1288,27 +1280,25 @@ player.CharacterAdded:connect(function()
waitForChild(player, "PlayerGui")
moveHealthBar(player.PlayerGui)
delay(2, function()
--while true do
if not backpackWasOpened then
if robloxGui.AbsoluteSize.Y <= 320 then
local cChildren = currentLoadout:GetChildren()
for i = 1, #cChildren do
local slotNum = tonumber(
string.sub(
cChildren[i].Name,
5,
string.len(cChildren[i].Name)
)
-- while true do
if not backpackWasOpened and robloxGui.AbsoluteSize.Y <= 320 then
local cChildren = currentLoadout:GetChildren()
for i = 1, #cChildren do
local slotNum = tonumber(
string.sub(
cChildren[i].Name,
5,
string.len(cChildren[i].Name)
)
if type(slotNum) == "number" then
cChildren[i].Position =
UDim2.new(0, (slotNum - 1) * 60, 0, 0)
end
)
if type(slotNum) == "number" then
cChildren[i].Position =
UDim2.new(0, (slotNum - 1) * 60, 0, 0)
end
end
end
wait(0.25)
--end
-- end
end)
end)

View File

@ -1,6 +1,10 @@
-- RbxUtility
print "[Mercury]: Loaded corescript 60595411"
local News = require "../Modules/New"
local New = News.New
local Hydrate = News.Hydrate
local Terrain = game:GetService "Terrain"
local RbxUtility = {}
@ -66,14 +70,11 @@ RbxUtility.SelectTerrainRegion = function(
local emptyMaterial = Enum.CellMaterial.Empty
-- container for all adornments, passed back to user
local selectionContainer = Instance.new "Model"
selectionContainer.Name = "SelectionContainer"
selectionContainer.Archivable = false
if selectionParent then
selectionContainer.Parent = selectionParent
else
selectionContainer.Parent = game.Workspace
end
local selectionContainer = New "Model" {
Name = "SelectionContainer",
Archivable = false,
Parent = selectionParent or game.Workspace,
}
local updateSelection -- function we return to allow user to update selection
local currentKeepAliveTag -- a tag that determines whether adorns should be destroyed
@ -82,13 +83,14 @@ RbxUtility.SelectTerrainRegion = function(
local adornments = {} -- contains all adornments
local reusableAdorns = {}
local selectionPart = Instance.new "Part"
selectionPart.Name = "SelectionPart"
selectionPart.Transparency = 1
selectionPart.Anchored = true
selectionPart.Locked = true
selectionPart.CanCollide = false
selectionPart.Size = Vector3.new(4.2, 4.2, 4.2)
local selectionPart = New "Part" {
Name = "SelectionPart",
Transparency = 1,
Anchored = true,
Locked = true,
CanCollide = false,
Size = Vector3.new(4.2, 4.2, 4.2),
}
local selectionBox = Instance.new "SelectionBox"
@ -104,18 +106,15 @@ RbxUtility.SelectTerrainRegion = function(
selectionBoxClone.Visible = true
else
selectionPartClone = selectionPart:Clone()
selectionPartClone.Archivable = false
selectionPartClone = Hydrate(selectionPart:Clone()) {
Archivable = false,
}
selectionBoxClone = selectionBox:Clone()
selectionBoxClone.Archivable = false
selectionBoxClone.Adornee = selectionPartClone
selectionBoxClone.Parent = selectionContainer
selectionBoxClone.Adornee = selectionPartClone
selectionBoxClone.Parent = selectionContainer
selectionBoxClone = Hydrate(selectionBox:Clone()) {
Archivable = false,
Adornee = selectionPartClone,
Parent = selectionContainer,
}
end
if theColour then
@ -142,9 +141,7 @@ RbxUtility.SelectTerrainRegion = function(
-- helper function to update tag
local function incrementAliveCounter()
aliveCounter += 1
if aliveCounter > 1000000 then
aliveCounter = 0
end
aliveCounter %= 1000000
return aliveCounter
end
@ -238,7 +235,7 @@ RbxUtility.SelectTerrainRegion = function(
if selectionContainer then
selectionContainer:Destroy()
end
adornments = nil
adornments = {}
end
return updateSelection, destroyFunc
@ -597,7 +594,7 @@ RbxUtility.Help = function(funcNameOrFunc)
.. "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')."
.. 'for this library. EG: Help "Signal:connect".'
end
if funcNameOrFunc == "Signal:connect" then
return "Method Signal:connect. "
@ -635,7 +632,7 @@ RbxUtility.Help = function(funcNameOrFunc)
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 "
.. "Descrition: Create is a very powerful 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
return "No help available for this function"

View File

@ -45,7 +45,7 @@ end
--
-- Return:
-- cellPos - Cell position hit. Nil if none.
function GetTerrainForMouse(mouse)
local function GetTerrainForMouse(mouse)
-- There was no target, so all it could be is a plane intersection.
-- Check for a plane intersection. If there isn't one then nothing will get hit.
local cell = game.Workspace.Terrain:WorldToCellPreferSolid(
@ -896,13 +896,9 @@ RbxStamper.GetStampModel = function(assetId, terrainShape, useAssetVersionId)
if totalTime >= maxWait then
return nil, "Load Time Fail"
end
if root == nil then
elseif root == nil then
return nil, "Load Asset Fail"
end
if not root:IsA "Model" then
elseif not root:IsA "Model" then
return nil, "Load Type Fail"
end
@ -2997,6 +2993,7 @@ RbxStamper.Help = function(funcNameOrFunc)
then
return "Function SetupStamperDragger. Side Effect: Creates 4x4 stamping mechanism for building out parts quickly. Arguments: ModelToStamp, Mouse, LegalStampCheckFunction. ModelToStamp should be a Model or Part, preferrably loaded from RbxStamper.GetStampModel and should have extents that are multiples of 4. Mouse should be a mouse object (obtained from things such as Tool.OnEquipped), used to drag parts around 'stamp' them out. LegalStampCheckFunction is optional, used as a callback with a table argument (table is full of instances about to be stamped). Function should return either true or false, false stopping the stamp action."
end
return "No help available for this function"
end
return RbxStamper

View File

@ -1,6 +1,10 @@
-- CoreGui.RobloxGui.Backpack.CoreScripts/BackpackScripts/Back (2?)
print "[Mercury]: Loaded corescript 89449093"
local News = require "../Modules/New"
local New = News.New
local Hydrate = News.Hydrate
local GuiService = game:GetService "GuiService"
-- basic functions
@ -26,18 +30,17 @@ end
waitForProperty(game.Players, "LocalPlayer")
------------------------ Locals ------------------------------
local backpack = script.Parent
local backpack = script.Parent :: GuiObject
waitForChild(backpack, "Gear")
local screen = script.Parent.Parent
assert(screen:IsA "ScreenGui")
local screen = backpack.Parent :: ScreenGui
waitForChild(backpack, "Tabs")
waitForChild(backpack.Tabs, "CloseButton")
local closeButton = backpack.Tabs.CloseButton
waitForChild(backpack.Tabs, "InventoryButton")
local inventoryButton = backpack.Tabs.InventoryButton
local inventoryButton: TextButton = backpack.Tabs.InventoryButton
waitForChild(backpack.Parent, "ControlFrame")
local backpackButton =
@ -78,100 +81,48 @@ end
---------------------------------------- Public Event Setup ----------------------------------------
function createPublicEvent(eventName)
assert(eventName, "eventName is nil")
assert(tostring(eventName), "eventName is not a string")
local newEvent = Instance.new "BindableEvent"
newEvent.Name = tostring(eventName)
newEvent.Parent = script
return newEvent
function publicEvent(eventName: string)
return New "BindableEvent" {
Name = eventName,
Parent = script,
}
end
function createPublicFunction(funcName, invokeFunc)
assert(funcName, "funcName is nil")
assert(tostring(funcName), "funcName is not a string")
assert(invokeFunc, "invokeFunc is nil")
assert(
type(invokeFunc) == "function",
"invokeFunc should be of type 'function'"
)
local newFunction = Instance.new "BindableFunction"
newFunction.Name = tostring(funcName)
newFunction.OnInvoke = invokeFunc
newFunction.Parent = script
return newFunction
function publicFunction(funcName: string, invokeFunc: () -> ())
return New "BindableFunction" {
Name = funcName,
OnInvoke = invokeFunc,
Parent = script,
}
end
-- Events
local resizeEvent = createPublicEvent "ResizeEvent"
local backpackOpenEvent = createPublicEvent "BackpackOpenEvent"
local backpackCloseEvent = createPublicEvent "BackpackCloseEvent"
local tabClickedEvent = createPublicEvent "TabClickedEvent"
local searchRequestedEvent = createPublicEvent "SearchRequestedEvent"
local resizeEvent = publicEvent "ResizeEvent"
local backpackOpenEvent = publicEvent "BackpackOpenEvent"
local backpackCloseEvent = publicEvent "BackpackCloseEvent"
local tabClickedEvent = publicEvent "TabClickedEvent"
local searchRequestedEvent = publicEvent "SearchRequestedEvent"
---------------------------------------- End Public Event Setup ----------------------------------------
--------------------------- Internal Functions ----------------------------------------
function deactivateBackpack()
local function deactivateBackpack()
backpack.Visible = false
active = false
end
function initHumanoidDiedConnections()
local function initHumanoidDiedConnections()
if humanoidDiedCon then
humanoidDiedCon:disconnect()
end
waitForProperty(game.Players.LocalPlayer, "Character")
waitForChild(game.Players.LocalPlayer.Character, "Humanoid")
humanoidDiedCon = game.Players.LocalPlayer.Character.Humanoid.Died:connect(
deactivateBackpack
)
local localPlayer = game.Players.LocalPlayer
waitForChild(localPlayer.Character, "Humanoid")
humanoidDiedCon =
localPlayer.Character.Humanoid.Died:connect(deactivateBackpack)
end
function activateBackpack()
initHumanoidDiedConnections()
active = true
backpack.Visible = backpackIsOpen
if backpackIsOpen then
toggleBackpack()
end
end
local hideBackpack = function()
backpackIsOpen = false
readyForNextEvent = false
backpackButton.Selected = false
resetSearch()
backpackCloseEvent:Fire(currentTab)
backpack.Tabs.Visible = false
searchFrame.Visible = false
backpack:TweenSizeAndPosition(
UDim2.new(0, backpackSize.X.Offset, 0, 0),
UDim2.new(0.5, -backpackSize.X.Offset / 2, 1, -85),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quad,
guiTweenSpeed,
true,
function()
game.GuiService:RemoveCenterDialog(backpack)
backpack.Visible = false
backpackButton.Selected = false
end
)
delay(guiTweenSpeed, function()
game.GuiService:RemoveCenterDialog(backpack)
backpack.Visible = false
backpackButton.Selected = false
readyForNextEvent = true
canToggle = true
end)
end
function showBackpack()
local function showBackpack()
game.GuiService:AddCenterDialog(
backpack,
Enum.CenterDialogType.PlayerInitiatedDialog,
@ -211,17 +162,45 @@ function showBackpack()
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
local function hideBackpack()
backpackIsOpen = false
readyForNextEvent = false
backpackButton.Selected = false
resetSearch()
backpackCloseEvent:Fire(currentTab)
backpack.Tabs.Visible = false
searchFrame.Visible = false
backpack:TweenSizeAndPosition(
UDim2.new(0, backpackSize.X.Offset, 0, 0),
UDim2.new(0.5, -backpackSize.X.Offset / 2, 1, -85),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quad,
guiTweenSpeed,
true,
function()
game.GuiService:RemoveCenterDialog(backpack)
backpack.Visible = false
backpackButton.Selected = false
end
)
delay(guiTweenSpeed, function()
game.GuiService:RemoveCenterDialog(backpack)
backpack.Visible = false
backpackButton.Selected = false
readyForNextEvent = true
canToggle = true
end)
end
local function toggleBackpack()
if
not (
game.Players.LocalPlayer
and game.Players.LocalPlayer.Character
and canToggle
and readyForNextEvent
)
then
return
end
readyForNextEvent = false
@ -230,20 +209,26 @@ function toggleBackpack()
backpackIsOpen = not backpackIsOpen
if backpackIsOpen then
loadoutBackground.Image = "http://banland.xyz/asset/?id=97623721"
loadoutBackground.Position = UDim2.new(-0.03, 0, -0.17, 0)
loadoutBackground.Size = UDim2.new(1.05, 0, 1.25, 0)
loadoutBackground.ZIndex = 2.0
loadoutBackground.Visible = true
Hydrate(loadoutBackground) {
Image = "http://banland.xyz/asset/?id=97623721",
Position = UDim2.new(-0.03, 0, -0.17, 0),
Size = UDim2.new(1.05, 0, 1.25, 0),
ZIndex = 2.0,
Visible = true,
}
showBackpack()
else
backpackButton.Position = UDim2.new(0.5, -60, 1, -44)
loadoutBackground.Visible = false
backpackButton.Selected = false
backpackButton.Image = "http://banland.xyz/asset/?id=97617958"
loadoutBackground.Image = "http://banland.xyz/asset/?id=96536002"
loadoutBackground.Position = UDim2.new(-0.1, 0, -0.1, 0)
loadoutBackground.Size = UDim2.new(1.2, 0, 1.2, 0)
Hydrate(backpackButton) {
Position = UDim2.new(0.5, -60, 1, -44),
Selected = false,
Image = "http://banland.xyz/asset/?id=97617958",
}
Hydrate(loadoutBackground) {
Visible = false,
Image = "http://banland.xyz/asset/?id=96536002",
Position = UDim2.new(-0.1, 0, -0.1, 0),
Size = UDim2.new(1.2, 0, 1.2, 0),
}
hideBackpack()
local clChildren = currentLoadout:GetChildren()
@ -265,98 +250,57 @@ function toggleBackpack()
end
end
function closeBackpack()
local function activateBackpack()
initHumanoidDiedConnections()
active = true
backpack.Visible = backpackIsOpen
if backpackIsOpen then
toggleBackpack()
end
end
function setSelected(tab)
assert(tab)
assert(tab:IsA "TextButton")
tab.BackgroundColor3 = Color3.new(1, 1, 1)
tab.TextColor3 = Color3.new(0, 0, 0)
tab.Selected = true
tab.ZIndex = 3
local function closeBackpack()
if backpackIsOpen then
toggleBackpack()
end
end
function setUnselected(tab)
assert(tab)
assert(tab:IsA "TextButton")
tab.BackgroundColor3 = Color3.new(0, 0, 0)
tab.TextColor3 = Color3.new(1, 1, 1)
tab.Selected = false
tab.ZIndex = 1
end
function updateTabGui(selectedTab)
assert(selectedTab)
local function updateTabGui(selectedTab: string)
if selectedTab == "gear" then
setSelected(inventoryButton)
-- Selected
Hydrate(inventoryButton) {
BackgroundColor3 = Color3.new(1, 1, 1),
TextColor3 = Color3.new(0, 0, 0),
Selected = true,
ZIndex = 3,
}
elseif selectedTab == "wardrobe" then
setUnselected(inventoryButton)
-- Unselected
Hydrate(inventoryButton) {
BackgroundColor3 = Color3.new(0, 0, 0),
TextColor3 = Color3.new(1, 1, 1),
Selected = false,
ZIndex = 1,
}
end
end
function mouseLeaveTab(button)
assert(button)
assert(button:IsA "TextButton")
if button.Selected then
return
end
button.BackgroundColor3 = Color3.new(0, 0, 0)
end
function mouseOverTab(button)
assert(button)
assert(button:IsA "TextButton")
if button.Selected then
return
end
button.BackgroundColor3 = Color3.new(39 / 255, 39 / 255, 39 / 255)
end
function newTabClicked(tabName)
assert(tabName)
tabName = string.lower(tabName)
currentTab = tabName
updateTabGui(tabName)
tabClickedEvent:Fire(tabName)
local function newTabClicked()
updateTabGui(currentTab)
tabClickedEvent:Fire(currentTab)
resetSearch()
end
function trim(s)
local function trim(s)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
-- function splitByWhitespace(text)
-- if type(text) ~= "string" then
-- return nil
-- end
-- local terms = {}
-- for token in string.gmatch(text, "[^%s]+") do
-- if string.len(token) > 0 then
-- table.insert(terms, token)
-- end
-- end
-- return terms
-- end
function resetSearchBoxGui()
local function resetSearchBoxGui()
resetButton.Visible = false
searchBox.Text = searchDefaultText
end
function doSearch()
local function doSearch()
local searchText = searchBox.Text
if searchText == "" then
resetSearch()
@ -364,7 +308,6 @@ function doSearch()
end
searchText = trim(searchText)
resetButton.Visible = true
-- termTable = splitByWhitespace(searchText)
searchRequestedEvent:Fire(searchText) -- todo: replace this with termtable when table passing is possible
end
@ -407,9 +350,8 @@ end
--------------------------- End Internal Functions -------------------------------------
------------------------------ Public Functions Setup -------------------------------------
createPublicFunction("CloseBackpack", hideBackpack)
createPublicFunction("BackpackReady", backpackReady)
------------------------------ End Public Functions Setup ---------------------------------
publicFunction("CloseBackpack", hideBackpack)
publicFunction("BackpackReady", backpackReady)
------------------------ Connections/Script Main -------------------------------------------
@ -421,14 +363,20 @@ pcall(function()
Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged)
end)
inventoryButton.MouseButton1Click:connect(function()
newTabClicked "gear"
end)
inventoryButton.MouseButton1Click:connect(newTabClicked)
inventoryButton.MouseEnter:connect(function()
mouseOverTab(inventoryButton)
if inventoryButton.Selected then
return
end
inventoryButton.BackgroundColor3 = Color3.new(39 / 255, 39 / 255, 39 / 255)
end)
inventoryButton.MouseLeave:connect(function()
mouseLeaveTab(inventoryButton)
if inventoryButton.Selected then
return
end
inventoryButton.BackgroundColor3 = Color3.new(0, 0, 0)
end)
closeButton.MouseButton1Click:connect(closeBackpack)
@ -445,8 +393,7 @@ GuiService:AddKey(backtick)
GuiService.KeyPressed:connect(function(key)
if not active or disabledByDeveloper then
return
end
if key == tilde or key == backtick then
elseif key == tilde or key == backtick then
toggleBackpack()
end
end)

View File

@ -8,7 +8,8 @@ print "[Mercury]: Loaded corescript 97188756"
//NOTE: If you find any bugs or inaccuracies PM Sorcus on Roblox or @Canavus on Twitter
]]
local SafeChat = require "../Modules/Safechat.yml"
local SafeChat = require "../Modules/Safechat.yml" -- THANK YOU DARKLUA
local New = (require "../Modules/New").New
local forceChatGUI = false
@ -53,14 +54,13 @@ local Player = Game.Players.LocalPlayer
while Player.Character == nil do
wait(0.03)
end
local RbxUtility = LoadLibrary "RbxUtility"
local Create = RbxUtility.Create
local Camera = Game.Workspace.CurrentCamera
-- Services
local CoreGuiService = Game:GetService "CoreGui"
local PlayersService = Game:GetService "Players"
local GuiService = Game:GetService "GuiService"
local UserInputService = Game:GetService "UserInputService"
-- Lua Enums
local Enums, CreateEnum
@ -119,7 +119,6 @@ end
local Input = {
Mouse = Player:GetMouse(),
Speed = 0,
Simulating = false,
Configuration = {
DefaultSpeed = 1,
@ -252,38 +251,46 @@ end
-- end
-- end
-- Check if we are running on a touch device
function Chat:IsTouchDevice()
local touchEnabled = false
pcall(function()
touchEnabled = Game:GetService("UserInputService").TouchEnabled
end)
return touchEnabled
end
-- Scrolling
-- function Chat:ScrollQueue(value)
-- for i = 1, #self.MessageQueue do
-- if self.MessageQueue[i] then
-- for _, label in pairs(self.MessageQueue[i]) do
-- local next = self.MessageQueue[i].Next
-- local previous = self.MessageQueue[i].Previous
-- if
-- label and label:IsA "TextLabel" or label:IsA "TextButton"
-- then
-- if value > 0 and previous and previous.Message then
-- label.Position = previous["Message"].Position
-- elseif value < 1 and next.Message then
-- label.Position = previous["Message"].Position
-- end
-- end
-- end
-- end
-- end
-- end
function Chat:ScrollQueue(value)
for i = 1, #self.MessageQueue do
if self.MessageQueue[i] then
for _, label in pairs(self.MessageQueue[i]) do
local Next = self.MessageQueue[i + 1]
local Previous = self.MessageQueue[i - 1]
if
label
and type(label) == "userdata" -- until i figure out what's going on
and (label:IsA "TextLabel" or label:IsA "TextButton")
then
print(
"scrolling",
value,
"|",
Previous,
"|",
Previous and Previous.message or "none",
"|",
Next,
"|",
Next and Next.message or "none"
)
-- if value > 0 and Previous and Previous.Message then
-- -- label.Position = previous.Message.Position
-- label.Position += UDim2.new(0, 0, 1, 0)
-- elseif value < 1 and Next.Message then
-- -- label.Position = previous.Message.Position
-- label.Position -= UDim2.new(0, 0, 1, 0)
-- end
end
end
end
end
end
-- Handles the rendering of the text objects in their appropriate places
function Chat:UpdateQueue(field, diff)
print "Updating queue"
-- Have to do some sort of correction here
for i = #self.MessageQueue, 1, -1 do
if self.MessageQueue[i] then
@ -356,15 +363,15 @@ function Chat:CheckIfInBounds(value)
if
value > 0
and Chat.MessageQueue[1]
and Chat.MessageQueue[1]["Player"]
and Chat.MessageQueue[1]["Player"].Position.Y.Scale == 0
and Chat.MessageQueue[1].Player
and Chat.MessageQueue[1].Player.Position.Y.Scale == 0
then
return true
elseif
value < 0
and Chat.MessageQueue[1]
and Chat.MessageQueue[1]["Player"]
and Chat.MessageQueue[1]["Player"].Position.Y.Scale < 0
and Chat.MessageQueue[1].Player
and Chat.MessageQueue[1].Player.Position.Y.Scale < 0
then
return true
end
@ -376,7 +383,7 @@ end
function Chat:ComputeSpaceString(pLabel)
local nString = " "
if not self.TempSpaceLabel then
self.TempSpaceLabel = Create "TextButton" {
self.TempSpaceLabel = New "TextButton" {
Size = UDim2.new(
0,
pLabel.AbsoluteSize.X,
@ -427,31 +434,24 @@ function Chat:UpdateChat(cPlayer, message)
end
-- function Chat:RecalculateSpacing()
--[[for i = 1, #self.MessageQueue do
local pLabel = self.MessageQueue[i]['Player']
local mLabel = self.MessageQueue[i]['Message']
-- for i = 1, #self.MessageQueue do
-- local pLabel = self.MessageQueue[i].Player
-- local mLabel = self.MessageQueue[i].Message
local prevYScale = mLabel.Size.Y.Scale
local prevText = mLabel.Text
mLabel.Text = prevText
-- local prevYScale = mLabel.Size.Y.Scale
-- local prevText = mLabel.Text
-- mLabel.Text = prevText
local heightField = mLabel.TextBounds.Y
-- local heightField = mLabel.TextBounds.Y
mLabel.Size = UDim2.new(1, 0, heightField/self.RenderFrame.AbsoluteSize.Y, 0)
pLabel.Size = mLabel.Size
-- mLabel.Size =
-- UDim2.new(1, 0, heightField / self.RenderFrame.AbsoluteSize.Y, 0)
-- pLabel.Size = mLabel.Size
local diff = mLabel.Size.Y.Scale - prevYScale
-- local diff = mLabel.Size.Y.Scale - prevYScale
Chat:UpdateQueue(self.MessageQueue[i], diff)
end ]]
-- end
-- function Chat:ApplyFilter(str)
-- --[[for _, word in pair(self.Filter_List) do
-- if string.find(str, word) then
-- str:gsub(word, '@#$^')
-- end
-- end ]]
-- Chat:UpdateQueue(self.MessageQueue[i], diff)
-- end
-- end
-- NOTE: Temporarily disabled ring buffer to allow for chat to always wrap around
@ -469,43 +469,42 @@ function Chat:CreateMessage(cPlayer, message)
-- If we ever hit the mark, which would be in every popular game btw
-- we wrap around and reuse the labels
if #self.MessageQueue > self.Configuration.HistoryLength then
--[[pLabel = self.MessageQueue[#self.MessageQueue]["Player"]
mLabel = self.MessageQueue[#self.MessageQueue]["Message"]
-- pLabel = self.MessageQueue[#self.MessageQueue].Player
-- mLabel = self.MessageQueue[#self.MessageQueue].Message
pLabel.Text = `{pName}:`
pLabel.Name = pName
-- pLabel.Text = `{pName}:`
-- pLabel.Name = pName
local pColor
if cPlayer.Neutral then
pLabel.TextColor3 = Chat:ComputeChatColor(pName)
else
pLabel.TextColor3 = cPlayer.TeamColor.Color
end
-- if cPlayer.Neutral then
-- pLabel.TextColor3 = Chat:ComputeChatColor(pName)
-- else
-- pLabel.TextColor3 = cPlayer.TeamColor.Color
-- end
local nString
-- local nString
if not self.CachedSpaceStrings_List[pName] then
nString = Chat:ComputeSpaceString(pLabel)
else
nString = self.CachedSpaceStrings_List[pName]
end
-- if not self.CachedSpaceStrings_List[pName] then
-- nString = Chat:ComputeSpaceString(pLabel)
-- else
-- nString = self.CachedSpaceStrings_List[pName]
-- end
mLabel.Text = ""
mLabel.Name = `{pName} - message`
mLabel.Text = nString .. message
-- mLabel.Text = ""
-- mLabel.Name = `{pName} - message`
-- mLabel.Text = nString .. message
mLabel.Parent = nil
mLabel.Parent = self.RenderFrame
-- mLabel.Parent = nil
-- mLabel.Parent = self.RenderFrame
mLabel.Position = UDim2.new(0, 0, 1, 0)
pLabel.Position = UDim2.new(0, 0, 1, 0)]]
-- mLabel.Position = UDim2.new(0, 0, 1, 0)
-- pLabel.Position = UDim2.new(0, 0, 1, 0)
-- Reinserted at the beginning, ring buffer
self.MessageQueue[#self.MessageQueue] = nil
end
--else
-- Haven't hit the mark yet, so keep creating
pLabel = Create "TextLabel" {
pLabel = New "TextLabel" {
Name = pName,
Text = `{pName}:`,
-- TextColor3 = pColor,
@ -537,7 +536,7 @@ function Chat:CreateMessage(cPlayer, message)
nString = self.CachedSpaceStrings_List[pName]
end
mLabel = Create "TextLabel" {
mLabel = New "TextLabel" {
Name = `{pName} - message`,
-- Max is 3 lines
Size = UDim2.new(1, 0, 0.5, 0),
@ -580,10 +579,11 @@ function Chat:CreateMessage(cPlayer, message)
UDim2.new(1, 0, heightField / self.RenderFrame.AbsoluteSize.Y, 0)
pLabel.Size = mLabel.Size
local queueField = {}
queueField.Player = pLabel
queueField.Message = mLabel
queueField.SpawnTime = tick() -- Used for identifying when to make the message invisible
local queueField = {
Player = pLabel,
Message = mLabel,
SpawnTime = tick(), -- Used for identifying when to make the message invisible
}
table.insert(self.MessageQueue, 1, queueField)
Chat:UpdateQueue(queueField)
@ -631,7 +631,7 @@ function Chat:CreateSafeChatOptions(list, rootButton)
rootButton = rootButton or self.SafeChatButton
for msg, _ in pairs(list) do
if type(msg) == "string" then
local chatText = Create "TextButton" {
local chatText = New "TextButton" {
Name = msg,
Text = msg,
Size = UDim2.new(0, 100, 0, 20),
@ -682,13 +682,13 @@ function Chat:CreateSafeChatOptions(list, rootButton)
end
function Chat:CreateSafeChatGui()
self.SafeChatFrame = Create "Frame" {
self.SafeChatFrame = New "Frame" {
Name = "SafeChatFrame",
Size = UDim2.new(1, 0, 1, 0),
Parent = self.Gui,
BackgroundTransparency = 1,
Create "ImageButton" {
New "ImageButton" {
Name = "SafeChatButton",
Size = UDim2.new(0, 44, 0, 31),
Position = UDim2.new(0, 1, 0.35, 0),
@ -721,21 +721,21 @@ end
-- For touch devices we create a button instead
function Chat:CreateTouchButton()
self.ChatTouchFrame = Create "Frame" {
self.ChatTouchFrame = New "Frame" {
Name = "ChatTouchFrame",
Size = UDim2.new(0, 128, 0, 32),
Position = UDim2.new(0, 88, 0, 0),
BackgroundTransparency = 1,
Parent = self.Gui,
Create "ImageButton" {
New "ImageButton" {
Name = "ChatLabel",
Size = UDim2.new(0, 74, 0, 28),
Position = UDim2.new(0, 0, 0, 0),
BackgroundTransparency = 1,
ZIndex = 2.0,
},
Create "ImageLabel" {
New "ImageLabel" {
Name = "Background",
Size = UDim2.new(1, 0, 1, 0),
Position = UDim2.new(0, 0, 0, 0),
@ -746,7 +746,7 @@ function Chat:CreateTouchButton()
self.TapToChatLabel = self.ChatTouchFrame.ChatLabel
self.TouchLabelBackground = self.ChatTouchFrame.Background
self.ChatBar = Create "TextBox" {
self.ChatBar = New "TextBox" {
Name = "ChatBar",
Size = UDim2.new(1, 0, 0.2, 0),
Position = UDim2.new(0, 0, 0.8, 800),
@ -778,7 +778,7 @@ function Chat:CreateChatBar()
return GuiService.UseLuaChat
end)
if forceChatGUI or (status and result) then
self.ClickToChatButton = Create "TextButton" {
self.ClickToChatButton = New "TextButton" {
Name = "ClickToChat",
Size = UDim2.new(1, 0, 0, 20),
BackgroundTransparency = 1,
@ -791,7 +791,7 @@ function Chat:CreateChatBar()
FontSize = Enum.FontSize.Size12,
}
self.ChatBar = Create "TextBox" {
self.ChatBar = New "TextBox" {
Name = "ChatBar",
Size = UDim2.new(1, 0, 0, 20),
Position = UDim2.new(0, 0, 1, 0),
@ -814,7 +814,7 @@ function Chat:CreateChatBar()
if not success then
GuiService:SetGlobalSizeOffsetPixel(0, -20)
end
-- CHatHotKey is '/'
-- ChatHotKey is '/'
GuiService:AddSpecialKey(Enum.SpecialKey.ChatHotkey)
GuiService.SpecialKeyPressed:connect(function(key)
if key == Enum.SpecialKey.ChatHotkey then
@ -832,7 +832,7 @@ end
-- Done only once
function Chat:CreateGui()
self.Gui = WaitForChild(CoreGuiService, "RobloxGui")
self.Frame = Create "Frame" {
self.Frame = New "Frame" {
Name = "ChatFrame",
--Size = self.Configuration.Size;
Size = UDim2.new(0, 500, 0, 120),
@ -843,7 +843,7 @@ function Chat:CreateGui()
Parent = self.Gui,
Active = false,
Create "ImageLabel" {
New "ImageLabel" {
Name = "Background",
Image = "http://banland.xyz/asset/?id=97120937", --96551212';
Size = UDim2.new(1.3, 0, 1.64, 0),
@ -853,7 +853,7 @@ function Chat:CreateGui()
Visible = false,
},
Create "Frame" {
New "Frame" {
Name = "Border",
Size = UDim2.new(1, 0, 0, 1),
Position = UDim2.new(0, 0, 0.8, 0),
@ -863,7 +863,7 @@ function Chat:CreateGui()
Visible = false,
},
Create "Frame" {
New "Frame" {
Name = "ChatRenderFrame",
Size = UDim2.new(1.02, 0, 1.01, 0),
Position = UDim2.new(0, 0, 0, 0),
@ -882,10 +882,7 @@ function Chat:CreateGui()
end)
self.RenderFrame = self.Frame.ChatRenderFrame
if Chat:IsTouchDevice() then
self.Frame.Position = self.Configuration.Position
self.RenderFrame.Size = UDim2.new(1, 0, 1, 0)
elseif self.Frame.AbsoluteSize.Y > 120 then
if self.Frame.AbsoluteSize.Y > 120 then
Chat:ScreenSizeChanged()
self.Gui.Changed:connect(function(property)
if property == "AbsoluteSize" then
@ -895,35 +892,19 @@ function Chat:CreateGui()
end
if forceChatGUI or Player.ChatMode == Enum.ChatMode.TextAndMenu then
if Chat:IsTouchDevice() then
Chat:CreateTouchButton()
else
Chat:CreateChatBar()
--Chat:CreateSafeChatGui()
end
Chat:CreateChatBar()
-- Chat:CreateSafeChatGui()
if self.ChatBar then
self.ChatBar.FocusLost:connect(function(enterPressed)
Chat.GotFocus = false
if Chat:IsTouchDevice() then
self.ChatBar.Visible = false
self.TapToChatLabel.Visible = true
if self.TouchLabelBackground then
self.TouchLabelBackground.Visible = true
end
end
if enterPressed and self.ChatBar.Text ~= "" then
local cText = self.ChatBar.Text
if string.sub(self.ChatBar.Text, 1, 1) == "%" then
cText = "(TEAM) " .. string.sub(cText, 2, #cText)
pcall(function()
PlayersService:TeamChat(cText)
end)
pcall(PlayersService.TeamChat, PlayersService, cText)
else
pcall(function()
PlayersService:Chat(cText)
end)
pcall(PlayersService.Chat, PlayersService, cText)
end
if self.ClickToChatButton then
@ -932,7 +913,7 @@ function Chat:CreateGui()
self.ChatBar.Text = ""
end
Spawn(function()
wait(5.0)
wait(5)
if not Chat.GotFocus then
Chat.Frame.Background.Visible = false
end
@ -965,14 +946,12 @@ function Input:OnMouseScroll()
if Chat:CheckIfInBounds(Input.Speed) then
return
end
-- Chat:ScrollQueue()
Chat:ScrollQueue(Input.Speed)
end
function Input:ApplySpeed(value)
Input.Speed += value
if not self.Simulating then
Input:OnMouseScroll()
end
Input:OnMouseScroll()
end
function Input:Initialize()
@ -1080,7 +1059,7 @@ function Chat:CoreGuiChanged(coreGuiType, enabled)
self.Frame.Visible = enabled
end
if not Chat:IsTouchDevice() and self.ChatBar then
if self.ChatBar then
self.ChatBar.Visible = enabled
if enabled then
GuiService:SetGlobalGuiInset(0, 0, 0, 20)

View File

@ -2,6 +2,7 @@
local ThumbnailGenerator = game:GetService "ThumbnailGenerator"
local RenderModule = require "../Modules/Render.luau"
local New = (require "../Modules/New").New
local Render = RenderModule(_BASE_URL, _PING_URL, _THUMBNAIL_KEY) -- avoid ambiguous syntax after compilation
local player =
@ -18,12 +19,13 @@ local CameraAngle = player.Character.Head.CFrame
local CameraPosition = CameraAngle
+ CFrame.Angles(0, math.pi, 0).lookVector.unit * 2.75
local Camera = Instance.new "Camera"
Camera.Name = "ThumbnailCamera"
Camera.CameraType = Enum.CameraType.Scriptable
Camera.CoordinateFrame = CFrame.new(CameraPosition.p, CameraAngle.p)
Camera.FieldOfView = 52.5
Camera.Parent = player.Character
local Camera = New "Camera" {
Name = "ThumbnailCamera",
CameraType = Enum.CameraType.Scriptable,
CoordinateFrame = CFrame.new(CameraPosition.p, CameraAngle.p),
FieldOfView = 52.5,
Parent = player.Character,
}
workspace.CurrentCamera = Camera
local clickHead = ThumbnailGenerator:Click("PNG", 300, 300, true)