1963 lines
68 KiB
Plaintext
1963 lines
68 KiB
Plaintext
%5%
|
|
local function waitForChild(instance, name)
|
|
while not instance:FindFirstChild(name) do
|
|
instance.ChildAdded:wait()
|
|
end
|
|
end
|
|
|
|
local function waitForProperty(instance, property)
|
|
while not instance[property] do
|
|
instance.Changed:wait()
|
|
end
|
|
end
|
|
|
|
-- A Few Script Globals
|
|
local gui
|
|
if script.Parent:FindFirstChild("ControlFrame") then
|
|
gui = script.Parent:FindFirstChild("ControlFrame")
|
|
else
|
|
gui = script.Parent
|
|
end
|
|
|
|
local useOldDialog = true
|
|
|
|
local helpButton = nil
|
|
local updateCameraDropDownSelection = nil
|
|
local updateVideoCaptureDropDownSelection = nil
|
|
local tweenTime = 0.2
|
|
|
|
local mouseLockLookScreenUrl = "http://morblox.us/asset/?id=54071825"
|
|
local classicLookScreenUrl = "http://morblox.us/asset/?id=45915798"
|
|
|
|
local hasGraphicsSlider = false
|
|
local recordingVideo = false
|
|
local useNewGui = true
|
|
|
|
local newGuiPlaces = {0,41324860}
|
|
|
|
-- We should probably have a better method to determine this...
|
|
local macClient = false
|
|
local isMacChat, version = pcall(function() return game.GuiService.Version end)
|
|
macClient = isMacChat and version >= 2
|
|
|
|
local function Color3I(r,g,b)
|
|
return Color3.new(r/255,g/255,b/255)
|
|
end
|
|
|
|
local function robloxLock(instance)
|
|
instance.RobloxLocked = true
|
|
children = instance:GetChildren()
|
|
if children then
|
|
for i, child in ipairs(children) do
|
|
robloxLock(child)
|
|
end
|
|
end
|
|
end
|
|
|
|
function resumeGameFunction(shield)
|
|
shield.Settings:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
delay(tweenTime,function()
|
|
shield.Visible = false
|
|
pcall(function() game.GuiService:RemoveCenterDialog(shield) end)
|
|
settingsButton.Active = true
|
|
end)
|
|
end
|
|
|
|
function goToMenu(container,menuName, moveDirection)
|
|
if type(menuName) ~= "string" then return end
|
|
local containerChildren = container:GetChildren()
|
|
for i = 1, #containerChildren do
|
|
if containerChildren[i].Name == menuName then
|
|
containerChildren[i].Visible = true
|
|
containerChildren[i]:TweenPosition(UDim2.new(0,0,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
else
|
|
if moveDirection == "left" then
|
|
containerChildren[i]:TweenPosition(UDim2.new(-1,-525,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
elseif moveDirection == "right" then
|
|
containerChildren[i]:TweenPosition(UDim2.new(1,525,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
elseif moveDirection == "up" then
|
|
containerChildren[i]:TweenPosition(UDim2.new(0,0,-1,-400),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
elseif moveDirection == "down" then
|
|
containerChildren[i]:TweenPosition(UDim2.new(0,0,1,400),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
end
|
|
delay(tweenTime,function()
|
|
containerChildren[i].Visible = false
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
|
|
function resetLocalCharacter()
|
|
local player = game.Players.LocalPlayer
|
|
if player then
|
|
if player.Character and player.Character:FindFirstChild("Humanoid") then
|
|
player.Character.Humanoid.Health = 0
|
|
end
|
|
end
|
|
end
|
|
|
|
local function createTextButton(text,style,fontSize,buttonSize,buttonPosition)
|
|
local newTextButton = Instance.new("TextButton")
|
|
newTextButton.Font = Enum.Font.Arial
|
|
newTextButton.FontSize = fontSize
|
|
newTextButton.Size = buttonSize
|
|
newTextButton.Position = buttonPosition
|
|
newTextButton.Style = style
|
|
newTextButton.TextColor3 = Color3.new(1,1,1)
|
|
newTextButton.Text = text
|
|
return newTextButton
|
|
end
|
|
|
|
local function CreateTextButtons(frame, buttons, yPos, ySize)
|
|
if #buttons < 1 then
|
|
error("Must have more than one button")
|
|
end
|
|
|
|
local buttonNum = 1
|
|
local buttonObjs = {}
|
|
|
|
local function toggleSelection(button)
|
|
for i, obj in ipairs(buttonObjs) do
|
|
if obj == button then
|
|
obj.Style = Enum.ButtonStyle.RobloxButtonDefault
|
|
else
|
|
obj.Style = Enum.ButtonStyle.RobloxButton
|
|
end
|
|
end
|
|
end
|
|
|
|
for i, obj in ipairs(buttons) do
|
|
local button = Instance.new("TextButton")
|
|
button.Name = "Button" .. buttonNum
|
|
button.Font = Enum.Font.Arial
|
|
button.FontSize = Enum.FontSize.Size18
|
|
button.AutoButtonColor = true
|
|
button.Style = Enum.ButtonStyle.RobloxButton
|
|
button.Text = obj.Text
|
|
button.TextColor3 = Color3.new(1,1,1)
|
|
button.MouseButton1Click:connect(function() toggleSelection(button) obj.Function() end)
|
|
button.Parent = frame
|
|
buttonObjs[buttonNum] = button
|
|
|
|
buttonNum = buttonNum + 1
|
|
end
|
|
|
|
toggleSelection(buttonObjs[1])
|
|
|
|
local numButtons = buttonNum-1
|
|
|
|
if numButtons == 1 then
|
|
frame.Button1.Position = UDim2.new(0.35, 0, yPos.Scale, yPos.Offset)
|
|
frame.Button1.Size = UDim2.new(.4,0,ySize.Scale, ySize.Offset)
|
|
elseif numButtons == 2 then
|
|
frame.Button1.Position = UDim2.new(0.1, 0, yPos.Scale, yPos.Offset)
|
|
frame.Button1.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset)
|
|
|
|
frame.Button2.Position = UDim2.new(0.55, 0, yPos.Scale, yPos.Offset)
|
|
frame.Button2.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset)
|
|
elseif numButtons >= 3 then
|
|
local spacing = .1 / numButtons
|
|
local buttonSize = .9 / numButtons
|
|
|
|
buttonNum = 1
|
|
while buttonNum <= numButtons do
|
|
buttonObjs[buttonNum].Position = UDim2.new(spacing*buttonNum + (buttonNum-1) * buttonSize, 0, yPos.Scale, yPos.Offset)
|
|
buttonObjs[buttonNum].Size = UDim2.new(buttonSize, 0, ySize.Scale, ySize.Offset)
|
|
buttonNum = buttonNum + 1
|
|
end
|
|
end
|
|
end
|
|
|
|
function recordVideoClick(recordVideoButton, stopRecordButton)
|
|
recordingVideo = not recordingVideo
|
|
if recordingVideo then
|
|
stopRecordButton.Visible = true
|
|
recordVideoButton.Text = "Stop Recording"
|
|
else
|
|
stopRecordButton.Visible = false
|
|
recordVideoButton.Text = "Record Video"
|
|
end
|
|
end
|
|
|
|
function backToGame(buttonClicked, shield, settingsButton)
|
|
buttonClicked.Parent.Parent.Parent.Parent.Visible = false
|
|
shield.Visible = false
|
|
pcall(function() game.GuiService:RemoveCenterDialog(shield) end)
|
|
settingsButton.Active = true
|
|
end
|
|
|
|
function setDisabledState(guiObject)
|
|
if guiObject:IsA("TextLabel") then
|
|
guiObject.TextTransparency = 0.9
|
|
elseif guiObject:IsA("TextButton") then
|
|
guiObject.TextTransparency = 0.9
|
|
guiObject.Active = false
|
|
else
|
|
if guiObject["ClassName"] then
|
|
print("setDisabledState() got object of unsupported type. object type is ",guiObject.ClassName)
|
|
end
|
|
end
|
|
end
|
|
|
|
function showEnabledState(guiObject)
|
|
if guiObject:IsA("TextLabel") then
|
|
guiObject.TextTransparency = 0
|
|
elseif guiObject:IsA("TextButton") then
|
|
guiObject.TextTransparency = 0
|
|
guiObject.Active = true
|
|
else
|
|
if guiObject["ClassName"] then
|
|
print("showEnabledState() got object of unsupported type. object type is ",guiObject.ClassName)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
local function createHelpDialog(baseZIndex)
|
|
|
|
if helpButton == nil then
|
|
if gui:FindFirstChild("TopLeftControl") and gui.TopLeftControl:FindFirstChild("Help") then
|
|
helpButton = gui.TopLeftControl.Help
|
|
elseif gui:FindFirstChild("BottomRightControl") and gui.BottomRightControl:FindFirstChild("Help") then
|
|
helpButton = gui.BottomRightControl.Help
|
|
end
|
|
end
|
|
|
|
local shield = Instance.new("Frame")
|
|
shield.Name = "HelpDialogShield"
|
|
shield.Active = true
|
|
shield.Visible = false
|
|
shield.Size = UDim2.new(1,0,1,0)
|
|
shield.BackgroundColor3 = Color3I(51,51,51)
|
|
shield.BorderColor3 = Color3I(27,42,53)
|
|
shield.BackgroundTransparency = 0.4
|
|
shield.ZIndex = baseZIndex + 1
|
|
|
|
local helpDialog = Instance.new("Frame")
|
|
helpDialog.Name = "HelpDialog"
|
|
helpDialog.Style = Enum.FrameStyle.RobloxRound
|
|
helpDialog.Position = UDim2.new(.2, 0, .2, 0)
|
|
helpDialog.Size = UDim2.new(0.6, 0, 0.6, 0)
|
|
helpDialog.Active = true
|
|
helpDialog.Parent = shield
|
|
|
|
local titleLabel = Instance.new("TextLabel")
|
|
titleLabel.Name = "Title"
|
|
titleLabel.Text = "Keyboard & Mouse Controls"
|
|
titleLabel.Font = Enum.Font.ArialBold
|
|
titleLabel.FontSize = Enum.FontSize.Size36
|
|
titleLabel.Position = UDim2.new(0, 0, 0.025, 0)
|
|
titleLabel.Size = UDim2.new(1, 0, 0, 40)
|
|
titleLabel.TextColor3 = Color3.new(1,1,1)
|
|
titleLabel.BackgroundTransparency = 1
|
|
titleLabel.Parent = helpDialog
|
|
|
|
local buttonRow = Instance.new("Frame")
|
|
buttonRow.Name = "Buttons"
|
|
buttonRow.Position = UDim2.new(0.1, 0, .07, 40)
|
|
buttonRow.Size = UDim2.new(0.8, 0, 0, 45)
|
|
buttonRow.BackgroundTransparency = 1
|
|
buttonRow.Parent = helpDialog
|
|
|
|
local imageFrame = Instance.new("Frame")
|
|
imageFrame.Name = "ImageFrame"
|
|
imageFrame.Position = UDim2.new(0.05, 0, 0.075, 80)
|
|
imageFrame.Size = UDim2.new(0.9, 0, .9, -120)
|
|
imageFrame.BackgroundTransparency = 1
|
|
imageFrame.Parent = helpDialog
|
|
|
|
local layoutFrame = Instance.new("Frame")
|
|
layoutFrame.Name = "LayoutFrame"
|
|
layoutFrame.Position = UDim2.new(0.5, 0, 0, 0)
|
|
layoutFrame.Size = UDim2.new(1.5, 0, 1, 0)
|
|
layoutFrame.BackgroundTransparency = 1
|
|
layoutFrame.SizeConstraint = Enum.SizeConstraint.RelativeYY
|
|
layoutFrame.Parent = imageFrame
|
|
|
|
local image = Instance.new("ImageLabel")
|
|
image.Name = "Image"
|
|
if UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then
|
|
image.Image = mouseLockLookScreenUrl
|
|
else
|
|
image.Image = classicLookScreenUrl
|
|
end
|
|
image.Position = UDim2.new(-0.5, 0, 0, 0)
|
|
image.Size = UDim2.new(1, 0, 1, 0)
|
|
image.BackgroundTransparency = 1
|
|
image.Parent = layoutFrame
|
|
|
|
local buttons = {}
|
|
buttons[1] = {}
|
|
buttons[1].Text = "Look"
|
|
buttons[1].Function = function()
|
|
if UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then
|
|
image.Image = mouseLockLookScreenUrl
|
|
else
|
|
image.Image = classicLookScreenUrl
|
|
end
|
|
end
|
|
buttons[2] = {}
|
|
buttons[2].Text = "Move"
|
|
buttons[2].Function = function()
|
|
image.Image = "http://morblox.us/asset/?id=45915811"
|
|
end
|
|
buttons[3] = {}
|
|
buttons[3].Text = "Gear"
|
|
buttons[3].Function = function()
|
|
image.Image = "http://morblox.us/asset/?id=45917596"
|
|
end
|
|
buttons[4] = {}
|
|
buttons[4].Text = "Zoom"
|
|
buttons[4].Function = function()
|
|
image.Image = "http://morblox.us/asset/?id=45915825"
|
|
end
|
|
|
|
CreateTextButtons(buttonRow, buttons, UDim.new(0, 0), UDim.new(1,0))
|
|
|
|
|
|
-- set up listeners for type of mouse mode, but keep constructing gui at same time
|
|
delay(0, function()
|
|
waitForChild(gui,"UserSettingsShield")
|
|
waitForChild(gui.UserSettingsShield,"Settings")
|
|
waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle, "GameSettingsMenu")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu, "CameraField")
|
|
waitForChild(gui.UserSettingsShield.Settings. SettingsStyle.GameSettingsMenu.CameraField, "DropDownMenuButton")
|
|
gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Changed:connect(function(prop)
|
|
if prop ~= "Text" then return end
|
|
if buttonRow.Button1.Style == Enum.ButtonStyle.RobloxButtonDefault then -- only change if this is the currently selected panel
|
|
if gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Text == "Classic" then
|
|
image.Image = classicLookScreenUrl
|
|
else
|
|
image.Image = mouseLockLookScreenUrl
|
|
end
|
|
end
|
|
end)
|
|
end)
|
|
|
|
|
|
local okBtn = Instance.new("TextButton")
|
|
okBtn.Name = "OkBtn"
|
|
okBtn.Text = "OK"
|
|
okBtn.Size = UDim2.new(0.3, 0, 0, 45)
|
|
okBtn.Position = UDim2.new(0.35, 0, .975, -50)
|
|
okBtn.Font = Enum.Font.Arial
|
|
okBtn.FontSize = Enum.FontSize.Size18
|
|
okBtn.BackgroundTransparency = 1
|
|
okBtn.TextColor3 = Color3.new(1,1,1)
|
|
okBtn.Style = Enum.ButtonStyle.RobloxButtonDefault
|
|
okBtn.MouseButton1Click:connect(
|
|
function()
|
|
shield.Visible = false
|
|
pcall(function() game.GuiService:RemoveCenterDialog(shield) end)
|
|
end)
|
|
okBtn.Parent = helpDialog
|
|
|
|
robloxLock(shield)
|
|
return shield
|
|
end
|
|
|
|
local function createLeaveConfirmationMenu(baseZIndex,shield)
|
|
local frame = Instance.new("Frame")
|
|
frame.Name = "LeaveConfirmationMenu"
|
|
frame.BackgroundTransparency = 1
|
|
frame.Size = UDim2.new(1,0,1,0)
|
|
frame.Position = UDim2.new(0,0,2,400)
|
|
frame.ZIndex = baseZIndex + 4
|
|
|
|
local yesButton = createTextButton("Yes",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,313,0.8,0))
|
|
yesButton.Name = "YesButton"
|
|
yesButton.ZIndex = baseZIndex + 4
|
|
yesButton.Parent = frame
|
|
pcall(function() yesButton:SetVerb("Exit") end)
|
|
|
|
local noButton = createTextButton("No",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,90,0.8,0))
|
|
noButton.Name = "NoButton"
|
|
noButton.Parent = frame
|
|
noButton.ZIndex = baseZIndex + 4
|
|
noButton.MouseButton1Click:connect(function()
|
|
goToMenu(shield.Settings.SettingsStyle,"GameMainMenu","down")
|
|
shield.Settings:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
end)
|
|
|
|
local leaveText = Instance.new("TextLabel")
|
|
leaveText.Name = "LeaveText"
|
|
leaveText.Text = "Are you sure you want to leave this game?"
|
|
leaveText.Size = UDim2.new(1,0,0.8,0)
|
|
leaveText.TextWrap = true
|
|
leaveText.TextColor3 = Color3.new(1,1,1)
|
|
leaveText.Font = Enum.Font.ArialBold
|
|
leaveText.FontSize = Enum.FontSize.Size36
|
|
leaveText.BackgroundTransparency = 1
|
|
leaveText.ZIndex = baseZIndex + 4
|
|
leaveText.Parent = frame
|
|
|
|
return frame
|
|
end
|
|
|
|
local function createResetConfirmationMenu(baseZIndex,shield)
|
|
local frame = Instance.new("Frame")
|
|
frame.Name = "ResetConfirmationMenu"
|
|
frame.BackgroundTransparency = 1
|
|
frame.Size = UDim2.new(1,0,1,0)
|
|
frame.Position = UDim2.new(0,0,2,400)
|
|
frame.ZIndex = baseZIndex + 4
|
|
|
|
local yesButton = createTextButton("Yes",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,313,0,299))
|
|
yesButton.Name = "YesButton"
|
|
yesButton.ZIndex = baseZIndex + 4
|
|
yesButton.Parent = frame
|
|
yesButton.MouseButton1Click:connect(function()
|
|
resumeGameFunction(shield)
|
|
resetLocalCharacter()
|
|
end)
|
|
|
|
local noButton = createTextButton("No",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,90,0,299))
|
|
noButton.Name = "NoButton"
|
|
noButton.Parent = frame
|
|
noButton.ZIndex = baseZIndex + 4
|
|
noButton.MouseButton1Click:connect(function()
|
|
goToMenu(shield.Settings.SettingsStyle,"GameMainMenu","down")
|
|
shield.Settings:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
end)
|
|
|
|
local resetCharacterText = Instance.new("TextLabel")
|
|
resetCharacterText.Name = "ResetCharacterText"
|
|
resetCharacterText.Text = "Are you sure you want to reset your character?"
|
|
resetCharacterText.Size = UDim2.new(1,0,0.8,0)
|
|
resetCharacterText.TextWrap = true
|
|
resetCharacterText.TextColor3 = Color3.new(1,1,1)
|
|
resetCharacterText.Font = Enum.Font.ArialBold
|
|
resetCharacterText.FontSize = Enum.FontSize.Size36
|
|
resetCharacterText.BackgroundTransparency = 1
|
|
resetCharacterText.ZIndex = baseZIndex + 4
|
|
resetCharacterText.Parent = frame
|
|
|
|
local fineResetCharacterText = resetCharacterText:Clone()
|
|
fineResetCharacterText.Name = "FineResetCharacterText"
|
|
fineResetCharacterText.Text = "You will be put back on a spawn point"
|
|
fineResetCharacterText.Size = UDim2.new(0,303,0,18)
|
|
fineResetCharacterText.Position = UDim2.new(0, 109, 0, 215)
|
|
fineResetCharacterText.FontSize = Enum.FontSize.Size18
|
|
fineResetCharacterText.Parent = frame
|
|
|
|
return frame
|
|
end
|
|
|
|
local function createGameMainMenu(baseZIndex, shield)
|
|
local gameMainMenuFrame = Instance.new("Frame")
|
|
gameMainMenuFrame.Name = "GameMainMenu"
|
|
gameMainMenuFrame.BackgroundTransparency = 1
|
|
gameMainMenuFrame.Size = UDim2.new(1,0,1,0)
|
|
gameMainMenuFrame.ZIndex = baseZIndex + 4
|
|
gameMainMenuFrame.Parent = settingsFrame
|
|
|
|
-- GameMainMenu Children
|
|
|
|
local gameMainMenuTitle = Instance.new("TextLabel")
|
|
gameMainMenuTitle.Name = "Title"
|
|
gameMainMenuTitle.Text = "Game Menu"
|
|
gameMainMenuTitle.BackgroundTransparency = 1
|
|
gameMainMenuTitle.Font = Enum.Font.ArialBold
|
|
gameMainMenuTitle.FontSize = Enum.FontSize.Size36
|
|
gameMainMenuTitle.Size = UDim2.new(1,0,0,36)
|
|
gameMainMenuTitle.Position = UDim2.new(0,0,0,4)
|
|
gameMainMenuTitle.TextColor3 = Color3.new(1,1,1)
|
|
gameMainMenuTitle.ZIndex = baseZIndex + 4
|
|
gameMainMenuTitle.Parent = gameMainMenuFrame
|
|
|
|
local robloxHelpButton = createTextButton("Help",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,164,0,50),UDim2.new(0,82,0,239))
|
|
robloxHelpButton.Name = "HelpButton"
|
|
robloxHelpButton.ZIndex = baseZIndex + 4
|
|
robloxHelpButton.Parent = gameMainMenuFrame
|
|
if useNewGui then
|
|
helpButton = robloxHelpButton
|
|
else
|
|
robloxHelpButton.Visible = false
|
|
end
|
|
|
|
local helpDialog = createHelpDialog(baseZIndex)
|
|
helpDialog.Parent = gui
|
|
|
|
helpButton.MouseButton1Click:connect(
|
|
function()
|
|
local centerDialogSuccess = pcall(function() game.GuiService:AddCenterDialog(helpDialog, Enum.CenterDialogType.ModalDialog,
|
|
--ShowFunction
|
|
function()
|
|
helpDialog.Visible = true
|
|
end,
|
|
--HideFunction
|
|
function()
|
|
helpDialog.Visible = false
|
|
end)
|
|
end)
|
|
if centerDialogSuccess == false then
|
|
helpDialog.Visible = true
|
|
end
|
|
end)
|
|
helpButton.Active = true
|
|
|
|
local helpShortcut = Instance.new("TextLabel")
|
|
helpShortcut.Name = "HelpShortcutText"
|
|
helpShortcut.Text = "F1"
|
|
helpShortcut.Visible = false
|
|
helpShortcut.BackgroundTransparency = 1
|
|
helpShortcut.Font = Enum.Font.Arial
|
|
helpShortcut.FontSize = Enum.FontSize.Size12
|
|
helpShortcut.Position = UDim2.new(0,85,0,0)
|
|
helpShortcut.Size = UDim2.new(0,30,0,30)
|
|
helpShortcut.TextColor3 = Color3.new(0,1,0)
|
|
helpShortcut.ZIndex = baseZIndex + 4
|
|
helpShortcut.Parent = robloxHelpButton
|
|
|
|
local screenshotButton = createTextButton("Screenshot",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,168,0,50),UDim2.new(0,254,0,239))
|
|
screenshotButton.Name = "ScreenshotButton"
|
|
screenshotButton.ZIndex = baseZIndex + 4
|
|
screenshotButton.Parent = gameMainMenuFrame
|
|
screenshotButton.Visible = not macClient
|
|
pcall(function() screenshotButton:SetVerb("Screenshot") end)
|
|
|
|
local screenshotShortcut = helpShortcut:clone()
|
|
screenshotShortcut.Name = "ScreenshotShortcutText"
|
|
screenshotShortcut.Text = "PrintSc"
|
|
screenshotShortcut.Position = UDim2.new(0,118,0,0)
|
|
screenshotShortcut.Visible = true
|
|
screenshotShortcut.Parent = screenshotButton
|
|
|
|
|
|
local recordVideoButton = createTextButton("Record Video",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,168,0,50),UDim2.new(0,254,0,290))
|
|
recordVideoButton.Name = "RecordVideoButton"
|
|
recordVideoButton.ZIndex = baseZIndex + 4
|
|
recordVideoButton.Parent = gameMainMenuFrame
|
|
recordVideoButton.Visible = not macClient
|
|
local supportVideoCapture = pcall(function() return UserSettings().GameSettings.VideoUploadPromptBehavior end)
|
|
if supportVideoCapture then
|
|
pcall(function() recordVideoButton:SetVerb("RecordToggle") end)
|
|
end
|
|
|
|
local recordVideoShortcut = helpShortcut:clone()
|
|
recordVideoShortcut.Name = "RecordVideoShortcutText"
|
|
recordVideoShortcut.Text = "F12"
|
|
recordVideoShortcut.Position = UDim2.new(0,120,0,0)
|
|
recordVideoShortcut.Parent = recordVideoButton
|
|
|
|
local stopRecordButton = Instance.new("ImageButton")
|
|
stopRecordButton.Name = "StopRecordButton"
|
|
stopRecordButton.BackgroundTransparency = 1
|
|
stopRecordButton.Image = "rbxasset://textures/ui/RecordStop.png"
|
|
stopRecordButton.Size = UDim2.new(0,59,0,27)
|
|
if supportVideoCapture then
|
|
pcall(function() stopRecordButton:SetVerb("RecordToggle") end)
|
|
end
|
|
stopRecordButton.MouseButton1Click:connect(function() recordVideoClick(recordVideoButton, stopRecordButton) end)
|
|
stopRecordButton.Visible = false
|
|
stopRecordButton.Parent = gui
|
|
|
|
local reportAbuseButton = createTextButton("Report Abuse",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,164,0,50),UDim2.new(0,82,0,290))
|
|
reportAbuseButton.Name = "ReportAbuseButton"
|
|
reportAbuseButton.ZIndex = baseZIndex + 4
|
|
reportAbuseButton.Parent = gameMainMenuFrame
|
|
|
|
local leaveGameButton = createTextButton("Leave Game",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,358))
|
|
leaveGameButton.Name = "LeaveGameButton"
|
|
leaveGameButton.ZIndex = baseZIndex + 4
|
|
leaveGameButton.Parent = gameMainMenuFrame
|
|
|
|
local resumeGameButton = createTextButton("Resume Game",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,54))
|
|
resumeGameButton.Name = "resumeGameButton"
|
|
resumeGameButton.ZIndex = baseZIndex + 4
|
|
resumeGameButton.Parent = gameMainMenuFrame
|
|
resumeGameButton.MouseButton1Click:connect(function() resumeGameFunction(shield) end)
|
|
|
|
local gameSettingsButton = createTextButton("Game Settings",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,172))
|
|
gameSettingsButton.Name = "SettingsButton"
|
|
gameSettingsButton.ZIndex = baseZIndex + 4
|
|
gameSettingsButton.Parent = gameMainMenuFrame
|
|
|
|
local resetButton = createTextButton("Reset Character",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,105))
|
|
resetButton.Name = "ResetButton"
|
|
resetButton.ZIndex = baseZIndex + 4
|
|
resetButton.Parent = gameMainMenuFrame
|
|
|
|
return gameMainMenuFrame
|
|
end
|
|
|
|
local function createGameSettingsMenu(baseZIndex, shield)
|
|
local gameSettingsMenuFrame = Instance.new("Frame")
|
|
gameSettingsMenuFrame.Name = "GameSettingsMenu"
|
|
gameSettingsMenuFrame.BackgroundTransparency = 1
|
|
gameSettingsMenuFrame.Size = UDim2.new(1,0,1,0)
|
|
gameSettingsMenuFrame.ZIndex = baseZIndex + 4
|
|
|
|
local title = Instance.new("TextLabel")
|
|
title.Name = "Title"
|
|
title.Text = "Settings"
|
|
title.Size = UDim2.new(1,0,0,48)
|
|
title.Position = UDim2.new(0,9,0,-9)
|
|
title.Font = Enum.Font.ArialBold
|
|
title.FontSize = Enum.FontSize.Size36
|
|
title.TextColor3 = Color3.new(1,1,1)
|
|
title.ZIndex = baseZIndex + 4
|
|
title.BackgroundTransparency = 1
|
|
title.Parent = gameSettingsMenuFrame
|
|
|
|
local fullscreenText = Instance.new("TextLabel")
|
|
fullscreenText.Name = "FullscreenText"
|
|
fullscreenText.Text = "Fullscreen Mode"
|
|
fullscreenText.Size = UDim2.new(0,124,0,18)
|
|
fullscreenText.Position = UDim2.new(0,62,0,145)
|
|
fullscreenText.Font = Enum.Font.Arial
|
|
fullscreenText.FontSize = Enum.FontSize.Size18
|
|
fullscreenText.TextColor3 = Color3.new(1,1,1)
|
|
fullscreenText.ZIndex = baseZIndex + 4
|
|
fullscreenText.BackgroundTransparency = 1
|
|
fullscreenText.Parent = gameSettingsMenuFrame
|
|
|
|
local fullscreenShortcut = Instance.new("TextLabel")
|
|
fullscreenShortcut.Visible = false
|
|
fullscreenShortcut.Name = "FullscreenShortcutText"
|
|
fullscreenShortcut.Text = "F11"
|
|
fullscreenShortcut.BackgroundTransparency = 1
|
|
fullscreenShortcut.Font = Enum.Font.Arial
|
|
fullscreenShortcut.FontSize = Enum.FontSize.Size12
|
|
fullscreenShortcut.Position = UDim2.new(0,186,0,141)
|
|
fullscreenShortcut.Size = UDim2.new(0,30,0,30)
|
|
fullscreenShortcut.TextColor3 = Color3.new(0,1,0)
|
|
fullscreenShortcut.ZIndex = baseZIndex + 4
|
|
fullscreenShortcut.Parent = gameSettingsMenuFrame
|
|
|
|
local studioText = Instance.new("TextLabel")
|
|
studioText.Name = "StudioText"
|
|
studioText.Text = "Studio Mode"
|
|
studioText.Size = UDim2.new(0,95,0,18)
|
|
studioText.Position = UDim2.new(0,62,0,179)
|
|
studioText.Font = Enum.Font.Arial
|
|
studioText.FontSize = Enum.FontSize.Size18
|
|
studioText.TextColor3 = Color3.new(1,1,1)
|
|
studioText.ZIndex = baseZIndex + 4
|
|
studioText.BackgroundTransparency = 1
|
|
studioText.Parent = gameSettingsMenuFrame
|
|
|
|
local studioShortcut = fullscreenShortcut:clone()
|
|
studioShortcut.Name = "StudioShortcutText"
|
|
studioShortcut.Text = "F2"
|
|
studioShortcut.Position = UDim2.new(0,154,0,175)
|
|
studioShortcut.Parent = gameSettingsMenuFrame
|
|
|
|
if hasGraphicsSlider then
|
|
local qualityText = Instance.new("TextLabel")
|
|
qualityText.Name = "QualityText"
|
|
qualityText.Text = "Graphics Quality"
|
|
qualityText.Size = UDim2.new(0,128,0,18)
|
|
qualityText.Position = UDim2.new(0,31,0,226)
|
|
qualityText.Font = Enum.Font.Arial
|
|
qualityText.FontSize = Enum.FontSize.Size18
|
|
qualityText.TextColor3 = Color3.new(1,1,1)
|
|
qualityText.ZIndex = baseZIndex + 4
|
|
qualityText.BackgroundTransparency = 1
|
|
qualityText.Parent = gameSettingsMenuFrame
|
|
|
|
local graphicsSlider, graphicsLevel = RbxGui.CreateSlider(10,200,UDim2.new(0, 270, 0, 232))
|
|
graphicsSlider.Parent = gameSettingsMenuFrame
|
|
graphicsSlider.Bar.ZIndex = baseZIndex + 4
|
|
graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5
|
|
end
|
|
|
|
local fullscreenCheckbox = createTextButton("",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,30,0,144))
|
|
fullscreenCheckbox.Name = "FullscreenCheckbox"
|
|
fullscreenCheckbox.ZIndex = baseZIndex + 4
|
|
fullscreenCheckbox.Parent = gameSettingsMenuFrame
|
|
pcall(function()
|
|
if UserSettings().GameSettings:InFullScreen() then
|
|
fullscreenCheckbox.Text = "X"
|
|
end
|
|
end)
|
|
fullscreenCheckbox.MouseButton1Click:connect(function()
|
|
if fullscreenCheckbox.Text == "" then
|
|
fullscreenCheckbox.Text = "X"
|
|
else
|
|
fullscreenCheckbox.Text = ""
|
|
end
|
|
end)
|
|
pcall(function() fullscreenCheckbox:SetVerb("ToggleFullScreen") end)
|
|
|
|
local studioCheckbox = createTextButton("",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,30,0,176))
|
|
studioCheckbox.Name = "StudioCheckbox"
|
|
studioCheckbox.ZIndex = baseZIndex + 4
|
|
studioCheckbox.Parent = gameSettingsMenuFrame
|
|
pcall(function()
|
|
if UserSettings().GameSettings:InStudioMode() then
|
|
studioCheckbox.Text = "X"
|
|
end
|
|
end)
|
|
studioCheckbox.MouseButton1Click:connect(function()
|
|
if not studioCheckbox.Active then return end
|
|
|
|
if studioCheckbox.Text == "" then
|
|
studioCheckbox.Text = "X"
|
|
else
|
|
studioCheckbox.Text = ""
|
|
end
|
|
end)
|
|
pcall(function() studioCheckbox:SetVerb("TogglePlayMode") end)
|
|
|
|
if game:FindFirstChild("NetworkClient") then -- we are playing online
|
|
setDisabledState(studioText)
|
|
setDisabledState(studioShortcut)
|
|
setDisabledState(studioCheckbox)
|
|
end
|
|
|
|
local backButton = createTextButton("OK",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,180,0,50),UDim2.new(0,170,0,270))
|
|
backButton.Name = "BackButton"
|
|
backButton.ZIndex = baseZIndex + 4
|
|
backButton.Parent = gameSettingsMenuFrame
|
|
|
|
local syncVideoCaptureSetting = nil
|
|
|
|
local supportVideoCapture = pcall(function() return UserSettings().GameSettings.VideoUploadPromptBehavior end)
|
|
if supportVideoCapture and not macClient then
|
|
local videoCaptureLabel = Instance.new("TextLabel")
|
|
videoCaptureLabel.Name = "VideoCaptureLabel"
|
|
videoCaptureLabel.Text = "After Capturing Video"
|
|
videoCaptureLabel.Font = Enum.Font.Arial
|
|
videoCaptureLabel.FontSize = Enum.FontSize.Size18
|
|
videoCaptureLabel.Position = UDim2.new(0,32,0,100)
|
|
videoCaptureLabel.Size = UDim2.new(0,164,0,18)
|
|
videoCaptureLabel.BackgroundTransparency = 1
|
|
videoCaptureLabel.TextColor3 = Color3I(255,255,255)
|
|
videoCaptureLabel.TextXAlignment = Enum.TextXAlignment.Left
|
|
videoCaptureLabel.ZIndex = baseZIndex + 4
|
|
videoCaptureLabel.Parent = gameSettingsMenuFrame
|
|
|
|
local videoNames = {}
|
|
local videoNameToItem = {}
|
|
videoNames[1] = "Just Save to Disk"
|
|
videoNameToItem[videoNames[1]] = Enum.UploadSetting["Never"]
|
|
videoNames[2] = "Upload to YouTube"
|
|
videoNameToItem[videoNames[2]] = Enum.UploadSetting["Ask me first"]
|
|
|
|
local videoCaptureDropDown = nil
|
|
videoCaptureDropDown, updateVideoCaptureDropDownSelection = RbxGui.CreateDropDownMenu(videoNames,
|
|
function(text)
|
|
UserSettings().GameSettings.VideoUploadPromptBehavior = videoNameToItem[text]
|
|
end)
|
|
videoCaptureDropDown.Name = "VideoCaptureField"
|
|
videoCaptureDropDown.ZIndex = baseZIndex + 4
|
|
videoCaptureDropDown.DropDownMenuButton.ZIndex = baseZIndex + 4
|
|
videoCaptureDropDown.DropDownMenuButton.Icon.ZIndex = baseZIndex + 4
|
|
videoCaptureDropDown.Position = UDim2.new(0, 270, 0, 94)
|
|
videoCaptureDropDown.Size = UDim2.new(0,200,0,32)
|
|
videoCaptureDropDown.Parent = gameSettingsMenuFrame
|
|
|
|
syncVideoCaptureSetting = function()
|
|
if UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Never"] then
|
|
updateVideoCaptureDropDownSelection(videoNames[1])
|
|
elseif UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Ask me first"] then
|
|
updateVideoCaptureDropDownSelection(videoNames[2])
|
|
else
|
|
UserSettings().GameSettings.VideoUploadPromptBehavior = Enum.UploadSetting["Ask me first"]
|
|
updateVideoCaptureDropDownSelection(videoNames[2])
|
|
end
|
|
end
|
|
end
|
|
|
|
local cameraLabel = Instance.new("TextLabel")
|
|
cameraLabel.Name = "CameraLabel"
|
|
cameraLabel.Text = "Character & Camera Controls"
|
|
cameraLabel.Font = Enum.Font.Arial
|
|
cameraLabel.FontSize = Enum.FontSize.Size18
|
|
cameraLabel.Position = UDim2.new(0,31,0,58)
|
|
cameraLabel.Size = UDim2.new(0,224,0,18)
|
|
cameraLabel.TextColor3 = Color3I(255,255,255)
|
|
cameraLabel.TextXAlignment = Enum.TextXAlignment.Left
|
|
cameraLabel.BackgroundTransparency = 1
|
|
cameraLabel.ZIndex = baseZIndex + 4
|
|
cameraLabel.Parent = gameSettingsMenuFrame
|
|
|
|
local mouseLockLabel = game.CoreGui.RobloxGui:FindFirstChild("MouseLockLabel",true)
|
|
|
|
local enumItems = Enum.ControlMode:GetEnumItems()
|
|
local enumNames = {}
|
|
local enumNameToItem = {}
|
|
for i,obj in ipairs(enumItems) do
|
|
enumNames[i] = obj.Name
|
|
enumNameToItem[obj.Name] = obj
|
|
end
|
|
|
|
local cameraDropDown
|
|
cameraDropDown, updateCameraDropDownSelection = RbxGui.CreateDropDownMenu(enumNames,
|
|
function(text)
|
|
UserSettings().GameSettings.ControlMode = enumNameToItem[text]
|
|
|
|
pcall(function()
|
|
if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then
|
|
mouseLockLabel.Visible = true
|
|
elseif mouseLockLabel then
|
|
mouseLockLabel.Visible = false
|
|
end
|
|
end)
|
|
end)
|
|
cameraDropDown.Name = "CameraField"
|
|
cameraDropDown.ZIndex = baseZIndex + 4
|
|
cameraDropDown.DropDownMenuButton.ZIndex = baseZIndex + 4
|
|
cameraDropDown.DropDownMenuButton.Icon.ZIndex = baseZIndex + 4
|
|
cameraDropDown.Position = UDim2.new(0, 270, 0, 52)
|
|
cameraDropDown.Size = UDim2.new(0,200,0,32)
|
|
cameraDropDown.Parent = gameSettingsMenuFrame
|
|
|
|
return gameSettingsMenuFrame
|
|
end
|
|
|
|
if LoadLibrary then
|
|
RbxGui = LoadLibrary("RbxGui")
|
|
local baseZIndex = 0
|
|
if UserSettings then
|
|
|
|
local createOldSettingsDialog = function()
|
|
|
|
waitForChild(gui,"BottomLeftControl")
|
|
settingsButton = gui.BottomLeftControl:FindFirstChild("SettingsButton")
|
|
|
|
if settingsButton == nil then
|
|
settingsButton = Instance.new("ImageButton")
|
|
settingsButton.Name = "SettingsButton"
|
|
settingsButton.BackgroundTransparency = 1
|
|
settingsButton.Active = false
|
|
settingsButton.Size = UDim2.new(0,54,0,46)
|
|
settingsButton.Position = UDim2.new(0,2,0,50)
|
|
settingsButton.Parent = gui.BottomLeftControl
|
|
|
|
settingsButton.Image = "http://www.roblox.com/asset/?id=54608960"
|
|
settingsButton.Size = UDim2.new(0,33,0,33)
|
|
settingsButton.Position = UDim2.new(0, 128, 0.5, -17)
|
|
settingsButton.MouseEnter:connect(function()
|
|
settingsButton.Image = "http://www.roblox.com/asset/?id=54609004"
|
|
end)
|
|
settingsButton.MouseLeave:connect(function()
|
|
settingsButton.Image = "http://www.roblox.com/asset/?id=54608960"
|
|
end)
|
|
end
|
|
|
|
local shield = Instance.new("TextButton")
|
|
shield.Text = ""
|
|
shield.Name = "UserSettingsShield"
|
|
shield.Active = true
|
|
shield.AutoButtonColor = false
|
|
shield.Visible = false
|
|
shield.Size = UDim2.new(1,0,1,0)
|
|
shield.BackgroundColor3 = Color3I(51,51,51)
|
|
shield.BorderColor3 = Color3I(27,42,53)
|
|
shield.BackgroundTransparency = 0.4
|
|
shield.ZIndex = baseZIndex + 1
|
|
|
|
local frame = Instance.new("Frame")
|
|
frame.Name = "Settings"
|
|
frame.Position = UDim2.new(0.5, -262, 0.5, -150)
|
|
frame.Size = UDim2.new(0, 525, 0, 290)
|
|
frame.BackgroundTransparency = 1
|
|
frame.Active = true
|
|
frame.Parent = shield
|
|
|
|
local settingsFrame = Instance.new("Frame")
|
|
settingsFrame.Name = "SettingsStyle"
|
|
settingsFrame.Size = UDim2.new(1, 0, 1, 0)
|
|
settingsFrame.Style = Enum.FrameStyle.RobloxRound
|
|
settingsFrame.Active = true
|
|
settingsFrame.ZIndex = baseZIndex + 1
|
|
settingsFrame.Parent = frame
|
|
|
|
local title = Instance.new("TextLabel")
|
|
title.Name = "Title"
|
|
title.Text = "Settings"
|
|
title.TextColor3 = Color3I(221,221,221)
|
|
title.Position = UDim2.new(0.5, 0, 0, 30)
|
|
title.Font = Enum.Font.ArialBold
|
|
title.FontSize = Enum.FontSize.Size36
|
|
title.ZIndex = baseZIndex + 1
|
|
title.Parent = settingsFrame
|
|
|
|
local cameraLabel = Instance.new("TextLabel")
|
|
cameraLabel.Name = "CameraLabel"
|
|
cameraLabel.Text = "Character & Camera Controls:"
|
|
cameraLabel.Font = Enum.Font.Arial
|
|
cameraLabel.FontSize = Enum.FontSize.Size18
|
|
cameraLabel.Position = UDim2.new(0,20,0,105)
|
|
cameraLabel.TextColor3 = Color3I(255,255,255)
|
|
cameraLabel.TextXAlignment = Enum.TextXAlignment.Left
|
|
cameraLabel.ZIndex = baseZIndex + 1
|
|
cameraLabel.Parent = settingsFrame
|
|
|
|
local mouseLockLabel = game.CoreGui.RobloxGui:FindFirstChild("MouseLockLabel",true)
|
|
|
|
local enumItems = Enum.ControlMode:GetEnumItems()
|
|
local enumNames = {}
|
|
local enumNameToItem = {}
|
|
for i,obj in ipairs(enumItems) do
|
|
enumNames[i] = obj.Name
|
|
enumNameToItem[obj.Name] = obj
|
|
end
|
|
|
|
local cameraDropDown
|
|
local updateCameraDropDownSelection
|
|
cameraDropDown, updateCameraDropDownSelection = RbxGui.CreateDropDownMenu(enumNames,
|
|
function(text)
|
|
UserSettings().GameSettings.ControlMode = enumNameToItem[text]
|
|
|
|
pcall(function()
|
|
if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then
|
|
mouseLockLabel.Visible = true
|
|
elseif mouseLockLabel then
|
|
mouseLockLabel.Visible = false
|
|
end
|
|
end)
|
|
end)
|
|
cameraDropDown.Name = "CameraField"
|
|
cameraDropDown.ZIndex = baseZIndex + 1
|
|
cameraDropDown.Position = UDim2.new(0, 300, 0, 88)
|
|
cameraDropDown.Size = UDim2.new(0,200,0,32)
|
|
cameraDropDown.Parent = settingsFrame
|
|
|
|
local syncVideoCaptureSetting = nil
|
|
|
|
local supportVideoCapture = pcall(function() return UserSettings().GameSettings.VideoUploadPromptBehavior end)
|
|
if supportVideoCapture then
|
|
local videoCaptureLabel = Instance.new("TextLabel")
|
|
videoCaptureLabel.Name = "VideoCaptureLabel"
|
|
videoCaptureLabel.Text = "After Capturing Video:"
|
|
videoCaptureLabel.Font = Enum.Font.Arial
|
|
videoCaptureLabel.FontSize = Enum.FontSize.Size18
|
|
videoCaptureLabel.Position = UDim2.new(0,20,0,145)
|
|
videoCaptureLabel.TextColor3 = Color3I(255,255,255)
|
|
videoCaptureLabel.TextXAlignment = Enum.TextXAlignment.Left
|
|
videoCaptureLabel.ZIndex = baseZIndex + 1
|
|
videoCaptureLabel.Parent = settingsFrame
|
|
|
|
local videoNames = {}
|
|
local videoNameToItem = {}
|
|
videoNames[1] = "Just Save to Disk"
|
|
videoNameToItem[videoNames[1]] = Enum.UploadSetting["Never"]
|
|
videoNames[2] = "Upload to YouTube"
|
|
videoNameToItem[videoNames[2]] = Enum.UploadSetting["Ask me first"]
|
|
|
|
local videoCaptureDropDown, updateVideoCaptureDropDownSelection = RbxGui.CreateDropDownMenu(videoNames,
|
|
function(text)
|
|
UserSettings().GameSettings.VideoUploadPromptBehavior = videoNameToItem[text]
|
|
end)
|
|
videoCaptureDropDown.Name = "VideoCaptureField"
|
|
videoCaptureDropDown.ZIndex = baseZIndex + 1
|
|
videoCaptureDropDown.Position = UDim2.new(0, 300, 0, 128)
|
|
videoCaptureDropDown.Size = UDim2.new(0,200,0,32)
|
|
videoCaptureDropDown.Parent = settingsFrame
|
|
|
|
syncVideoCaptureSetting = function()
|
|
if gui:FindFirstChild("BottomRightControl") and gui.BottomRightControl:FindFirstChild("RecordToggle") then
|
|
videoCaptureLabel.Visible = true
|
|
videoCaptureDropDown.Visible = true
|
|
if UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Never"] then
|
|
updateVideoCaptureDropDownSelection(videoNames[1])
|
|
elseif UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Ask me first"] then
|
|
updateVideoCaptureDropDownSelection(videoNames[2])
|
|
else
|
|
UserSettings().GameSettings.VideoUploadPromptBehavior = Enum.UploadSetting["Ask me first"]
|
|
updateVideoCaptureDropDownSelection(videoNames[2])
|
|
end
|
|
else
|
|
videoCaptureLabel.Visible = false
|
|
videoCaptureDropDown.Visible = false
|
|
end
|
|
end
|
|
end
|
|
|
|
local exitButton = Instance.new("TextButton")
|
|
exitButton.Name = "ExitBtn"
|
|
exitButton.Font = Enum.Font.Arial
|
|
exitButton.FontSize = Enum.FontSize.Size18
|
|
exitButton.Position = UDim2.new(0.5, -100, 0, 200)
|
|
exitButton.Size = UDim2.new(0,200,0,50)
|
|
exitButton.AutoButtonColor = true
|
|
exitButton.Style = Enum.ButtonStyle.RobloxButtonDefault
|
|
exitButton.Text = "OK"
|
|
exitButton.TextColor3 = Color3I(255,255,255)
|
|
exitButton.ZIndex = baseZIndex + 1
|
|
|
|
exitButton.Parent = settingsFrame
|
|
|
|
robloxLock(shield)
|
|
|
|
exitButton.MouseButton1Click:connect(
|
|
function()
|
|
shield.Visible = false
|
|
pcall(function() game.GuiService:RemoveCenterDialog(shield) end)
|
|
settingsButton.Active = true
|
|
end
|
|
)
|
|
|
|
settingsButton.MouseButton1Click:connect(
|
|
function()
|
|
local centerDialogSuccess = pcall(function() game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog,
|
|
--showFunction
|
|
function()
|
|
settingsButton.Active = false
|
|
updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name)
|
|
|
|
if syncVideoCaptureSetting then
|
|
syncVideoCaptureSetting()
|
|
end
|
|
|
|
shield.Visible = true
|
|
end,
|
|
--hideFunction
|
|
function()
|
|
shield.Visible = false
|
|
settingsButton.Active = true
|
|
end
|
|
)
|
|
end)
|
|
|
|
if centerDialogSuccess == false then
|
|
settingsButton.Active = false
|
|
updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name)
|
|
|
|
if syncVideoCaptureSetting then
|
|
syncVideoCaptureSetting()
|
|
end
|
|
|
|
shield.Visible = true
|
|
end
|
|
end
|
|
)
|
|
print("Create old settings dialog return")
|
|
return shield
|
|
end
|
|
|
|
local createSettingsDialog = function()
|
|
waitForChild(gui,"BottomLeftControl")
|
|
settingsButton = gui.BottomLeftControl:FindFirstChild("SettingsButton")
|
|
|
|
if settingsButton == nil then
|
|
settingsButton = Instance.new("ImageButton")
|
|
settingsButton.Name = "SettingsButton"
|
|
settingsButton.Image = "rbxasset://textures/ui/SettingsButton.png"
|
|
settingsButton.BackgroundTransparency = 1
|
|
settingsButton.Active = false
|
|
settingsButton.Size = UDim2.new(0,54,0,46)
|
|
settingsButton.Position = UDim2.new(0,2,0,50)
|
|
settingsButton.Parent = gui.BottomLeftControl
|
|
end
|
|
|
|
|
|
if not useNewGui then
|
|
settingsButton.Image = "http://www.roblox.com/asset/?id=54608960"
|
|
settingsButton.Size = UDim2.new(0,33,0,33)
|
|
settingsButton.Position = UDim2.new(0, 128, 0.5, -17)
|
|
settingsButton.MouseEnter:connect(function()
|
|
settingsButton.Image = "http://www.roblox.com/asset/?id=54609004"
|
|
end)
|
|
settingsButton.MouseLeave:connect(function()
|
|
settingsButton.Image = "http://www.roblox.com/asset/?id=54608960"
|
|
end)
|
|
end
|
|
|
|
local shield = Instance.new("TextButton")
|
|
shield.Text = ""
|
|
shield.Name = "UserSettingsShield"
|
|
shield.Active = true
|
|
shield.AutoButtonColor = false
|
|
shield.Visible = false
|
|
shield.Size = UDim2.new(1,0,1,0)
|
|
shield.BackgroundColor3 = Color3I(51,51,51)
|
|
shield.BorderColor3 = Color3I(27,42,53)
|
|
shield.BackgroundTransparency = 0.4
|
|
shield.ZIndex = baseZIndex + 2
|
|
|
|
local frame = Instance.new("Frame")
|
|
frame.Name = "Settings"
|
|
frame.Position = UDim2.new(0.5, -262, -0.5, -200)
|
|
frame.Size = UDim2.new(0, 525, 0, 430)
|
|
frame.BackgroundTransparency = 1
|
|
frame.Active = true
|
|
frame.Parent = shield
|
|
|
|
local settingsFrame = Instance.new("Frame")
|
|
settingsFrame.Name = "SettingsStyle"
|
|
settingsFrame.Size = UDim2.new(1, 0, 1, 0)
|
|
settingsFrame.Style = Enum.FrameStyle.RobloxRound
|
|
settingsFrame.Active = true
|
|
settingsFrame.ZIndex = baseZIndex + 3
|
|
settingsFrame.Parent = frame
|
|
|
|
local gameMainMenu = createGameMainMenu(baseZIndex, shield)
|
|
gameMainMenu.Parent = settingsFrame
|
|
|
|
gameMainMenu.ScreenshotButton.MouseButton1Click:connect(function()
|
|
backToGame(gameMainMenu.ScreenshotButton, shield, settingsButton)
|
|
end)
|
|
|
|
gameMainMenu.RecordVideoButton.MouseButton1Click:connect(function()
|
|
recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton)
|
|
backToGame(gameMainMenu.RecordVideoButton, shield, settingsButton)
|
|
end)
|
|
|
|
if not useNewGui then
|
|
pcall(function()
|
|
gui.BottomRightControl.RecordToggle.MouseButton1Click:connect(function()
|
|
recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton)
|
|
end)
|
|
end)
|
|
end
|
|
|
|
game.CoreGui.RobloxGui.Changed:connect(function(prop) -- We have stopped recording when we resize
|
|
if prop == "AbsoluteSize" and recordingVideo then
|
|
recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton)
|
|
end
|
|
end)
|
|
|
|
gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer
|
|
if game.Players.LocalPlayer ~= nil then
|
|
game.Players.LocalPlayer.Changed:connect(function()
|
|
gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer
|
|
end)
|
|
else
|
|
delay(0,function()
|
|
waitForProperty(game.Players,"LocalPlayer")
|
|
gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer
|
|
game.Players.LocalPlayer.Changed:connect(function()
|
|
gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer
|
|
end)
|
|
end)
|
|
end
|
|
|
|
gameMainMenu.ReportAbuseButton.Visible = game:FindFirstChild("NetworkClient")
|
|
if not gameMainMenu.ReportAbuseButton.Visible then
|
|
game.ChildAdded:connect(function(child)
|
|
if child:IsA("NetworkClient") then
|
|
gameMainMenu.ReportAbuseButton.Visible = game:FindFirstChild("NetworkClient")
|
|
end
|
|
end)
|
|
end
|
|
|
|
gameMainMenu.ResetButton.MouseButton1Click:connect(function()
|
|
goToMenu(settingsFrame,"ResetConfirmationMenu","up")
|
|
settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,370),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
end)
|
|
|
|
gameMainMenu.LeaveGameButton.MouseButton1Click:connect(function()
|
|
goToMenu(settingsFrame,"LeaveConfirmationMenu","down")
|
|
settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,300),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
end)
|
|
|
|
local gameSettingsMenu = createGameSettingsMenu(baseZIndex, shield)
|
|
gameSettingsMenu.Visible = false
|
|
gameSettingsMenu.Parent = settingsFrame
|
|
|
|
gameMainMenu.SettingsButton.MouseButton1Click:connect(function()
|
|
goToMenu(settingsFrame,"GameSettingsMenu","left")
|
|
settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,350),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
end)
|
|
|
|
gameSettingsMenu.BackButton.MouseButton1Click:connect(function()
|
|
goToMenu(settingsFrame,"GameMainMenu","right")
|
|
settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
end)
|
|
|
|
local resetConfirmationWindow = createResetConfirmationMenu(baseZIndex, shield)
|
|
resetConfirmationWindow.Visible = false
|
|
resetConfirmationWindow.Parent = settingsFrame
|
|
|
|
local leaveConfirmationWindow = createLeaveConfirmationMenu(baseZIndex,shield)
|
|
leaveConfirmationWindow.Visible = false
|
|
leaveConfirmationWindow.Parent = settingsFrame
|
|
|
|
robloxLock(shield)
|
|
|
|
settingsButton.MouseButton1Click:connect(
|
|
function()
|
|
local centerDialogSuccess = pcall(function() game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog,
|
|
--showFunction
|
|
function()
|
|
settingsButton.Active = false
|
|
updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name)
|
|
|
|
if syncVideoCaptureSetting then
|
|
syncVideoCaptureSetting()
|
|
end
|
|
|
|
goToMenu(settingsFrame,"GameMainMenu","right")
|
|
shield.Visible = true
|
|
settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
end,
|
|
--hideFunction
|
|
function()
|
|
settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
shield.Visible = false
|
|
settingsButton.Active = true
|
|
end
|
|
)
|
|
end)
|
|
|
|
if centerDialogSuccess == false then
|
|
settingsButton.Active = false
|
|
updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name)
|
|
|
|
if syncVideoCaptureSetting then
|
|
syncVideoCaptureSetting()
|
|
end
|
|
|
|
goToMenu(settingsFrame,"GameMainMenu","right")
|
|
settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true)
|
|
shield.Visible = true
|
|
end
|
|
end
|
|
)
|
|
|
|
return shield
|
|
end
|
|
|
|
delay(0, function()
|
|
for i = 1, #newGuiPlaces do
|
|
if game.PlaceId == newGuiPlaces[i] then
|
|
useNewGui = true
|
|
break
|
|
end
|
|
end
|
|
if useNewGui then
|
|
createSettingsDialog().Parent = gui
|
|
|
|
gui.BottomLeftControl.SettingsButton.Active = true
|
|
gui.BottomLeftControl.SettingsButton.Position = UDim2.new(0,2,0,-2)
|
|
|
|
if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then
|
|
mouseLockLabel.Visible = true
|
|
elseif mouseLockLabel then
|
|
mouseLockLabel.Visible = false
|
|
end
|
|
|
|
-- our script has loaded, get rid of older buttons now
|
|
local leaveGameButton = gui.BottomLeftControl:FindFirstChild("Exit")
|
|
if leaveGameButton then leaveGameButton:Remove() end
|
|
|
|
local topLeft = gui:FindFirstChild("TopLeftControl")
|
|
if topLeft then topLeft:Remove() end
|
|
|
|
local toggle = gui.BottomLeftControl:FindFirstChild("TogglePlayMode")
|
|
if toggle then toggle:Remove() end
|
|
|
|
local bottomRightChildren = gui.BottomRightControl:GetChildren()
|
|
for i = 1, #bottomRightChildren do
|
|
if not string.find(bottomRightChildren[i].Name,"Camera") then
|
|
bottomRightChildren[i]:Remove()
|
|
end
|
|
end
|
|
else
|
|
if useOldDialog then
|
|
createOldSettingsDialog().Parent = gui
|
|
else
|
|
createSettingsDialog().Parent = gui
|
|
end
|
|
gui.BottomLeftControl.SettingsButton.Active = true
|
|
end
|
|
end)
|
|
|
|
end --UserSettings call
|
|
|
|
local createSaveDialogs = function()
|
|
local shield = Instance.new("TextButton")
|
|
shield.Text = ""
|
|
shield.AutoButtonColor = false
|
|
shield.Name = "SaveDialogShield"
|
|
shield.Active = true
|
|
shield.Visible = false
|
|
shield.Size = UDim2.new(1,0,1,0)
|
|
shield.BackgroundColor3 = Color3I(51,51,51)
|
|
shield.BorderColor3 = Color3I(27,42,53)
|
|
shield.BackgroundTransparency = 0.4
|
|
shield.ZIndex = baseZIndex+1
|
|
|
|
local clearAndResetDialog
|
|
local save
|
|
local saveLocal
|
|
local dontSave
|
|
local cancel
|
|
|
|
local messageBoxButtons = {}
|
|
messageBoxButtons[1] = {}
|
|
messageBoxButtons[1].Text = "Save"
|
|
messageBoxButtons[1].Function = function() save() end
|
|
messageBoxButtons[2] = {}
|
|
messageBoxButtons[2].Text = "Cancel"
|
|
messageBoxButtons[2].Function = function() cancel() end
|
|
messageBoxButtons[3] = {}
|
|
messageBoxButtons[3].Text = "Don't Save"
|
|
messageBoxButtons[3].Function = function() dontSave() end
|
|
|
|
local saveDialogMessageBox = RbxGui.CreateStyledMessageDialog("Unsaved Changes", "Save your changes to ROBLOX before leaving?", "Confirm", messageBoxButtons)
|
|
saveDialogMessageBox.Visible = true
|
|
saveDialogMessageBox.Parent = shield
|
|
|
|
|
|
local errorBoxButtons = {}
|
|
|
|
local buttonOffset = 1
|
|
if game.LocalSaveEnabled then
|
|
errorBoxButtons[buttonOffset] = {}
|
|
errorBoxButtons[buttonOffset].Text = "Save to Disk"
|
|
errorBoxButtons[buttonOffset].Function = function() saveLocal() end
|
|
buttonOffset = buttonOffset + 1
|
|
end
|
|
errorBoxButtons[buttonOffset] = {}
|
|
errorBoxButtons[buttonOffset].Text = "Keep Playing"
|
|
errorBoxButtons[buttonOffset].Function = function() cancel() end
|
|
errorBoxButtons[buttonOffset+1] = {}
|
|
errorBoxButtons[buttonOffset+1].Text = "Don't Save"
|
|
errorBoxButtons[buttonOffset+1].Function = function() dontSave() end
|
|
|
|
local errorDialogMessageBox = RbxGui.CreateStyledMessageDialog("Upload Failed", "Sorry, we could not save your changes to ROBLOX.", "Error", errorBoxButtons)
|
|
errorDialogMessageBox.Visible = false
|
|
errorDialogMessageBox.Parent = shield
|
|
|
|
local spinnerDialog = Instance.new("Frame")
|
|
spinnerDialog.Name = "SpinnerDialog"
|
|
spinnerDialog.Style = Enum.FrameStyle.RobloxRound
|
|
spinnerDialog.Size = UDim2.new(0, 350, 0, 150)
|
|
spinnerDialog.Position = UDim2.new(.5, -175, .5, -75)
|
|
spinnerDialog.Visible = false
|
|
spinnerDialog.Active = true
|
|
spinnerDialog.Parent = shield
|
|
|
|
local waitingLabel = Instance.new("TextLabel")
|
|
waitingLabel.Name = "WaitingLabel"
|
|
waitingLabel.Text = "Saving to ROBLOX..."
|
|
waitingLabel.Font = Enum.Font.ArialBold
|
|
waitingLabel.FontSize = Enum.FontSize.Size18
|
|
waitingLabel.Position = UDim2.new(0.5, 25, 0.5, 0)
|
|
waitingLabel.TextColor3 = Color3.new(1,1,1)
|
|
waitingLabel.Parent = spinnerDialog
|
|
|
|
local spinnerFrame = Instance.new("Frame")
|
|
spinnerFrame.Name = "Spinner"
|
|
spinnerFrame.Size = UDim2.new(0, 80, 0, 80)
|
|
spinnerFrame.Position = UDim2.new(0.5, -150, 0.5, -40)
|
|
spinnerFrame.BackgroundTransparency = 1
|
|
spinnerFrame.Parent = spinnerDialog
|
|
|
|
local spinnerIcons = {}
|
|
local spinnerNum = 1
|
|
while spinnerNum <= 8 do
|
|
local spinnerImage = Instance.new("ImageLabel")
|
|
spinnerImage.Name = "Spinner"..spinnerNum
|
|
spinnerImage.Size = UDim2.new(0, 16, 0, 16)
|
|
spinnerImage.Position = UDim2.new(.5+.3*math.cos(math.rad(45*spinnerNum)), -8, .5+.3*math.sin(math.rad(45*spinnerNum)), -8)
|
|
spinnerImage.BackgroundTransparency = 1
|
|
spinnerImage.Image = "http://morblox.us/asset/?id=45880710"
|
|
spinnerImage.Parent = spinnerFrame
|
|
|
|
spinnerIcons[spinnerNum] = spinnerImage
|
|
spinnerNum = spinnerNum + 1
|
|
end
|
|
|
|
save = function()
|
|
saveDialogMessageBox.Visible = false
|
|
|
|
--Show the spinner dialog
|
|
spinnerDialog.Visible = true
|
|
local spin = true
|
|
--Make it spin
|
|
delay(0, function()
|
|
local spinPos = 0
|
|
while spin do
|
|
local pos = 0
|
|
|
|
while pos < 8 do
|
|
if pos == spinPos or pos == ((spinPos+1)%8) then
|
|
spinnerIcons[pos+1].Image = "http://morblox.us/asset/?id=45880668"
|
|
else
|
|
spinnerIcons[pos+1].Image = "http://morblox.us/asset/?id=45880710"
|
|
end
|
|
|
|
pos = pos + 1
|
|
end
|
|
spinPos = (spinPos + 1) % 8
|
|
wait(0.2)
|
|
end
|
|
end)
|
|
|
|
--Do the save while the spinner is going, function will wait
|
|
local result = game:SaveToRoblox()
|
|
if not result then
|
|
--Try once more
|
|
result = game:SaveToRoblox()
|
|
end
|
|
|
|
--Hide the spinner dialog
|
|
spinnerDialog.Visible = false
|
|
--And cause the delay thread to stop
|
|
spin = false
|
|
|
|
--Now process the result
|
|
if result then
|
|
--Success, close
|
|
game:FinishShutdown(false)
|
|
clearAndResetDialog()
|
|
else
|
|
--Failure, show the second dialog prompt
|
|
errorDialogMessageBox.Visible = true
|
|
end
|
|
end
|
|
|
|
saveLocal = function()
|
|
errorDialogMessageBox.Visible = false
|
|
game:FinishShutdown(true)
|
|
clearAndResetDialog()
|
|
end
|
|
|
|
dontSave = function()
|
|
saveDialogMessageBox.Visible = false
|
|
errorDialogMessageBox.Visible = false
|
|
game:FinishShutdown(false)
|
|
clearAndResetDialog()
|
|
end
|
|
cancel = function()
|
|
saveDialogMessageBox.Visible = false
|
|
errorDialogMessageBox.Visible = false
|
|
clearAndResetDialog()
|
|
end
|
|
|
|
clearAndResetDialog = function()
|
|
saveDialogMessageBox.Visible = true
|
|
errorDialogMessageBox.Visible = false
|
|
spinnerDialog.Visible = false
|
|
shield.Visible = false
|
|
pcall(function() game.GuiService:RemoveCenterDialog(shield) end)
|
|
end
|
|
|
|
robloxLock(shield)
|
|
shield.Visible = false
|
|
return shield
|
|
end
|
|
|
|
local createReportAbuseDialog = function()
|
|
--Only show things if we are a NetworkClient
|
|
waitForChild(game,"NetworkClient")
|
|
|
|
waitForChild(game,"Players")
|
|
waitForProperty(game.Players, "LocalPlayer")
|
|
local localPlayer = game.Players.LocalPlayer
|
|
|
|
local reportAbuseButton
|
|
if gui:FindFirstChild("BottomRightControl") and gui.BottomRightControl:FindFirstChild("ReportAbuse") then
|
|
reportAbuseButton = gui.BottomRightControl.ReportAbuse
|
|
|
|
if not useOldDialog then
|
|
waitForChild(gui,"UserSettingsShield")
|
|
waitForChild(gui.UserSettingsShield, "Settings")
|
|
waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle,"GameMainMenu")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton")
|
|
gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton.Visible = false
|
|
end
|
|
else
|
|
waitForChild(gui,"UserSettingsShield")
|
|
waitForChild(gui.UserSettingsShield, "Settings")
|
|
waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle,"GameMainMenu")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton")
|
|
reportAbuseButton = gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton
|
|
end
|
|
|
|
|
|
local shield = Instance.new("TextButton")
|
|
shield.Name = "ReportAbuseShield"
|
|
shield.Text = ""
|
|
shield.AutoButtonColor = false
|
|
shield.Active = true
|
|
shield.Visible = false
|
|
shield.Size = UDim2.new(1,0,1,0)
|
|
shield.BackgroundColor3 = Color3I(51,51,51)
|
|
shield.BorderColor3 = Color3I(27,42,53)
|
|
shield.BackgroundTransparency = 0.4
|
|
shield.ZIndex = baseZIndex + 1
|
|
|
|
local closeAndResetDialog
|
|
|
|
local messageBoxButtons = {}
|
|
messageBoxButtons[1] = {}
|
|
messageBoxButtons[1].Text = "Ok"
|
|
messageBoxButtons[1].Function = function() closeAndResetDialog() end
|
|
local calmingMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "Our moderators will review the chat logs and determine what happened. The other user is probably just trying to make you mad.\n\nIf anyone used swear words, inappropriate language, or threatened you in real life, please report them for Bad Words or Threats", messageBoxButtons)
|
|
calmingMessageBox.Visible = false
|
|
calmingMessageBox.Parent = shield
|
|
|
|
local normalMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "Our moderators will review the chat logs and determine what happened.", messageBoxButtons)
|
|
normalMessageBox.Visible = false
|
|
normalMessageBox.Parent = shield
|
|
|
|
local frame = Instance.new("Frame")
|
|
frame.Name = "Settings"
|
|
frame.Position = UDim2.new(0.5, -250, 0.5, -200)
|
|
frame.Size = UDim2.new(0.0, 500, 0.0, 400)
|
|
frame.BackgroundTransparency = 1
|
|
frame.Active = true
|
|
frame.Parent = shield
|
|
|
|
local settingsFrame = Instance.new("Frame")
|
|
settingsFrame.Name = "ReportAbuseStyle"
|
|
settingsFrame.Size = UDim2.new(1, 0, 1, 0)
|
|
settingsFrame.Style = Enum.FrameStyle.RobloxRound
|
|
settingsFrame.Active = true
|
|
settingsFrame.ZIndex = baseZIndex + 1
|
|
settingsFrame.Parent = frame
|
|
|
|
local title = Instance.new("TextLabel")
|
|
title.Name = "Title"
|
|
title.Text = "Report Abuse"
|
|
title.TextColor3 = Color3I(221,221,221)
|
|
title.Position = UDim2.new(0.5, 0, 0, 30)
|
|
title.Font = Enum.Font.ArialBold
|
|
title.FontSize = Enum.FontSize.Size36
|
|
title.ZIndex = baseZIndex + 2
|
|
title.Parent = settingsFrame
|
|
|
|
local description = Instance.new("TextLabel")
|
|
description.Name = "Description"
|
|
description.Text = "This will send a complete report to a moderator. The moderator will review the chat log and take appropriate action."
|
|
description.TextColor3 = Color3I(221,221,221)
|
|
description.Position = UDim2.new(0,20, 0, 55)
|
|
description.Size = UDim2.new(1, -40, 0, 40)
|
|
description.BackgroundTransparency = 1
|
|
description.Font = Enum.Font.Arial
|
|
description.FontSize = Enum.FontSize.Size18
|
|
description.TextWrap = true
|
|
description.ZIndex = baseZIndex + 2
|
|
description.TextXAlignment = Enum.TextXAlignment.Left
|
|
description.TextYAlignment = Enum.TextYAlignment.Top
|
|
description.Parent = settingsFrame
|
|
|
|
local playerLabel = Instance.new("TextLabel")
|
|
playerLabel.Name = "PlayerLabel"
|
|
playerLabel.Text = "Which player?"
|
|
playerLabel.BackgroundTransparency = 1
|
|
playerLabel.Font = Enum.Font.Arial
|
|
playerLabel.FontSize = Enum.FontSize.Size18
|
|
playerLabel.Position = UDim2.new(0.025,0,0,100)
|
|
playerLabel.Size = UDim2.new(0.4,0,0,36)
|
|
playerLabel.TextColor3 = Color3I(255,255,255)
|
|
playerLabel.TextXAlignment = Enum.TextXAlignment.Left
|
|
playerLabel.ZIndex = baseZIndex + 2
|
|
playerLabel.Parent = settingsFrame
|
|
|
|
local abusingPlayer = nil
|
|
local abuse = nil
|
|
local submitReportButton = nil
|
|
|
|
local updatePlayerSelection = nil
|
|
local createPlayersDropDown = function()
|
|
local players = game:GetService("Players")
|
|
local playerNames = {}
|
|
local nameToPlayer = {}
|
|
local children = players:GetChildren()
|
|
local pos = 1
|
|
if children then
|
|
for i, player in ipairs(children) do
|
|
if player:IsA("Player") and player ~= localPlayer then
|
|
playerNames[pos] = player.Name
|
|
nameToPlayer[player.Name] = player
|
|
pos = pos + 1
|
|
end
|
|
end
|
|
end
|
|
local playerDropDown = nil
|
|
playerDropDown, updatePlayerSelection = RbxGui.CreateDropDownMenu(playerNames,
|
|
function(playerName)
|
|
abusingPlayer = nameToPlayer[playerName]
|
|
if abuse and abusingPlayer then
|
|
submitReportButton.Active = true
|
|
end
|
|
end)
|
|
playerDropDown.Name = "PlayersComboBox"
|
|
playerDropDown.ZIndex = baseZIndex + 2
|
|
playerDropDown.Position = UDim2.new(.425, 0, 0, 102)
|
|
playerDropDown.Size = UDim2.new(.55,0,0,32)
|
|
|
|
return playerDropDown
|
|
end
|
|
|
|
local abuseLabel = Instance.new("TextLabel")
|
|
abuseLabel.Name = "AbuseLabel"
|
|
abuseLabel.Text = "What did they do?"
|
|
abuseLabel.Font = Enum.Font.Arial
|
|
abuseLabel.BackgroundTransparency = 1
|
|
abuseLabel.FontSize = Enum.FontSize.Size18
|
|
abuseLabel.Position = UDim2.new(0.025,0,0,140)
|
|
abuseLabel.Size = UDim2.new(0.4,0,0,36)
|
|
abuseLabel.TextColor3 = Color3I(255,255,255)
|
|
abuseLabel.TextXAlignment = Enum.TextXAlignment.Left
|
|
abuseLabel.ZIndex = baseZIndex + 2
|
|
abuseLabel.Parent = settingsFrame
|
|
|
|
local abuses = {"Bad Words or Threats","Bad Username","Talking about Dating","Account Trading or Sharing","Asking Personal Questions","Rude or Mean Behavior","False Reporting Me"}
|
|
local abuseDropDown, updateAbuseSelection = RbxGui.CreateDropDownMenu(abuses,
|
|
function(abuseText)
|
|
abuse = abuseText
|
|
if abuse and abusingPlayer then
|
|
submitReportButton.Active = true
|
|
end
|
|
end, true)
|
|
abuseDropDown.Name = "AbuseComboBox"
|
|
abuseDropDown.ZIndex = baseZIndex + 2
|
|
abuseDropDown.Position = UDim2.new(0.425, 0, 0, 142)
|
|
abuseDropDown.Size = UDim2.new(0.55,0,0,32)
|
|
abuseDropDown.Parent = settingsFrame
|
|
|
|
local shortDescriptionLabel = Instance.new("TextLabel")
|
|
shortDescriptionLabel.Name = "ShortDescriptionLabel"
|
|
shortDescriptionLabel.Text = "Short Description: (optional)"
|
|
shortDescriptionLabel.Font = Enum.Font.Arial
|
|
shortDescriptionLabel.FontSize = Enum.FontSize.Size18
|
|
shortDescriptionLabel.Position = UDim2.new(0.025,0,0,180)
|
|
shortDescriptionLabel.Size = UDim2.new(0.95,0,0,36)
|
|
shortDescriptionLabel.TextColor3 = Color3I(255,255,255)
|
|
shortDescriptionLabel.TextXAlignment = Enum.TextXAlignment.Left
|
|
shortDescriptionLabel.BackgroundTransparency = 1
|
|
shortDescriptionLabel.ZIndex = baseZIndex + 2
|
|
shortDescriptionLabel.Parent = settingsFrame
|
|
|
|
local shortDescriptionWrapper = Instance.new("Frame")
|
|
shortDescriptionWrapper.Name = "ShortDescriptionWrapper"
|
|
shortDescriptionWrapper.Position = UDim2.new(0.025,0,0,220)
|
|
shortDescriptionWrapper.Size = UDim2.new(0.95,0,1,-310)
|
|
shortDescriptionWrapper.BackgroundColor3 = Color3I(0,0,0)
|
|
shortDescriptionWrapper.BorderSizePixel = 0
|
|
shortDescriptionWrapper.ZIndex = baseZIndex + 2
|
|
shortDescriptionWrapper.Parent = settingsFrame
|
|
|
|
local shortDescriptionBox = Instance.new("TextBox")
|
|
shortDescriptionBox.Name = "TextBox"
|
|
shortDescriptionBox.Text = ""
|
|
shortDescriptionBox.Font = Enum.Font.Arial
|
|
shortDescriptionBox.FontSize = Enum.FontSize.Size18
|
|
shortDescriptionBox.Position = UDim2.new(0,3,0,3)
|
|
shortDescriptionBox.Size = UDim2.new(1,-6,1,-6)
|
|
shortDescriptionBox.TextColor3 = Color3I(255,255,255)
|
|
shortDescriptionBox.TextXAlignment = Enum.TextXAlignment.Left
|
|
shortDescriptionBox.TextYAlignment = Enum.TextYAlignment.Top
|
|
shortDescriptionBox.TextWrap = true
|
|
shortDescriptionBox.BackgroundColor3 = Color3I(0,0,0)
|
|
shortDescriptionBox.BorderSizePixel = 0
|
|
shortDescriptionBox.ZIndex = baseZIndex + 2
|
|
shortDescriptionBox.Parent = shortDescriptionWrapper
|
|
|
|
submitReportButton = Instance.new("TextButton")
|
|
submitReportButton.Name = "SubmitReportBtn"
|
|
submitReportButton.Active = false
|
|
submitReportButton.Font = Enum.Font.Arial
|
|
submitReportButton.FontSize = Enum.FontSize.Size18
|
|
submitReportButton.Position = UDim2.new(0.1, 0, 1, -80)
|
|
submitReportButton.Size = UDim2.new(0.35,0,0,50)
|
|
submitReportButton.AutoButtonColor = true
|
|
submitReportButton.Style = Enum.ButtonStyle.RobloxButtonDefault
|
|
submitReportButton.Text = "Submit Report"
|
|
submitReportButton.TextColor3 = Color3I(255,255,255)
|
|
submitReportButton.ZIndex = baseZIndex + 2
|
|
submitReportButton.Parent = settingsFrame
|
|
|
|
submitReportButton.MouseButton1Click:connect(function()
|
|
if submitReportButton.Active then
|
|
if abuse and abusingPlayer then
|
|
frame.Visible = false
|
|
game.Players:ReportAbuse(abusingPlayer, abuse, shortDescriptionBox.Text)
|
|
if abuse == "Rude or Mean Behavior" or abuse == "False Reporting Me" then
|
|
calmingMessageBox.Visible = true
|
|
else
|
|
normalMessageBox.Visible = true
|
|
end
|
|
else
|
|
closeAndResetDialog()
|
|
end
|
|
end
|
|
end)
|
|
|
|
local cancelButton = Instance.new("TextButton")
|
|
cancelButton.Name = "CancelBtn"
|
|
cancelButton.Font = Enum.Font.Arial
|
|
cancelButton.FontSize = Enum.FontSize.Size18
|
|
cancelButton.Position = UDim2.new(0.55, 0, 1, -80)
|
|
cancelButton.Size = UDim2.new(0.35,0,0,50)
|
|
cancelButton.AutoButtonColor = true
|
|
cancelButton.Style = Enum.ButtonStyle.RobloxButtonDefault
|
|
cancelButton.Text = "Cancel"
|
|
cancelButton.TextColor3 = Color3I(255,255,255)
|
|
cancelButton.ZIndex = baseZIndex + 2
|
|
cancelButton.Parent = settingsFrame
|
|
|
|
closeAndResetDialog = function()
|
|
--Delete old player combo box
|
|
local oldComboBox = settingsFrame:FindFirstChild("PlayersComboBox")
|
|
if oldComboBox then
|
|
oldComboBox.Parent = nil
|
|
end
|
|
|
|
abusingPlayer = nil updatePlayerSelection(nil)
|
|
abuse = nil updateAbuseSelection(nil)
|
|
submitReportButton.Active = false
|
|
shortDescriptionBox.Text = ""
|
|
frame.Visible = true
|
|
calmingMessageBox.Visible = false
|
|
normalMessageBox.Visible = false
|
|
shield.Visible = false
|
|
reportAbuseButton.Active = true
|
|
pcall(function() game.GuiService:RemoveCenterDialog(shield) end)
|
|
end
|
|
|
|
cancelButton.MouseButton1Click:connect(closeAndResetDialog)
|
|
|
|
reportAbuseButton.MouseButton1Click:connect(
|
|
function()
|
|
createPlayersDropDown().Parent = settingsFrame
|
|
|
|
local centerDialogSuccess = pcall(function() game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog,
|
|
--ShowFunction
|
|
function()
|
|
reportAbuseButton.Active = false
|
|
shield.Visible = true
|
|
end,
|
|
--HideFunction
|
|
function()
|
|
reportAbuseButton.Active = true
|
|
shield.Visible = false
|
|
end)
|
|
end)
|
|
if centerDialogSuccess == false then
|
|
reportAbuseButton.Active = false
|
|
shield.Visible = true
|
|
end
|
|
end
|
|
)
|
|
|
|
robloxLock(shield)
|
|
return shield
|
|
end
|
|
|
|
local createChatBar = function()
|
|
--Only show a chat bar if we are a NetworkClient
|
|
waitForChild(game, "NetworkClient")
|
|
|
|
waitForChild(game, "Players")
|
|
waitForProperty(game.Players, "LocalPlayer")
|
|
|
|
local chatBar = Instance.new("Frame")
|
|
chatBar.Name = "ChatBar"
|
|
chatBar.Size = UDim2.new(1, 0, 0, 22)
|
|
chatBar.Position = UDim2.new(0, 0, 1, 0)
|
|
chatBar.BackgroundColor3 = Color3.new(0,0,0)
|
|
chatBar.BorderSizePixel = 0
|
|
|
|
local chatBox = Instance.new("TextBox")
|
|
chatBox.Text = ""
|
|
chatBox.Visible = false
|
|
chatBox.Size = UDim2.new(1,-4,1,0)
|
|
chatBox.Position = UDim2.new(0,2,0,0)
|
|
chatBox.TextXAlignment = Enum.TextXAlignment.Left
|
|
chatBox.Font = Enum.Font.Arial
|
|
chatBox.ClearTextOnFocus = false
|
|
chatBox.FontSize = Enum.FontSize.Size14
|
|
chatBox.TextColor3 = Color3.new(1,1,1)
|
|
chatBox.BackgroundTransparency = 1
|
|
chatBox.Parent = chatBar
|
|
|
|
local chatButton = Instance.new("TextButton")
|
|
chatButton.Size = UDim2.new(1,-4,1,0)
|
|
chatButton.Position = UDim2.new(0,2,0,0)
|
|
chatButton.AutoButtonColor = false
|
|
chatButton.Text = "To chat click here or press \"/\" key"
|
|
chatButton.TextXAlignment = Enum.TextXAlignment.Left
|
|
chatButton.Font = Enum.Font.Arial
|
|
chatButton.FontSize = Enum.FontSize.Size14
|
|
chatButton.TextColor3 = Color3.new(1,1,1)
|
|
chatButton.BackgroundTransparency = 1
|
|
chatButton.Parent = chatBar
|
|
|
|
local activateChat = function()
|
|
if chatBox.Visible then
|
|
return
|
|
end
|
|
chatButton.Visible = false
|
|
chatBox.Text = ""
|
|
chatBox.Visible = true
|
|
chatBox:CaptureFocus()
|
|
end
|
|
|
|
chatButton.MouseButton1Click:connect(activateChat)
|
|
|
|
local hotKeyEnabled = true
|
|
local toggleHotKey = function(value)
|
|
hotKeyEnabled = value
|
|
end
|
|
|
|
local guiService = game:GetService("GuiService")
|
|
local newChatMode = pcall(function()
|
|
guiService:AddSpecialKey(Enum.SpecialKey.ChatHotkey)
|
|
guiService.SpecialKeyPressed:connect(function(key) if key == Enum.SpecialKey.ChatHotkey and hotKeyEnabled then activateChat() end end)
|
|
end)
|
|
if not newChatMode then
|
|
guiService:AddKey("/")
|
|
guiService.KeyPressed:connect(function(key) if key == "/" and hotKeyEnabled then activateChat() end end)
|
|
end
|
|
|
|
chatBox.FocusLost:connect(
|
|
function(enterPressed)
|
|
if enterPressed then
|
|
if chatBox.Text ~= "" then
|
|
local str = chatBox.Text
|
|
if string.sub(str, 1, 1) == '%' then
|
|
game.Players:TeamChat(string.sub(str, 2))
|
|
else
|
|
game.Players:Chat(str)
|
|
end
|
|
end
|
|
end
|
|
chatBox.Text = ""
|
|
chatBox.Visible = false
|
|
chatButton.Visible = true
|
|
end)
|
|
robloxLock(chatBar)
|
|
return chatBar, toggleHotKey
|
|
end
|
|
|
|
--Spawn a thread for the help dialog
|
|
delay(0,
|
|
function()
|
|
local helpDialog = createHelpDialog(0)
|
|
helpDialog.Parent = gui
|
|
|
|
helpButton.MouseButton1Click:connect(
|
|
function()
|
|
local centerDialogSuccess = pcall(function() game.GuiService:AddCenterDialog(helpDialog, Enum.CenterDialogType.ModalDialog,
|
|
--ShowFunction
|
|
function()
|
|
helpDialog.Visible = true
|
|
end,
|
|
--HideFunction
|
|
function()
|
|
helpDialog.Visible = false
|
|
end)
|
|
end)
|
|
if centerDialogSuccess == false then
|
|
helpDialog.Visible = true
|
|
end
|
|
end)
|
|
helpButton.Active = true
|
|
end)
|
|
|
|
--Spawn a thread for the Save dialogs
|
|
local isSaveDialogSupported = pcall(function() local var = game.LocalSaveEnabled end)
|
|
if isSaveDialogSupported then
|
|
delay(0,
|
|
function()
|
|
local saveDialogs = createSaveDialogs()
|
|
saveDialogs.Parent = gui
|
|
|
|
game.RequestShutdown = function()
|
|
local centerDialogSuccess = pcall(function() game.GuiService:AddCenterDialog(saveDialogs, Enum.CenterDialogType.QuitDialog,
|
|
--ShowFunction
|
|
function()
|
|
saveDialogs.Visible = true
|
|
end,
|
|
--HideFunction
|
|
function()
|
|
saveDialogs.Visible = false
|
|
end)
|
|
end)
|
|
|
|
if centerDialogSuccess == false then
|
|
saveDialogs.Visible = true
|
|
end
|
|
return true
|
|
end
|
|
end)
|
|
end
|
|
|
|
--Spawn a thread for the Report Abuse dialogs
|
|
print("about to create")
|
|
delay(0,
|
|
function()
|
|
createReportAbuseDialog().Parent = gui
|
|
print("parenting report abuse")
|
|
if gui:FindFirstChild("BottomRightControl") and gui.BottomRightControl:FindFirstChild("ReportAbuse") then
|
|
gui.BottomRightControl.ReportAbuse.Active = true
|
|
elseif useOldDialog then
|
|
gui.BottomRightControl.ReportAbuse.Active = true
|
|
print("old stuff")
|
|
else
|
|
waitForChild(gui,"UserSettingsShield")
|
|
waitForChild(gui.UserSettingsShield, "Settings")
|
|
waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle,"GameMainMenu")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton")
|
|
gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton.Active = true
|
|
end
|
|
end)
|
|
|
|
--Spawn a thread for Chat Bar
|
|
local isChatBarSupported, coreGuiVersion = pcall(function() return game.CoreGui.Version end) -- isChatBarSupported is for PC Lua chat, coreGuiVersion should be >=2 as well
|
|
local isMacChat, version = pcall(function() return game.GuiService.Version end)
|
|
if isMacChat and version >= 2 then
|
|
delay(0,
|
|
function()
|
|
waitForChild(game, "Players")
|
|
waitForProperty(game.Players, "LocalPlayer")
|
|
|
|
local advancedChatBarSupported = pcall(function() return game.Players.LocalPlayer.ChatMode end)
|
|
local chatBar, toggleHotKey = createChatBar()
|
|
|
|
if advancedChatBarSupported then
|
|
local function toggleChatBar(chatMode)
|
|
if chatMode == Enum.ChatMode.Menu then
|
|
chatBar.Parent = nil
|
|
game.GuiService:SetGlobalSizeOffsetPixel(0,0)
|
|
toggleHotKey(false)
|
|
elseif chatMode == Enum.ChatMode.TextAndMenu then
|
|
chatBar.Parent = gui
|
|
game.GuiService:SetGlobalSizeOffsetPixel(0,-22)
|
|
toggleHotKey(true)
|
|
end
|
|
end
|
|
game.Players.LocalPlayer.Changed:connect(
|
|
function(prop)
|
|
if prop == "ChatMode" then
|
|
toggleChatBar(game.Players.LocalPlayer.ChatMode)
|
|
end
|
|
end)
|
|
toggleChatBar(game.Players.LocalPlayer.ChatMode)
|
|
else
|
|
chatBar.Parent = gui
|
|
game.GuiService:SetGlobalSizeOffsetPixel(0,-22)
|
|
end
|
|
end)
|
|
end
|
|
|
|
|
|
local BurningManPlaceID = 41324860
|
|
-- TODO: remove click to walk completely if testing shows we don't need it
|
|
-- Removes click to walk option from Burning Man
|
|
delay(0,
|
|
function()
|
|
waitForChild(game,"NetworkClient")
|
|
waitForChild(game,"Players")
|
|
waitForProperty(game.Players, "LocalPlayer")
|
|
waitForProperty(game.Players.LocalPlayer, "Character")
|
|
waitForChild(game.Players.LocalPlayer.Character, "Humanoid")
|
|
waitForProperty(game, "PlaceId")
|
|
pcall(function()
|
|
if game.PlaceId == BurningManPlaceID then
|
|
game.Players.LocalPlayer.Character.Humanoid:SetClickToWalkEnabled(false)
|
|
game.Players.LocalPlayer.CharacterAdded:connect(function(character)
|
|
waitForChild(character, "Humanoid")
|
|
character.Humanoid:SetClickToWalkEnabled(false)
|
|
end)
|
|
end
|
|
end)
|
|
end)
|
|
|
|
end --LoadLibrary if |