Fuck with the CoreScripts despite task telling me very clearly not to fuck with the corescripts

This commit is contained in:
Lewin Kelly 2023-04-08 08:13:02 +01:00
parent 26dfa13ee3
commit bb1eb0faa6
26 changed files with 20382 additions and 8568 deletions

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
-- Essentially a user can bind a lua function to a key code, input type (mousebutton1 etc.) and this -- Essentially a user can bind a lua function to a key code, input type (mousebutton1 etc.) and this
-- Variables -- Variables
local contextActionService = Game:GetService("ContextActionService") local contextActionService = Game:GetService "ContextActionService"
local isTouchDevice = Game:GetService("UserInputService").TouchEnabled local isTouchDevice = Game:GetService("UserInputService").TouchEnabled
local functionTable = {} local functionTable = {}
local buttonVector = {} local buttonVector = {}
@ -16,15 +16,15 @@ local ContextUpImage = "http://www.banland.xyz/asset/?id=97166444"
local oldTouches = {} local oldTouches = {}
local buttonPositionTable = { local buttonPositionTable = {
[1] = UDim2.new(0,123,0,70), [1] = UDim2.new(0, 123, 0, 70),
[2] = UDim2.new(0,30,0,60), [2] = UDim2.new(0, 30, 0, 60),
[3] = UDim2.new(0,180,0,160), [3] = UDim2.new(0, 180, 0, 160),
[4] = UDim2.new(0,85,0,-25), [4] = UDim2.new(0, 85, 0, -25),
[5] = UDim2.new(0,185,0,-25), [5] = UDim2.new(0, 185, 0, -25),
[6] = UDim2.new(0,185,0,260), [6] = UDim2.new(0, 185, 0, 260),
[7] = UDim2.new(0,216,0,65) [7] = UDim2.new(0, 216, 0, 65),
} }
local maxButtons = #buttonPositionTable local maxButtons = #buttonPositionTable
-- Preload images -- Preload images
@ -41,13 +41,13 @@ end
function createContextActionGui() function createContextActionGui()
if not buttonScreenGui and isTouchDevice then if not buttonScreenGui and isTouchDevice then
buttonScreenGui = Instance.new("ScreenGui") buttonScreenGui = Instance.new "ScreenGui"
buttonScreenGui.Name = "ContextActionGui" buttonScreenGui.Name = "ContextActionGui"
buttonFrame = Instance.new("Frame") buttonFrame = Instance.new "Frame"
buttonFrame.BackgroundTransparency = 1 buttonFrame.BackgroundTransparency = 1
buttonFrame.Size = UDim2.new(0.3,0,0.5,0) buttonFrame.Size = UDim2.new(0.3, 0, 0.5, 0)
buttonFrame.Position = UDim2.new(0.7,0,0.5,0) buttonFrame.Position = UDim2.new(0.7, 0, 0.5, 0)
buttonFrame.Name = "ContextButtonFrame" buttonFrame.Name = "ContextButtonFrame"
buttonFrame.Parent = buttonScreenGui buttonFrame.Parent = buttonScreenGui
end end
@ -66,7 +66,7 @@ function setButtonSizeAndPosition(object)
xOffset = 40 xOffset = 40
end end
object.Size = UDim2.new(0,buttonSize,0,buttonSize) object.Size = UDim2.new(0, buttonSize, 0, buttonSize)
end end
function contextButtonDown(button, inputObject, actionName) function contextButtonDown(button, inputObject, actionName)
@ -85,7 +85,10 @@ end
function contextButtonUp(button, inputObject, actionName) function contextButtonUp(button, inputObject, actionName)
button.Image = ContextUpImage button.Image = ContextUpImage
if inputObject.UserInputType == Enum.UserInputType.Touch and inputObject.UserInputState == Enum.UserInputState.End then if
inputObject.UserInputType == Enum.UserInputType.Touch
and inputObject.UserInputState == Enum.UserInputState.End
then
contextActionService:CallFunction(actionName, Enum.UserInputState.End, inputObject) contextActionService:CallFunction(actionName, Enum.UserInputState.End, inputObject)
end end
end end
@ -94,26 +97,27 @@ function isSmallScreenDevice()
return Game:GetService("GuiService"):GetScreenResolution().y <= 320 return Game:GetService("GuiService"):GetScreenResolution().y <= 320
end end
function createNewButton(actionName, functionInfoTable) function createNewButton(actionName, functionInfoTable)
local contextButton = Instance.new("ImageButton") local contextButton = Instance.new "ImageButton"
contextButton.Name = "ContextActionButton" contextButton.Name = "ContextActionButton"
contextButton.BackgroundTransparency = 1 contextButton.BackgroundTransparency = 1
contextButton.Size = UDim2.new(0,90,0,90) contextButton.Size = UDim2.new(0, 90, 0, 90)
contextButton.Active = true contextButton.Active = true
if isSmallScreenDevice() then if isSmallScreenDevice() then
contextButton.Size = UDim2.new(0,70,0,70) contextButton.Size = UDim2.new(0, 70, 0, 70)
end end
contextButton.Image = ContextUpImage contextButton.Image = ContextUpImage
contextButton.Parent = buttonFrame contextButton.Parent = buttonFrame
local currentButtonTouch = nil local currentButtonTouch = nil
Game:GetService("UserInputService").InputEnded:connect(function ( inputObject ) Game:GetService("UserInputService").InputEnded:connect(function(inputObject)
oldTouches[inputObject] = nil oldTouches[inputObject] = nil
end) end)
contextButton.InputBegan:connect(function(inputObject) contextButton.InputBegan:connect(function(inputObject)
if oldTouches[inputObject] then return end if oldTouches[inputObject] then
return
end
if inputObject.UserInputState == Enum.UserInputState.Begin and currentButtonTouch == nil then if inputObject.UserInputState == Enum.UserInputState.Begin and currentButtonTouch == nil then
currentButtonTouch = inputObject currentButtonTouch = inputObject
@ -121,21 +125,29 @@ function createNewButton(actionName, functionInfoTable)
end end
end) end)
contextButton.InputChanged:connect(function(inputObject) contextButton.InputChanged:connect(function(inputObject)
if oldTouches[inputObject] then return end if oldTouches[inputObject] then
if currentButtonTouch ~= inputObject then return end return
end
if currentButtonTouch ~= inputObject then
return
end
contextButtonMoved(contextButton, inputObject, actionName) contextButtonMoved(contextButton, inputObject, actionName)
end) end)
contextButton.InputEnded:connect(function(inputObject) contextButton.InputEnded:connect(function(inputObject)
if oldTouches[inputObject] then return end if oldTouches[inputObject] then
if currentButtonTouch ~= inputObject then return end return
end
if currentButtonTouch ~= inputObject then
return
end
currentButtonTouch = nil currentButtonTouch = nil
oldTouches[inputObject] = true oldTouches[inputObject] = true
contextButtonUp(contextButton, inputObject, actionName) contextButtonUp(contextButton, inputObject, actionName)
end) end)
local actionIcon = Instance.new("ImageLabel") local actionIcon = Instance.new "ImageLabel"
actionIcon.Name = "ActionIcon" actionIcon.Name = "ActionIcon"
actionIcon.Position = UDim2.new(0.175, 0, 0.175, 0) actionIcon.Position = UDim2.new(0.175, 0, 0.175, 0)
actionIcon.Size = UDim2.new(0.65, 0, 0.65, 0) actionIcon.Size = UDim2.new(0.65, 0, 0.65, 0)
@ -145,12 +157,12 @@ function createNewButton(actionName, functionInfoTable)
end end
actionIcon.Parent = contextButton actionIcon.Parent = contextButton
local actionTitle = Instance.new("TextLabel") local actionTitle = Instance.new "TextLabel"
actionTitle.Name = "ActionTitle" actionTitle.Name = "ActionTitle"
actionTitle.Size = UDim2.new(1,0,1,0) actionTitle.Size = UDim2.new(1, 0, 1, 0)
actionTitle.BackgroundTransparency = 1 actionTitle.BackgroundTransparency = 1
actionTitle.Font = Enum.Font.SourceSansBold actionTitle.Font = Enum.Font.SourceSansBold
actionTitle.TextColor3 = Color3.new(1,1,1) actionTitle.TextColor3 = Color3.new(1, 1, 1)
actionTitle.TextStrokeTransparency = 0 actionTitle.TextStrokeTransparency = 0
actionTitle.FontSize = Enum.FontSize.Size18 actionTitle.FontSize = Enum.FontSize.Size18
actionTitle.TextWrapped = true actionTitle.TextWrapped = true
@ -163,11 +175,11 @@ function createNewButton(actionName, functionInfoTable)
return contextButton return contextButton
end end
function createButton( actionName, functionInfoTable ) function createButton(actionName, functionInfoTable)
local button = createNewButton(actionName, functionInfoTable) local button = createNewButton(actionName, functionInfoTable)
local position = nil local position = nil
for i = 1,#buttonVector do for i = 1, #buttonVector do
if buttonVector[i] == "empty" then if buttonVector[i] == "empty" then
position = i position = i
break break
@ -194,14 +206,16 @@ function createButton( actionName, functionInfoTable )
end end
function removeAction(actionName) function removeAction(actionName)
if not functionTable[actionName] then return end if not functionTable[actionName] then
return
end
local actionButton = functionTable[actionName]["button"] local actionButton = functionTable[actionName]["button"]
if actionButton then if actionButton then
actionButton.Parent = nil actionButton.Parent = nil
for i = 1,#buttonVector do for i = 1, #buttonVector do
if buttonVector[i] == actionButton then if buttonVector[i] == actionButton then
buttonVector[i] = "empty" buttonVector[i] = "empty"
break break
@ -214,11 +228,11 @@ function removeAction(actionName)
functionTable[actionName] = nil functionTable[actionName] = nil
end end
function addAction(actionName,createTouchButton,functionInfoTable) function addAction(actionName, createTouchButton, functionInfoTable)
if functionTable[actionName] then if functionTable[actionName] then
removeAction(actionName) removeAction(actionName)
end end
functionTable[actionName] = {functionInfoTable} functionTable[actionName] = { functionInfoTable }
if createTouchButton and isTouchDevice then if createTouchButton and isTouchDevice then
createContextActionGui() createContextActionGui()
createButton(actionName, functionInfoTable) createButton(actionName, functionInfoTable)
@ -226,7 +240,7 @@ function addAction(actionName,createTouchButton,functionInfoTable)
end end
-- Connections -- Connections
contextActionService.BoundActionChanged:connect( function(actionName, changeName, changeTable) contextActionService.BoundActionChanged:connect(function(actionName, changeName, changeTable)
if functionTable[actionName] and changeTable then if functionTable[actionName] and changeTable then
local button = functionTable[actionName]["button"] local button = functionTable[actionName]["button"]
if button then if button then
@ -243,15 +257,15 @@ contextActionService.BoundActionChanged:connect( function(actionName, changeName
end end
end) end)
contextActionService.BoundActionAdded:connect( function(actionName, createTouchButton, functionInfoTable) contextActionService.BoundActionAdded:connect(function(actionName, createTouchButton, functionInfoTable)
addAction(actionName, createTouchButton, functionInfoTable) addAction(actionName, createTouchButton, functionInfoTable)
end) end)
contextActionService.BoundActionRemoved:connect( function(actionName, functionInfoTable) contextActionService.BoundActionRemoved:connect(function(actionName, functionInfoTable)
removeAction(actionName) removeAction(actionName)
end) end)
contextActionService.GetActionButtonEvent:connect( function(actionName) contextActionService.GetActionButtonEvent:connect(function(actionName)
if functionTable[actionName] then if functionTable[actionName] then
contextActionService:FireActionButtonFoundSignal(actionName, functionTable[actionName]["button"]) contextActionService:FireActionButtonFoundSignal(actionName, functionTable[actionName]["button"])
end end
@ -260,5 +274,5 @@ end)
-- make sure any bound data before we setup connections is handled -- make sure any bound data before we setup connections is handled
local boundActions = contextActionService:GetAllBoundActionInfo() local boundActions = contextActionService:GetAllBoundActionInfo()
for actionName, actionData in pairs(boundActions) do for actionName, actionData in pairs(boundActions) do
addAction(actionName,actionData["createTouchButton"],actionData) addAction(actionName, actionData["createTouchButton"], actionData)
end end

View File

@ -6,21 +6,23 @@
while not Game do while not Game do
wait() wait()
end end
while not Game:FindFirstChild("Players") do while not Game:FindFirstChild "Players" do
wait() wait()
end end
while not Game.Players.LocalPlayer do while not Game.Players.LocalPlayer do
wait() wait()
end end
while not Game:FindFirstChild("CoreGui") do while not Game:FindFirstChild "CoreGui" do
wait() wait()
end end
while not Game.CoreGui:FindFirstChild("RobloxGui") do while not Game.CoreGui:FindFirstChild "RobloxGui" do
wait() wait()
end end
local userInputService = Game:GetService("UserInputService") local userInputService = Game:GetService "UserInputService"
local success = pcall(function() userInputService:IsLuaTouchControls() end) local success = pcall(function()
userInputService:IsLuaTouchControls()
end)
if not success then if not success then
script:Destroy() script:Destroy()
end end
@ -34,9 +36,8 @@ function isSmallScreenDevice()
end end
local localPlayer = Game.Players.LocalPlayer local localPlayer = Game.Players.LocalPlayer
local thumbstickInactiveAlpha = 0.3
local thumbstickSize = 120 local thumbstickSize = 120
if isSmallScreenDevice() then if isSmallScreenDevice() then
thumbstickSize = 70 thumbstickSize = 70
end end
@ -46,7 +47,7 @@ local ThumbstickMaxPercentGive = 0.92
local thumbstickTouches = {} local thumbstickTouches = {}
local jumpButtonSize = 90 local jumpButtonSize = 90
if isSmallScreenDevice() then if isSmallScreenDevice() then
jumpButtonSize = 70 jumpButtonSize = 70
end end
local oldJumpTouches = {} local oldJumpTouches = {}
@ -58,7 +59,6 @@ local CameraZoomSensitivity = 0.03
local PinchZoomDelay = 0.2 local PinchZoomDelay = 0.2
local cameraTouch = nil local cameraTouch = nil
-- make sure all of our images are good to go -- make sure all of our images are good to go
Game:GetService("ContentProvider"):Preload(touchControlsSheet) Game:GetService("ContentProvider"):Preload(touchControlsSheet)
@ -67,134 +67,181 @@ Game:GetService("ContentProvider"):Preload(touchControlsSheet)
-- Functions -- Functions
function DistanceBetweenTwoPoints(point1, point2) function DistanceBetweenTwoPoints(point1, point2)
local dx = point2.x - point1.x local dx = point2.x - point1.x
local dy = point2.y - point1.y local dy = point2.y - point1.y
return math.sqrt( (dx*dx) + (dy*dy) ) return math.sqrt((dx * dx) + (dy * dy))
end end
function transformFromCenterToTopLeft(pointToTranslate, guiObject) function transformFromCenterToTopLeft(pointToTranslate, guiObject)
return UDim2.new(0,pointToTranslate.x - guiObject.AbsoluteSize.x/2,0,pointToTranslate.y - guiObject.AbsoluteSize.y/2) return UDim2.new(
0,
pointToTranslate.x - guiObject.AbsoluteSize.x / 2,
0,
pointToTranslate.y - guiObject.AbsoluteSize.y / 2
)
end end
function rotatePointAboutLocation(pointToRotate, pointToRotateAbout, radians) function rotatePointAboutLocation(pointToRotate, pointToRotateAbout, radians)
local sinAnglePercent = math.sin(radians) local sinAnglePercent = math.sin(radians)
local cosAnglePercent = math.cos(radians) local cosAnglePercent = math.cos(radians)
local transformedPoint = pointToRotate
-- translate point back to origin:
transformedPoint = Vector2.new(transformedPoint.x - pointToRotateAbout.x, transformedPoint.y - pointToRotateAbout.y)
-- rotate point
local xNew = transformedPoint.x * cosAnglePercent - transformedPoint.y * sinAnglePercent
local yNew = transformedPoint.x * sinAnglePercent + transformedPoint.y * cosAnglePercent
-- translate point back:
transformedPoint = Vector2.new(xNew + pointToRotateAbout.x, yNew + pointToRotateAbout.y)
return transformedPoint local transformedPoint = pointToRotate
-- translate point back to origin:
transformedPoint = Vector2.new(transformedPoint.x - pointToRotateAbout.x, transformedPoint.y - pointToRotateAbout.y)
-- rotate point
local xNew = transformedPoint.x * cosAnglePercent - transformedPoint.y * sinAnglePercent
local yNew = transformedPoint.x * sinAnglePercent + transformedPoint.y * cosAnglePercent
-- translate point back:
transformedPoint = Vector2.new(xNew + pointToRotateAbout.x, yNew + pointToRotateAbout.y)
return transformedPoint
end end
function dotProduct(v1,v2) function dotProduct(v1, v2)
return ((v1.x*v2.x) + (v1.y*v2.y)) return ((v1.x * v2.x) + (v1.y * v2.y))
end end
function stationaryThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation) function stationaryThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation)
local thumbstickOuterCenterPosition = Vector2.new(thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x/2, thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y/2) local thumbstickOuterCenterPosition = Vector2.new(
local centerDiff = DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenterPosition) thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x / 2,
thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y / 2
-- thumbstick is moving outside our region, need to cap its distance )
if centerDiff > (thumbstickSize/2) then local centerDiff = DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenterPosition)
local thumbVector = Vector2.new(touchLocation.x - thumbstickOuterCenterPosition.x,touchLocation.y - thumbstickOuterCenterPosition.y);
local normal = thumbVector.unit
if normal.x == math.nan or normal.x == math.inf then
normal = Vector2.new(0,normal.y)
end
if normal.y == math.nan or normal.y == math.inf then
normal = Vector2.new(normal.x,0)
end
local newThumbstickInnerPosition = thumbstickOuterCenterPosition + (normal * (thumbstickSize/2))
thumbstickFrame.Position = transformFromCenterToTopLeft(newThumbstickInnerPosition, thumbstickFrame)
else
thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation,thumbstickFrame)
end
return Vector2.new(thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset) -- thumbstick is moving outside our region, need to cap its distance
if centerDiff > (thumbstickSize / 2) then
local thumbVector = Vector2.new(
touchLocation.x - thumbstickOuterCenterPosition.x,
touchLocation.y - thumbstickOuterCenterPosition.y
)
local normal = thumbVector.unit
if normal.x == math.nan or normal.x == math.inf then
normal = Vector2.new(0, normal.y)
end
if normal.y == math.nan or normal.y == math.inf then
normal = Vector2.new(normal.x, 0)
end
local newThumbstickInnerPosition = thumbstickOuterCenterPosition + (normal * (thumbstickSize / 2))
thumbstickFrame.Position = transformFromCenterToTopLeft(newThumbstickInnerPosition, thumbstickFrame)
else
thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation, thumbstickFrame)
end
return Vector2.new(
thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,
thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset
)
end end
function followThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation) function followThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation)
local thumbstickOuterCenter = Vector2.new(thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x/2, thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y/2) local thumbstickOuterCenter = Vector2.new(
thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x / 2,
-- thumbstick is moving outside our region, need to position outer thumbstick texture carefully (to make look and feel like actual joystick controller) thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y / 2
if DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenter) > thumbstickSize/2 then )
local thumbstickInnerCenter = Vector2.new(thumbstickFrame.Position.X.Offset + thumbstickFrame.AbsoluteSize.x/2, thumbstickFrame.Position.Y.Offset + thumbstickFrame.AbsoluteSize.y/2)
local movementVectorUnit = Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y).unit
local outerToInnerVectorCurrent = Vector2.new(thumbstickInnerCenter.x - thumbstickOuterCenter.x, thumbstickInnerCenter.y - thumbstickOuterCenter.y) -- thumbstick is moving outside our region, need to position outer thumbstick texture carefully (to make look and feel like actual joystick controller)
local outerToInnerVectorCurrentUnit = outerToInnerVectorCurrent.unit if DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenter) > thumbstickSize / 2 then
local movementVector = Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y) local thumbstickInnerCenter = Vector2.new(
thumbstickFrame.Position.X.Offset + thumbstickFrame.AbsoluteSize.x / 2,
-- First, find the angle between the new thumbstick movement vector, thumbstickFrame.Position.Y.Offset + thumbstickFrame.AbsoluteSize.y / 2
-- and the vector between thumbstick inner and thumbstick outer. )
-- We will use this to pivot thumbstick outer around thumbstick inner, gives a nice joystick feel local movementVectorUnit =
local crossOuterToInnerWithMovement = (outerToInnerVectorCurrentUnit.x * movementVectorUnit.y) - (outerToInnerVectorCurrentUnit.y * movementVectorUnit.x) Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y).unit
local angle = math.atan2(crossOuterToInnerWithMovement, dotProduct(outerToInnerVectorCurrentUnit, movementVectorUnit))
local anglePercent = angle * math.min( (movementVector.magnitude)/(outerToInnerVectorCurrent.magnitude), 1.0);
-- If angle is significant, rotate about the inner thumbsticks current center
if math.abs(anglePercent) > 0.00001 then
local outerThumbCenter = rotatePointAboutLocation(thumbstickOuterCenter, thumbstickInnerCenter, anglePercent)
thumbstickOuter.Position = transformFromCenterToTopLeft(Vector2.new(outerThumbCenter.x,outerThumbCenter.y), thumbstickOuter)
end
-- now just translate outer thumbstick to make sure it stays nears inner thumbstick local outerToInnerVectorCurrent = Vector2.new(
thumbstickOuter.Position = UDim2.new(0,thumbstickOuter.Position.X.Offset+movementVector.x,0,thumbstickOuter.Position.Y.Offset+movementVector.y) thumbstickInnerCenter.x - thumbstickOuterCenter.x,
end thumbstickInnerCenter.y - thumbstickOuterCenter.y
)
local outerToInnerVectorCurrentUnit = outerToInnerVectorCurrent.unit
local movementVector =
Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y)
thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation,thumbstickFrame) -- First, find the angle between the new thumbstick movement vector,
-- and the vector between thumbstick inner and thumbstick outer.
-- We will use this to pivot thumbstick outer around thumbstick inner, gives a nice joystick feel
local crossOuterToInnerWithMovement = (outerToInnerVectorCurrentUnit.x * movementVectorUnit.y)
- (outerToInnerVectorCurrentUnit.y * movementVectorUnit.x)
local angle =
math.atan2(crossOuterToInnerWithMovement, dotProduct(outerToInnerVectorCurrentUnit, movementVectorUnit))
local anglePercent = angle * math.min(movementVector.magnitude / outerToInnerVectorCurrent.magnitude, 1.0)
-- a bit of error checking to make sure thumbsticks stay close to eachother -- If angle is significant, rotate about the inner thumbsticks current center
thumbstickFramePosition = Vector2.new(thumbstickFrame.Position.X.Offset,thumbstickFrame.Position.Y.Offset) if math.abs(anglePercent) > 0.00001 then
thumbstickOuterPosition = Vector2.new(thumbstickOuter.Position.X.Offset,thumbstickOuter.Position.Y.Offset) local outerThumbCenter =
if DistanceBetweenTwoPoints(thumbstickFramePosition, thumbstickOuterPosition) > thumbstickSize/2 then rotatePointAboutLocation(thumbstickOuterCenter, thumbstickInnerCenter, anglePercent)
local vectorWithLength = (thumbstickOuterPosition - thumbstickFramePosition).unit * thumbstickSize/2 thumbstickOuter.Position =
thumbstickOuter.Position = UDim2.new(0,thumbstickFramePosition.x + vectorWithLength.x,0,thumbstickFramePosition.y + vectorWithLength.y) transformFromCenterToTopLeft(Vector2.new(outerThumbCenter.x, outerThumbCenter.y), thumbstickOuter)
end end
return Vector2.new(thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset) -- now just translate outer thumbstick to make sure it stays nears inner thumbstick
thumbstickOuter.Position = UDim2.new(
0,
thumbstickOuter.Position.X.Offset + movementVector.x,
0,
thumbstickOuter.Position.Y.Offset + movementVector.y
)
end
thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation, thumbstickFrame)
-- a bit of error checking to make sure thumbsticks stay close to eachother
thumbstickFramePosition = Vector2.new(thumbstickFrame.Position.X.Offset, thumbstickFrame.Position.Y.Offset)
thumbstickOuterPosition = Vector2.new(thumbstickOuter.Position.X.Offset, thumbstickOuter.Position.Y.Offset)
if DistanceBetweenTwoPoints(thumbstickFramePosition, thumbstickOuterPosition) > thumbstickSize / 2 then
local vectorWithLength = (thumbstickOuterPosition - thumbstickFramePosition).unit * thumbstickSize / 2
thumbstickOuter.Position = UDim2.new(
0,
thumbstickFramePosition.x + vectorWithLength.x,
0,
thumbstickFramePosition.y + vectorWithLength.y
)
end
return Vector2.new(
thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,
thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset
)
end end
function movementOutsideDeadZone(movementVector) function movementOutsideDeadZone(movementVector)
return ( (math.abs(movementVector.x) > ThumbstickDeadZone) or (math.abs(movementVector.y) > ThumbstickDeadZone) ) return ((math.abs(movementVector.x) > ThumbstickDeadZone) or (math.abs(movementVector.y) > ThumbstickDeadZone))
end end
function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThumbstick) function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThumbstick)
local thumbstickFrame = Instance.new("Frame") local thumbstickFrame = Instance.new "Frame"
thumbstickFrame.Name = "ThumbstickFrame" thumbstickFrame.Name = "ThumbstickFrame"
thumbstickFrame.Active = true thumbstickFrame.Active = true
thumbstickFrame.Size = UDim2.new(0,thumbstickSize,0,thumbstickSize) thumbstickFrame.Size = UDim2.new(0, thumbstickSize, 0, thumbstickSize)
thumbstickFrame.Position = defaultThumbstickPos thumbstickFrame.Position = defaultThumbstickPos
thumbstickFrame.BackgroundTransparency = 1 thumbstickFrame.BackgroundTransparency = 1
local outerThumbstick = Instance.new("ImageLabel") local outerThumbstick = Instance.new "ImageLabel"
outerThumbstick.Name = "OuterThumbstick" outerThumbstick.Name = "OuterThumbstick"
outerThumbstick.Image = touchControlsSheet outerThumbstick.Image = touchControlsSheet
outerThumbstick.ImageRectOffset = Vector2.new(0,0) outerThumbstick.ImageRectOffset = Vector2.new(0, 0)
outerThumbstick.ImageRectSize = Vector2.new(220,220) outerThumbstick.ImageRectSize = Vector2.new(220, 220)
outerThumbstick.BackgroundTransparency = 1 outerThumbstick.BackgroundTransparency = 1
outerThumbstick.Size = UDim2.new(0,thumbstickSize,0,thumbstickSize) outerThumbstick.Size = UDim2.new(0, thumbstickSize, 0, thumbstickSize)
outerThumbstick.Position = defaultThumbstickPos outerThumbstick.Position = defaultThumbstickPos
outerThumbstick.Parent = Game.CoreGui.RobloxGui outerThumbstick.Parent = Game.CoreGui.RobloxGui
local innerThumbstick = Instance.new("ImageLabel") local innerThumbstick = Instance.new "ImageLabel"
innerThumbstick.Name = "InnerThumbstick" innerThumbstick.Name = "InnerThumbstick"
innerThumbstick.Image = touchControlsSheet innerThumbstick.Image = touchControlsSheet
innerThumbstick.ImageRectOffset = Vector2.new(220,0) innerThumbstick.ImageRectOffset = Vector2.new(220, 0)
innerThumbstick.ImageRectSize = Vector2.new(111,111) innerThumbstick.ImageRectSize = Vector2.new(111, 111)
innerThumbstick.BackgroundTransparency = 1 innerThumbstick.BackgroundTransparency = 1
innerThumbstick.Size = UDim2.new(0,thumbstickSize/2,0,thumbstickSize/2) innerThumbstick.Size = UDim2.new(0, thumbstickSize / 2, 0, thumbstickSize / 2)
innerThumbstick.Position = UDim2.new(0, thumbstickFrame.Size.X.Offset/2 - thumbstickSize/4, 0, thumbstickFrame.Size.Y.Offset/2 - thumbstickSize/4) innerThumbstick.Position = UDim2.new(
0,
thumbstickFrame.Size.X.Offset / 2 - thumbstickSize / 4,
0,
thumbstickFrame.Size.Y.Offset / 2 - thumbstickSize / 4
)
innerThumbstick.Parent = thumbstickFrame innerThumbstick.Parent = thumbstickFrame
innerThumbstick.ZIndex = 2 innerThumbstick.ZIndex = 2
@ -203,35 +250,51 @@ function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThu
local userInputSeviceTouchEndedCon = nil local userInputSeviceTouchEndedCon = nil
local startInputTracking = function(inputObject) local startInputTracking = function(inputObject)
if thumbstickTouch then return end if thumbstickTouch then
if inputObject == cameraTouch then return end return
if inputObject == currentJumpTouch then return end end
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end if inputObject == cameraTouch then
return
end
if inputObject == currentJumpTouch then
return
end
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
return
end
thumbstickTouch = inputObject thumbstickTouch = inputObject
table.insert(thumbstickTouches,thumbstickTouch) table.insert(thumbstickTouches, thumbstickTouch)
thumbstickFrame.Position = transformFromCenterToTopLeft(thumbstickTouch.Position,thumbstickFrame) thumbstickFrame.Position = transformFromCenterToTopLeft(thumbstickTouch.Position, thumbstickFrame)
outerThumbstick.Position = thumbstickFrame.Position outerThumbstick.Position = thumbstickFrame.Position
userInputServiceTouchMovedCon = userInputService.TouchMoved:connect(function(movedInput) userInputServiceTouchMovedCon = userInputService.TouchMoved:connect(function(movedInput)
if movedInput == thumbstickTouch then if movedInput == thumbstickTouch then
local movementVector = nil local movementVector = nil
if stationaryThumbstick then if stationaryThumbstick then
movementVector = stationaryThumbstickTouchMove(thumbstickFrame,outerThumbstick,Vector2.new(movedInput.Position.x,movedInput.Position.y)) movementVector = stationaryThumbstickTouchMove(
thumbstickFrame,
outerThumbstick,
Vector2.new(movedInput.Position.x, movedInput.Position.y)
)
else else
movementVector = followThumbstickTouchMove(thumbstickFrame,outerThumbstick,Vector2.new(movedInput.Position.x,movedInput.Position.y)) movementVector = followThumbstickTouchMove(
thumbstickFrame,
outerThumbstick,
Vector2.new(movedInput.Position.x, movedInput.Position.y)
)
end end
if updateFunction then if updateFunction then
updateFunction(movementVector,outerThumbstick.Size.X.Offset/2) updateFunction(movementVector, outerThumbstick.Size.X.Offset / 2)
end end
end end
end) end)
userInputSeviceTouchEndedCon = userInputService.TouchEnded:connect(function(endedInput) userInputSeviceTouchEndedCon = userInputService.TouchEnded:connect(function(endedInput)
if endedInput == thumbstickTouch then if endedInput == thumbstickTouch then
if updateFunction then if updateFunction then
updateFunction(Vector2.new(0,0),1) updateFunction(Vector2.new(0, 0), 1)
end end
userInputSeviceTouchEndedCon:disconnect() userInputSeviceTouchEndedCon:disconnect()
@ -242,7 +305,7 @@ function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThu
for i, object in pairs(thumbstickTouches) do for i, object in pairs(thumbstickTouches) do
if object == thumbstickTouch then if object == thumbstickTouch then
table.remove(thumbstickTouches,i) table.remove(thumbstickTouches, i)
break break
end end
end end
@ -262,31 +325,31 @@ function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThu
return thumbstickFrame return thumbstickFrame
end end
function setupCharacterMovement( parentFrame ) function setupCharacterMovement(parentFrame)
local lastMovementVector, lastMaxMovement = nil local lastMovementVector, lastMaxMovement = nil
local moveCharacterFunc = localPlayer.MoveCharacter local moveCharacterFunc = localPlayer.MoveCharacter
local moveCharacterFunction = function ( movementVector, maxMovement ) local moveCharacterFunction = function(movementVector, maxMovement)
if localPlayer then if localPlayer then
if movementOutsideDeadZone(movementVector) then if movementOutsideDeadZone(movementVector) then
lastMovementVector = movementVector lastMovementVector = movementVector
lastMaxMovement = maxMovement lastMaxMovement = maxMovement
-- sometimes rounding error will not allow us to go max speed at some -- sometimes rounding error will not allow us to go max speed at some
-- thumbstick angles, fix this with a bit of fudging near 100% throttle -- thumbstick angles, fix this with a bit of fudging near 100% throttle
if movementVector.magnitude/maxMovement > ThumbstickMaxPercentGive then if movementVector.magnitude / maxMovement > ThumbstickMaxPercentGive then
maxMovement = movementVector.magnitude - 1 maxMovement = movementVector.magnitude - 1
end end
moveCharacterFunc(localPlayer, movementVector, maxMovement) moveCharacterFunc(localPlayer, movementVector, maxMovement)
else else
lastMovementVector = Vector2.new(0,0) lastMovementVector = Vector2.new(0, 0)
lastMaxMovement = 1 lastMaxMovement = 1
moveCharacterFunc(localPlayer, lastMovementVector, lastMaxMovement) moveCharacterFunc(localPlayer, lastMovementVector, lastMaxMovement)
end end
end end
end end
local thumbstickPos = UDim2.new(0,thumbstickSize/2,1,-thumbstickSize*1.75) local thumbstickPos = UDim2.new(0, thumbstickSize / 2, 1, -thumbstickSize * 1.75)
if isSmallScreenDevice() then if isSmallScreenDevice() then
thumbstickPos = UDim2.new(0,(thumbstickSize/2) - 10,1,-thumbstickSize - 20) thumbstickPos = UDim2.new(0, (thumbstickSize / 2) - 10, 1, -thumbstickSize - 20)
end end
local characterThumbstick = constructThumbstick(thumbstickPos, moveCharacterFunction, false) local characterThumbstick = constructThumbstick(thumbstickPos, moveCharacterFunction, false)
characterThumbstick.Name = "CharacterThumbstick" characterThumbstick.Name = "CharacterThumbstick"
@ -300,36 +363,41 @@ function setupCharacterMovement( parentFrame )
return refreshCharacterMovement return refreshCharacterMovement
end end
function setupJumpButton(parentFrame)
function setupJumpButton( parentFrame ) local jumpButton = Instance.new "ImageButton"
local jumpButton = Instance.new("ImageButton")
jumpButton.Name = "JumpButton" jumpButton.Name = "JumpButton"
jumpButton.BackgroundTransparency = 1 jumpButton.BackgroundTransparency = 1
jumpButton.Image = touchControlsSheet jumpButton.Image = touchControlsSheet
jumpButton.ImageRectOffset = Vector2.new(176,222) jumpButton.ImageRectOffset = Vector2.new(176, 222)
jumpButton.ImageRectSize = Vector2.new(174,174) jumpButton.ImageRectSize = Vector2.new(174, 174)
jumpButton.Size = UDim2.new(0,jumpButtonSize,0,jumpButtonSize) jumpButton.Size = UDim2.new(0, jumpButtonSize, 0, jumpButtonSize)
if isSmallScreenDevice() then if isSmallScreenDevice() then
jumpButton.Position = UDim2.new(1, -(jumpButtonSize*2.25), 1, -jumpButtonSize - 20) jumpButton.Position = UDim2.new(1, -(jumpButtonSize * 2.25), 1, -jumpButtonSize - 20)
else else
jumpButton.Position = UDim2.new(1, -(jumpButtonSize*2.75), 1, -jumpButtonSize - 120) jumpButton.Position = UDim2.new(1, -(jumpButtonSize * 2.75), 1, -jumpButtonSize - 120)
end end
local playerJumpFunc = localPlayer.JumpCharacter local playerJumpFunc = localPlayer.JumpCharacter
local doJumpLoop = function () local doJumpLoop = function()
while currentJumpTouch do while currentJumpTouch do
if localPlayer then if localPlayer then
playerJumpFunc(localPlayer) playerJumpFunc(localPlayer)
end end
wait(1/60) wait(1 / 60)
end end
end end
jumpButton.InputBegan:connect(function(inputObject) jumpButton.InputBegan:connect(function(inputObject)
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end if inputObject.UserInputType ~= Enum.UserInputType.Touch then
if currentJumpTouch then return end return
if inputObject == cameraTouch then return end end
if currentJumpTouch then
return
end
if inputObject == cameraTouch then
return
end
for i, touch in pairs(oldJumpTouches) do for i, touch in pairs(oldJumpTouches) do
if touch == inputObject then if touch == inputObject then
return return
@ -337,25 +405,27 @@ function setupJumpButton( parentFrame )
end end
currentJumpTouch = inputObject currentJumpTouch = inputObject
jumpButton.ImageRectOffset = Vector2.new(0,222) jumpButton.ImageRectOffset = Vector2.new(0, 222)
jumpButton.ImageRectSize = Vector2.new(174,174) jumpButton.ImageRectSize = Vector2.new(174, 174)
doJumpLoop() doJumpLoop()
end) end)
jumpButton.InputEnded:connect(function (inputObject) jumpButton.InputEnded:connect(function(inputObject)
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end if inputObject.UserInputType ~= Enum.UserInputType.Touch then
return
jumpButton.ImageRectOffset = Vector2.new(176,222) end
jumpButton.ImageRectSize = Vector2.new(174,174)
jumpButton.ImageRectOffset = Vector2.new(176, 222)
jumpButton.ImageRectSize = Vector2.new(174, 174)
if inputObject == currentJumpTouch then if inputObject == currentJumpTouch then
table.insert(oldJumpTouches,currentJumpTouch) table.insert(oldJumpTouches, currentJumpTouch)
currentJumpTouch = nil currentJumpTouch = nil
end end
end) end)
userInputService.InputEnded:connect(function ( globalInputObject ) userInputService.InputEnded:connect(function(globalInputObject)
for i, touch in pairs(oldJumpTouches) do for i, touch in pairs(oldJumpTouches) do
if touch == globalInputObject then if touch == globalInputObject then
table.remove(oldJumpTouches,i) table.remove(oldJumpTouches, i)
break break
end end
end end
@ -370,8 +440,10 @@ function setupJumpButton( parentFrame )
jumpButton.Parent = parentFrame jumpButton.Parent = parentFrame
end end
function isTouchUsedByJumpButton( touch ) function isTouchUsedByJumpButton(touch)
if touch == currentJumpTouch then return true end if touch == currentJumpTouch then
return true
end
for i, touchToCompare in pairs(oldJumpTouches) do for i, touchToCompare in pairs(oldJumpTouches) do
if touch == touchToCompare then if touch == touchToCompare then
return true return true
@ -409,28 +481,30 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
lastPos = nil lastPos = nil
end end
local resetPinchState = function () local resetPinchState = function()
pinchTouches = {} pinchTouches = {}
lastPinchScale = nil lastPinchScale = nil
shouldPinch = false shouldPinch = false
pinchFrame:Destroy() pinchFrame:Destroy()
pinchFrame = nil pinchFrame = nil
end end
local startPinch = function(firstTouch, secondTouch) local startPinch = function(firstTouch, secondTouch)
-- track pinching in new frame -- track pinching in new frame
if pinchFrame then pinchFrame:Destroy() end -- make sure we didn't track in any mud if pinchFrame then
pinchFrame = Instance.new("Frame") pinchFrame:Destroy()
pinchFrame.Name = "PinchFrame" end -- make sure we didn't track in any mud
pinchFrame.BackgroundTransparency = 1 pinchFrame = Instance.new "Frame"
pinchFrame.Parent = parentFrame pinchFrame.Name = "PinchFrame"
pinchFrame.Size = UDim2.new(1,0,1,0) pinchFrame.BackgroundTransparency = 1
pinchFrame.Parent = parentFrame
pinchFrame.Size = UDim2.new(1, 0, 1, 0)
pinchFrame.InputChanged:connect(function(inputObject) pinchFrame.InputChanged:connect(function(inputObject)
if not shouldPinch then if not shouldPinch then
resetPinchState() resetPinchState()
return return
end end
resetCameraRotateState() resetCameraRotateState()
if lastPinchScale == nil then -- first pinch move, just set up scale if lastPinchScale == nil then -- first pinch move, just set up scale
@ -458,34 +532,38 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
lastPinchScale = newPinchDistance lastPinchScale = newPinchDistance
end end
end end
end) end)
pinchFrame.InputEnded:connect(function(inputObject) -- pinch is over, destroy all pinchFrame.InputEnded:connect(function(inputObject) -- pinch is over, destroy all
if inputObject == firstTouch or inputObject == secondTouch then if inputObject == firstTouch or inputObject == secondTouch then
resetPinchState() resetPinchState()
end end
end) end)
end end
local pinchGestureReceivedTouch = function(inputObject) local pinchGestureReceivedTouch = function(inputObject)
if #pinchTouches < 1 then if #pinchTouches < 1 then
table.insert(pinchTouches,inputObject) table.insert(pinchTouches, inputObject)
pinchTime = tick() pinchTime = tick()
shouldPinch = false shouldPinch = false
elseif #pinchTouches == 1 then elseif #pinchTouches == 1 then
shouldPinch = ( (tick() - pinchTime) <= PinchZoomDelay ) shouldPinch = ((tick() - pinchTime) <= PinchZoomDelay)
if shouldPinch then if shouldPinch then
table.insert(pinchTouches,inputObject) table.insert(pinchTouches, inputObject)
startPinch(pinchTouches[1], pinchTouches[2]) startPinch(pinchTouches[1], pinchTouches[2])
else -- shouldn't ever get here, but just in case else -- shouldn't ever get here, but just in case
pinchTouches = {} pinchTouches = {}
end end
end end
end end
parentFrame.InputBegan:connect(function (inputObject) parentFrame.InputBegan:connect(function(inputObject)
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end if inputObject.UserInputType ~= Enum.UserInputType.Touch then
if isTouchUsedByJumpButton(inputObject) then return end return
end
if isTouchUsedByJumpButton(inputObject) then
return
end
local usedByThumbstick = isTouchUsedByThumbstick(inputObject) local usedByThumbstick = isTouchUsedByThumbstick(inputObject)
if not usedByThumbstick then if not usedByThumbstick then
@ -494,15 +572,19 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
if cameraTouch == nil and not usedByThumbstick then if cameraTouch == nil and not usedByThumbstick then
cameraTouch = inputObject cameraTouch = inputObject
lastPos = Vector2.new(cameraTouch.Position.x,cameraTouch.Position.y) lastPos = Vector2.new(cameraTouch.Position.x, cameraTouch.Position.y)
lastTick = tick() lastTick = tick()
end end
end) end)
userInputService.InputChanged:connect(function (inputObject) userInputService.InputChanged:connect(function(inputObject)
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end if inputObject.UserInputType ~= Enum.UserInputType.Touch then
if cameraTouch ~= inputObject then return end return
end
if cameraTouch ~= inputObject then
return
end
local newPos = Vector2.new(cameraTouch.Position.x,cameraTouch.Position.y) local newPos = Vector2.new(cameraTouch.Position.x, cameraTouch.Position.y)
local touchDiff = (lastPos - newPos) * CameraRotateSensitivity local touchDiff = (lastPos - newPos) * CameraRotateSensitivity
-- first time rotating outside deadzone, just setup for next changed event -- first time rotating outside deadzone, just setup for next changed event
@ -518,23 +600,23 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
lastPos = newPos lastPos = newPos
end end
end) end)
userInputService.InputEnded:connect(function (inputObject) userInputService.InputEnded:connect(function(inputObject)
if cameraTouch == inputObject or cameraTouch == nil then if cameraTouch == inputObject or cameraTouch == nil then
resetCameraRotateState() resetCameraRotateState()
end end
for i, touch in pairs(pinchTouches) do for i, touch in pairs(pinchTouches) do
if touch == inputObject then if touch == inputObject then
table.remove(pinchTouches,i) table.remove(pinchTouches, i)
end end
end end
end) end)
end end
function setupTouchControls() function setupTouchControls()
local touchControlFrame = Instance.new("Frame") local touchControlFrame = Instance.new "Frame"
touchControlFrame.Name = "TouchControlFrame" touchControlFrame.Name = "TouchControlFrame"
touchControlFrame.Size = UDim2.new(1,0,1,0) touchControlFrame.Size = UDim2.new(1, 0, 1, 0)
touchControlFrame.BackgroundTransparency = 1 touchControlFrame.BackgroundTransparency = 1
touchControlFrame.Parent = Game.CoreGui.RobloxGui touchControlFrame.Parent = Game.CoreGui.RobloxGui
@ -543,7 +625,9 @@ function setupTouchControls()
setupCameraControl(touchControlFrame, refreshCharacterMoveFunc) setupCameraControl(touchControlFrame, refreshCharacterMoveFunc)
userInputService.ProcessedEvent:connect(function(inputObject, processed) userInputService.ProcessedEvent:connect(function(inputObject, processed)
if not processed then return end if not processed then
return
end
-- kill camera pan if the touch is used by some user controls -- kill camera pan if the touch is used by some user controls
if inputObject == cameraTouch and inputObject.UserInputState == Enum.UserInputState.Begin then if inputObject == cameraTouch and inputObject.UserInputState == Enum.UserInputState.Begin then
@ -552,7 +636,6 @@ function setupTouchControls()
end) end)
end end
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
-- Start of Script -- Start of Script
@ -561,4 +644,4 @@ if true then --userInputService:IsLuaTouchControls() then
setupTouchControls() setupTouchControls()
else else
script:Destroy() script:Destroy()
end end

File diff suppressed because it is too large Load Diff

View File

@ -1,28 +1,28 @@
local controlFrame = script.Parent:FindFirstChild("ControlFrame") local controlFrame = script.Parent:FindFirstChild "ControlFrame"
if not controlFrame then return end if not controlFrame then
return
end
local topLeftControl = controlFrame:FindFirstChild("TopLeftControl") local bottomLeftControl = controlFrame:FindFirstChild "BottomLeftControl"
local bottomLeftControl = controlFrame:FindFirstChild("BottomLeftControl") local bottomRightControl = controlFrame:FindFirstChild "BottomRightControl"
local bottomRightControl = controlFrame:FindFirstChild("BottomRightControl")
local frameTip = Instance.new "TextLabel"
local frameTip = Instance.new("TextLabel")
frameTip.Name = "ToolTip" frameTip.Name = "ToolTip"
frameTip.Text = "" frameTip.Text = ""
frameTip.Font = Enum.Font.ArialBold frameTip.Font = Enum.Font.ArialBold
frameTip.FontSize = Enum.FontSize.Size12 frameTip.FontSize = Enum.FontSize.Size12
frameTip.TextColor3 = Color3.new(1,1,1) frameTip.TextColor3 = Color3.new(1, 1, 1)
frameTip.BorderSizePixel = 0 frameTip.BorderSizePixel = 0
frameTip.ZIndex = 10 frameTip.ZIndex = 10
frameTip.Size = UDim2.new(2,0,1,0) frameTip.Size = UDim2.new(2, 0, 1, 0)
frameTip.Position = UDim2.new(1,0,0,0) frameTip.Position = UDim2.new(1, 0, 0, 0)
frameTip.BackgroundColor3 = Color3.new(0,0,0) frameTip.BackgroundColor3 = Color3.new(0, 0, 0)
frameTip.BackgroundTransparency = 1 frameTip.BackgroundTransparency = 1
frameTip.TextTransparency = 1 frameTip.TextTransparency = 1
frameTip.TextWrap = true frameTip.TextWrap = true
local inside = Instance.new("BoolValue") local inside = Instance.new "BoolValue"
inside.Name = "inside" inside.Name = "inside"
inside.Value = false inside.Value = false
inside.Parent = frameTip inside.Parent = frameTip
@ -30,7 +30,7 @@ inside.Parent = frameTip
function setUpListeners(frameToListen) function setUpListeners(frameToListen)
local fadeSpeed = 0.1 local fadeSpeed = 0.1
frameToListen.Parent.MouseEnter:connect(function() frameToListen.Parent.MouseEnter:connect(function()
if frameToListen:FindFirstChild("inside") then if frameToListen:FindFirstChild "inside" then
frameToListen.inside.Value = true frameToListen.inside.Value = true
wait(1.2) wait(1.2)
if frameToListen.inside.Value then if frameToListen.inside.Value then
@ -47,22 +47,26 @@ function setUpListeners(frameToListen)
killFrame.BackgroundTransparency = 1 killFrame.BackgroundTransparency = 1
killFrame.TextTransparency = 1 killFrame.TextTransparency = 1
end end
frameToListen.Parent.MouseLeave:connect(function() killTip(frameToListen) end) frameToListen.Parent.MouseLeave:connect(function()
frameToListen.Parent.MouseButton1Click:connect(function() killTip(frameToListen) end) killTip(frameToListen)
end)
frameToListen.Parent.MouseButton1Click:connect(function()
killTip(frameToListen)
end)
end end
function createSettingsButtonTip(parent) function createSettingsButtonTip(parent)
if parent == nil then if parent == nil then
parent = bottomLeftControl:FindFirstChild("SettingsButton") parent = bottomLeftControl:FindFirstChild "SettingsButton"
end end
local toolTip = frameTip:clone() local toolTip = frameTip:clone()
toolTip.RobloxLocked = true toolTip.RobloxLocked = true
toolTip.Text = "Settings/Leave Game" toolTip.Text = "Settings/Leave Game"
toolTip.Position = UDim2.new(0,0,0,-18) toolTip.Position = UDim2.new(0, 0, 0, -18)
toolTip.Size = UDim2.new(0,120,0,20) toolTip.Size = UDim2.new(0, 120, 0, 20)
toolTip.Parent = parent toolTip.Parent = parent
setUpListeners(toolTip) setUpListeners(toolTip)
end end
wait(5) -- make sure we are loaded in, won't need tool tips for first 5 seconds anyway wait(5) -- make sure we are loaded in, won't need tool tips for first 5 seconds anyway
@ -70,18 +74,16 @@ wait(5) -- make sure we are loaded in, won't need tool tips for first 5 seconds
---------------- set up Bottom Left Tool Tips ------------------------- ---------------- set up Bottom Left Tool Tips -------------------------
local bottomLeftChildren = bottomLeftControl:GetChildren() local bottomLeftChildren = bottomLeftControl:GetChildren()
local hasSettingsTip = false
for i = 1, #bottomLeftChildren do for i = 1, #bottomLeftChildren do
if bottomLeftChildren[i].Name == "Exit" then if bottomLeftChildren[i].Name == "Exit" then
local exitTip = frameTip:clone() local exitTip = frameTip:clone()
exitTip.RobloxLocked = true exitTip.RobloxLocked = true
exitTip.Text = "Leave Place" exitTip.Text = "Leave Place"
exitTip.Position = UDim2.new(0,0,-1,0) exitTip.Position = UDim2.new(0, 0, -1, 0)
exitTip.Size = UDim2.new(1,0,1,0) exitTip.Size = UDim2.new(1, 0, 1, 0)
exitTip.Parent = bottomLeftChildren[i] exitTip.Parent = bottomLeftChildren[i]
setUpListeners(exitTip) setUpListeners(exitTip)
elseif bottomLeftChildren[i].Name == "SettingsButton" then elseif bottomLeftChildren[i].Name == "SettingsButton" then
hasSettingsTip = true hasSettingsTip = true
createSettingsButtonTip(bottomLeftChildren[i]) createSettingsButtonTip(bottomLeftChildren[i])
@ -93,16 +95,16 @@ end
local bottomRightChildren = bottomRightControl:GetChildren() local bottomRightChildren = bottomRightControl:GetChildren()
for i = 1, #bottomRightChildren do for i = 1, #bottomRightChildren do
if bottomRightChildren[i].Name:find("Camera") ~= nil then if bottomRightChildren[i].Name:find "Camera" ~= nil then
local cameraTip = frameTip:clone() local cameraTip = frameTip:clone()
cameraTip.RobloxLocked = true cameraTip.RobloxLocked = true
cameraTip.Text = "Camera View" cameraTip.Text = "Camera View"
if bottomRightChildren[i].Name:find("Zoom") then if bottomRightChildren[i].Name:find "Zoom" then
cameraTip.Position = UDim2.new(-1,0,-1.5) cameraTip.Position = UDim2.new(-1, 0, -1.5)
else else
cameraTip.Position = UDim2.new(0,0,-1.5,0) cameraTip.Position = UDim2.new(0, 0, -1.5, 0)
end end
cameraTip.Size = UDim2.new(2,0,1.25,0) cameraTip.Size = UDim2.new(2, 0, 1.25, 0)
cameraTip.Parent = bottomRightChildren[i] cameraTip.Parent = bottomRightChildren[i]
setUpListeners(cameraTip) setUpListeners(cameraTip)
end end

View File

@ -1,13 +1,14 @@
-- Creates all neccessary scripts for the gui on initial load, everything except build tools -- Creates all neccessary scripts for the gui on initial load, everything except build tools
-- Created by Ben T. 10/29/10 -- Created by Ben T. 10/29/10
-- Please note that these are loaded in a specific order to diminish errors/perceived load time by user -- Please note that these are loaded in a specific order to diminish errors/perceived load time by user
local scriptContext = game:GetService("ScriptContext") local scriptContext = game:GetService "ScriptContext"
local touchEnabled = false local touchEnabled = false
pcall(function() touchEnabled = game:GetService("UserInputService").TouchEnabled end) pcall(function()
touchEnabled = game:GetService("UserInputService").TouchEnabled
end)
-- library registration -- library registration
scriptContext:AddCoreScript(60595695, scriptContext,"/Libraries/LibraryRegistration/LibraryRegistration") scriptContext:AddCoreScript(60595695, scriptContext, "/Libraries/LibraryRegistration/LibraryRegistration")
local function waitForChild(instance, name) local function waitForChild(instance, name)
while not instance:FindFirstChild(name) do while not instance:FindFirstChild(name) do
@ -21,90 +22,87 @@ local function waitForProperty(instance, property)
end end
-- Responsible for tracking logging items -- Responsible for tracking logging items
local scriptContext = game:GetService("ScriptContext") local scriptContext = game:GetService "ScriptContext"
scriptContext:AddCoreScript(59002209, scriptContext, "CoreScripts/Sections") scriptContext:AddCoreScript(59002209, scriptContext, "CoreScripts/Sections")
waitForChild(game:GetService("CoreGui"),"RobloxGui") waitForChild(game:GetService "CoreGui", "RobloxGui")
local screenGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") local screenGui = game:GetService("CoreGui"):FindFirstChild "RobloxGui"
if not touchEnabled then if not touchEnabled then
-- ToolTipper (creates tool tips for gui) -- ToolTipper (creates tool tips for gui)
scriptContext:AddCoreScript(36868950,screenGui,"CoreScripts/ToolTip") scriptContext:AddCoreScript(36868950, screenGui, "CoreScripts/ToolTip")
-- SettingsScript -- SettingsScript
scriptContext:AddCoreScript(46295863,screenGui,"CoreScripts/Settings") scriptContext:AddCoreScript(46295863, screenGui, "CoreScripts/Settings")
else else
scriptContext:AddCoreScript(153556783,screenGui,"CoreScripts/TouchControls") scriptContext:AddCoreScript(153556783, screenGui, "CoreScripts/TouchControls")
end end
-- MainBotChatScript -- MainBotChatScript
scriptContext:AddCoreScript(39250920,screenGui,"CoreScripts/MainBotChatScript") scriptContext:AddCoreScript(39250920, screenGui, "CoreScripts/MainBotChatScript")
-- Popup Script -- Popup Script
scriptContext:AddCoreScript(48488451,screenGui,"CoreScripts/PopupScript") scriptContext:AddCoreScript(48488451, screenGui, "CoreScripts/PopupScript")
-- Friend Notification Script (probably can use this script to expand out to other notifications) -- Friend Notification Script (probably can use this script to expand out to other notifications)
scriptContext:AddCoreScript(48488398,screenGui,"CoreScripts/NotificationScript") scriptContext:AddCoreScript(48488398, screenGui, "CoreScripts/NotificationScript")
-- Chat script -- Chat script
scriptContext:AddCoreScript(97188756, screenGui, "CoreScripts/ChatScript") scriptContext:AddCoreScript(97188756, screenGui, "CoreScripts/ChatScript")
-- Purchase Prompt Script -- Purchase Prompt Script
scriptContext:AddCoreScript(107893730, screenGui, "CoreScripts/PurchasePromptScript") scriptContext:AddCoreScript(107893730, screenGui, "CoreScripts/PurchasePromptScript")
if not touchEnabled then if not touchEnabled or screenGui.AbsoluteSize.Y > 600 then
-- New Player List -- New Player List
scriptContext:AddCoreScript(48488235,screenGui,"CoreScripts/PlayerListScript") scriptContext:AddCoreScript(48488235, screenGui, "CoreScripts/PlayerListScript")
elseif screenGui.AbsoluteSize.Y > 600 then else
-- New Player List
scriptContext:AddCoreScript(48488235,screenGui,"CoreScripts/PlayerListScript")
else
delay(5, function() delay(5, function()
if screenGui.AbsoluteSize.Y >= 600 then if screenGui.AbsoluteSize.Y >= 600 then
-- New Player List -- New Player List
scriptContext:AddCoreScript(48488235,screenGui,"CoreScripts/PlayerListScript") scriptContext:AddCoreScript(48488235, screenGui, "CoreScripts/PlayerListScript")
end end
end) end)
end end
if game.CoreGui.Version >= 3 and game.PlaceId ~= 130815926 then --todo: remove placeid hack for halloween if game.CoreGui.Version >= 3 and game.PlaceId ~= 130815926 then --todo: remove placeid hack for halloween
-- Backpack Builder, creates most of the backpack gui -- Backpack Builder, creates most of the backpack gui
scriptContext:AddCoreScript(53878047,screenGui,"CoreScripts/BackpackScripts/BackpackBuilder") scriptContext:AddCoreScript(53878047, screenGui, "CoreScripts/BackpackScripts/BackpackBuilder")
waitForChild(screenGui,"CurrentLoadout") waitForChild(screenGui, "CurrentLoadout")
waitForChild(screenGui,"Backpack") waitForChild(screenGui, "Backpack")
local Backpack = screenGui.Backpack local Backpack = screenGui.Backpack
-- Manager handles all big backpack state changes, other scripts subscribe to this and do things accordingly -- Manager handles all big backpack state changes, other scripts subscribe to this and do things accordingly
if game.CoreGui.Version >= 7 then if game.CoreGui.Version >= 7 then
scriptContext:AddCoreScript(89449093,Backpack,"CoreScripts/BackpackScripts/BackpackManager") scriptContext:AddCoreScript(89449093, Backpack, "CoreScripts/BackpackScripts/BackpackManager")
end end
-- Backpack Gear (handles all backpack gear tab stuff) -- Backpack Gear (handles all backpack gear tab stuff)
game:GetService("ScriptContext"):AddCoreScript(89449008,Backpack,"CoreScripts/BackpackScripts/BackpackGear") game:GetService("ScriptContext"):AddCoreScript(89449008, Backpack, "CoreScripts/BackpackScripts/BackpackGear")
-- Loadout Script, used for gear hotkeys -- Loadout Script, used for gear hotkeys
scriptContext:AddCoreScript(53878057,screenGui.CurrentLoadout,"CoreScripts/BackpackScripts/LoadoutScript") scriptContext:AddCoreScript(53878057, screenGui.CurrentLoadout, "CoreScripts/BackpackScripts/LoadoutScript")
if game.CoreGui.Version >= 8 then if game.CoreGui.Version >= 8 then
-- Wardrobe script handles all character dressing operations -- Wardrobe script handles all character dressing operations
scriptContext:AddCoreScript(-1,Backpack,"CoreScripts/BackpackScripts/BackpackWardrobe") scriptContext:AddCoreScript(-1, Backpack, "CoreScripts/BackpackScripts/BackpackWardrobe")
end end
end end
local IsPersonalServer = not not game.Workspace:FindFirstChild("PSVariable") local IsPersonalServer = not not game.Workspace:FindFirstChild "PSVariable"
if IsPersonalServer then if IsPersonalServer then
game:GetService("ScriptContext"):AddCoreScript(64164692,game.Players.LocalPlayer,"BuildToolManager") game:GetService("ScriptContext"):AddCoreScript(64164692, game.Players.LocalPlayer, "BuildToolManager")
end end
game.Workspace.ChildAdded:connect(function(nchild) game.Workspace.ChildAdded:connect(function(nchild)
if nchild.Name=='PSVariable' and nchild:IsA('BoolValue') then if nchild.Name == "PSVariable" and nchild:IsA "BoolValue" then
IsPersonalServer = true IsPersonalServer = true
game:GetService("ScriptContext"):AddCoreScript(64164692,game.Players.LocalPlayer,"BuildToolManager") game:GetService("ScriptContext"):AddCoreScript(64164692, game.Players.LocalPlayer, "BuildToolManager")
end end
end) end)
if touchEnabled then -- touch devices don't use same control frame if touchEnabled then -- touch devices don't use same control frame
-- only used for touch device button generation -- only used for touch device button generation
scriptContext:AddCoreScript(152908679,screenGui,"CoreScripts/ContextActionTouch") scriptContext:AddCoreScript(152908679, screenGui, "CoreScripts/ContextActionTouch")
waitForChild(screenGui, 'ControlFrame') waitForChild(screenGui, "ControlFrame")
waitForChild(screenGui.ControlFrame, 'BottomLeftControl') waitForChild(screenGui.ControlFrame, "BottomLeftControl")
screenGui.ControlFrame.BottomLeftControl.Visible = false screenGui.ControlFrame.BottomLeftControl.Visible = false
waitForChild(screenGui.ControlFrame, 'TopLeftControl') waitForChild(screenGui.ControlFrame, "TopLeftControl")
screenGui.ControlFrame.TopLeftControl.Visible = false screenGui.ControlFrame.TopLeftControl.Visible = false
end end

View File

@ -1,52 +1,52 @@
local damageGuiWidth = 5.0 local damageGuiWidth = 5.0
local damageGuiHeight = 5.0 local damageGuiHeight = 5.0
function waitForChild(parent, childName) function waitForChild(parent, childName)
local child = parent:findFirstChild(childName) local child = parent:findFirstChild(childName)
if child then return child end if child then
while true do return child
child = parent.ChildAdded:wait() end
if child.Name==childName then return child end while true do
end child = parent.ChildAdded:wait()
if child.Name == childName then
return child
end
end
end end
-- declarations -- declarations
local Figure = script.Parent local Figure = script.Parent
local Head = waitForChild(Figure, &quot;Head&quot;) local Humanoid = waitForChild(Figure, "Humanoid")
local Humanoid = waitForChild(Figure, &quot;Humanoid&quot;) local Torso = waitForChild(Figure, "Torso")
local walkSpeed = Humanoid.WalkSpeed
local Torso = waitForChild(Figure, &quot;Torso&quot;)
local config = Figure:FindFirstChild(&quot;PlayerStats&quot;) local config = Figure:FindFirstChild "PlayerStats"
local inCharTag = Instance.new(&quot;BoolValue&quot;) local inCharTag = Instance.new "BoolValue"
inCharTag.Name = &quot;InCharTag&quot; inCharTag.Name = "InCharTag"
local hider = Instance.new(&quot;BoolValue&quot;) local hider = Instance.new "BoolValue"
hider.Name = &quot;RobloxBuildTool&quot; hider.Name = "RobloxBuildTool"
local currentChildren local currentChildren
local backpackTools local backpackTools
if config == nil then if config == nil then
config = Instance.new(&quot;Configuration&quot;) config = Instance.new "Configuration"
config.Parent = Figure config.Parent = Figure
config.Name = &quot;PlayerStats&quot; config.Name = "PlayerStats"
end end
local myHealth = config:FindFirstChild(&quot;MaxHealth&quot;) local myHealth = config:FindFirstChild "MaxHealth"
if myHealth == nil then if myHealth == nil then
myHealth = Instance.new(&quot;NumberValue&quot;) myHealth = Instance.new "NumberValue"
myHealth.Parent = config myHealth.Parent = config
myHealth.Value = 100 myHealth.Value = 100
myHealth.Name = &quot;MaxHealth&quot; myHealth.Name = "MaxHealth"
end end
Humanoid.MaxHealth = myHealth.Value Humanoid.MaxHealth = myHealth.Value
Humanoid.Health = myHealth.Value Humanoid.Health = myHealth.Value
function onMaxHealthChange() function onMaxHealthChange()
Humanoid.MaxHealth = myHealth.Value Humanoid.MaxHealth = myHealth.Value
Humanoid.Health = myHealth.Value Humanoid.Health = myHealth.Value
@ -54,52 +54,56 @@ end
myHealth.Changed:connect(onMaxHealthChange) myHealth.Changed:connect(onMaxHealthChange)
--Humanoid.MaxHealth = myHealth.Value --Humanoid.MaxHealth = myHealth.Value
--Humanoid.Health = Humanoid.MaxHealth --Humanoid.Health = Humanoid.MaxHealth
local vPlayer = game.Players:GetPlayerFromCharacter(script.Parent) local vPlayer = game.Players:GetPlayerFromCharacter(script.Parent)
local dotGui = vPlayer.PlayerGui:FindFirstChild(&quot;DamageOverTimeGui&quot;) local dotGui = vPlayer.PlayerGui:FindFirstChild "DamageOverTimeGui"
if dotGui == nil then if dotGui == nil then
dotGui = Instance.new(&quot;BillboardGui&quot;) dotGui = Instance.new "BillboardGui"
dotGui.Name = &quot;DamageOverTimeGui&quot; dotGui.Name = "DamageOverTimeGui"
dotGui.Parent = vPlayer.PlayerGui dotGui.Parent = vPlayer.PlayerGui
dotGui.Adornee = script.Parent:FindFirstChild(&quot;Head&quot;) dotGui.Adornee = script.Parent:FindFirstChild "Head"
dotGui.Active = true dotGui.Active = true
dotGui.size = UDim2.new(damageGuiWidth, 0.0, damageGuiHeight, 0.0) dotGui.size = UDim2.new(damageGuiWidth, 0, damageGuiHeight, 0.0)
dotGui.StudsOffset = Vector3.new(0.0, 2.0, 0.0) dotGui.StudsOffset = Vector3.new(0, 2.0, 0.0)
end end
print(&quot;newHealth declarations finished&quot;) print "newHealth declarations finished"
function billboardHealthChange(dmg) function billboardHealthChange(dmg)
local textLabel = Instance.new(&quot;TextLabel&quot;) local textLabel = Instance.new "TextLabel"
if dmg &gt; 0 then textLabel.Text = tostring(dmg) textLabel.TextColor3 = Color3.new(0, 1, 0) if dmg > 0 then
else textLabel.Text = tostring(dmg) textLabel.TextColor3 = Color3.new(1, 0, 1) end textLabel.Text = tostring(dmg)
textLabel.size = UDim2.new(1.0, 0.0, 1.0, 0.0) textLabel.TextColor3 = Color3.new(0, 1, 0)
textLabel.Active = true else
textLabel.FontSize = 6 textLabel.Text = tostring(dmg)
textLabel.BackgroundTransparency = 1 textLabel.TextColor3 = Color3.new(1, 0, 1)
textLabel.Parent = dotGui end
textLabel.size = UDim2.new(1, 0, 1, 0.0)
textLabel.Active = true
textLabel.FontSize = 6
textLabel.BackgroundTransparency = 1
textLabel.Parent = dotGui
for t = 1, 10 do for t = 1, 10 do
wait(.1) wait(0.1)
textLabel.TextTransparency = t/10 textLabel.TextTransparency = t / 10
textLabel.Position = UDim2.new(0, 0, 0, -t*5) textLabel.Position = UDim2.new(0, 0, 0, -t * 5)
textLabel.FontSize = 6-t*.6 textLabel.FontSize = 6 - t * 0.6
end end
textLabel:remove() textLabel:remove()
end end
function setMaxHealth() function setMaxHealth()
--print(Humanoid.Health) --print(Humanoid.Health)
if myHealth.Value &gt;=0 then if myHealth.Value >= 0 then
Humanoid.MaxHealth = myHealth.Value Humanoid.MaxHealth = myHealth.Value
print(Humanoid.MaxHealth) print(Humanoid.MaxHealth)
if Humanoid.Health &gt; Humanoid.MaxHealth then if Humanoid.Health > Humanoid.MaxHealth then
Humanoid.Health = Humanoid.MaxHealth Humanoid.Health = Humanoid.MaxHealth
end end
end end
end end
@ -107,121 +111,130 @@ myHealth.Changed:connect(setMaxHealth)
-- Visual Effects -- -- Visual Effects --
fireEffect = Instance.new(&quot;Fire&quot;) fireEffect = Instance.new "Fire"
fireEffect.Heat = 0.1 fireEffect.Heat = 0.1
fireEffect.Size = 3.0 fireEffect.Size = 3.0
fireEffect.Name = &quot;FireEffect&quot; fireEffect.Name = "FireEffect"
fireEffect.Enabled = false fireEffect.Enabled = false
-- --
-- regeneration
-- regeneration while true do
while true do local s = wait(1)
local s = wait(1) local health = Humanoid.Health
local health = Humanoid.Health if health > 0 then -- and health < Humanoid.MaxHealth then
if health &gt; 0 then -- and health &lt; Humanoid.MaxHealth then local delta = 0
local delta = 0 if config then
if config then regen = config:FindFirstChild "Regen"
regen = config:FindFirstChild(&quot;Regen&quot;) poison = config:FindFirstChild "Poison"
poison = config:FindFirstChild(&quot;Poison&quot;) ice = config:FindFirstChild "Ice"
ice = config:FindFirstChild(&quot;Ice&quot;) fire = config:FindFirstChild "Fire"
fire = config:FindFirstChild(&quot;Fire&quot;) stun = config:FindFirstChild "Stun"
stun = config:FindFirstChild(&quot;Stun&quot;) if regen then
if regen then delta = delta + regen.Value.X
delta = delta + regen.Value.X if regen.Value.Y >= 0 then
if regen.Value.Y &gt;= 0 then regen.Value = Vector3.new(regen.Value.X+regen.Value.Z, regen.Value.Y - s, regen.Value.Z) -- maybe have 3rd parameter be an increaser/decreaser? regen.Value = Vector3.new(regen.Value.X + regen.Value.Z, regen.Value.Y - s, regen.Value.Z) -- maybe have 3rd parameter be an increaser/decreaser?
elseif regen.Value.Y == -1 then regen.Value = Vector3.new(regen.Value.X+regen.Value.Z, -1, regen.Value.Z) elseif regen.Value.Y == -1 then
else regen:remove() end -- infinity is -1 regen.Value = Vector3.new(regen.Value.X + regen.Value.Z, -1, regen.Value.Z)
end else
if poison then regen:remove()
delta = delta - poison.Value.X end -- infinity is -1
if poison.Value.Y &gt;= 0 then poison.Value = Vector3.new(poison.Value.X+poison.Value.Z, poison.Value.Y - s, poison.Value.Z) end
elseif poison.Value.Y == -1 then poison.Value = Vector3.new(poison.Value.X+poison.Value.Z, -1, poison.Value.Z) if poison then
else poison:remove() end -- infinity is -1 delta = delta - poison.Value.X
end if poison.Value.Y >= 0 then
poison.Value = Vector3.new(poison.Value.X + poison.Value.Z, poison.Value.Y - s, poison.Value.Z)
if ice then elseif poison.Value.Y == -1 then
--print(&quot;IN ICE&quot;) poison.Value = Vector3.new(poison.Value.X + poison.Value.Z, -1, poison.Value.Z)
delta = delta - ice.Value.X else
if ice.Value.Y &gt;=0 then poison:remove()
ice.Value = Vector3.new(ice.Value.X, ice.Value.Y - s, ice.Value.Z) end -- infinity is -1
else
ice:remove()
end
end
if fire then
fireEffect.Enabled = true
fireEffect.Parent = Figure.Torso
delta = delta - fire.Value.X
if fire.Value.Y &gt;= 0 then
fire.Value = Vector3.new(fire.Value.X, fire.Value.Y - s, fire.Value.Z)
else
fire:remove()
fireEffect.Enabled = false
fireEffect.Parent = nil
end end
end
if stun then if ice then
if stun.Value &gt; 0 then --print("IN ICE")
Torso.Anchored = true delta = delta - ice.Value.X
currentChildren = script.Parent:GetChildren() if ice.Value.Y >= 0 then
backpackTools = game.Players:GetPlayerFromCharacter(script.Parent).Backpack:GetChildren() ice.Value = Vector3.new(ice.Value.X, ice.Value.Y - s, ice.Value.Z)
for i = 1, #currentChildren do else
if currentChildren[i].className == &quot;Tool&quot; then ice:remove()
inCharTag:Clone().Parent = currentChildren[i] end
print(backpackTools) end
table.insert(backpackTools, currentChildren[i])
if fire then
fireEffect.Enabled = true
fireEffect.Parent = Figure.Torso
delta = delta - fire.Value.X
if fire.Value.Y >= 0 then
fire.Value = Vector3.new(fire.Value.X, fire.Value.Y - s, fire.Value.Z)
else
fire:remove()
fireEffect.Enabled = false
fireEffect.Parent = nil
end
end
if stun then
if stun.Value > 0 then
Torso.Anchored = true
currentChildren = script.Parent:GetChildren()
backpackTools = game.Players:GetPlayerFromCharacter(script.Parent).Backpack:GetChildren()
for i = 1, #currentChildren do
if currentChildren[i].className == "Tool" then
inCharTag:Clone().Parent = currentChildren[i]
print(backpackTools)
table.insert(backpackTools, currentChildren[i])
end
end end
end for i = 1, #backpackTools do
for i = 1, #backpackTools do if backpackTools[i]:FindFirstChild "RobloxBuildTool" == nil then
if backpackTools[i]:FindFirstChild(&quot;RobloxBuildTool&quot;) == nil then hider:Clone().Parent = backpackTools[i]
hider:Clone().Parent = backpackTools[i] backpackTools[i].Parent = game.Lighting
backpackTools[i].Parent = game.Lighting end
end end
end wait(0.2)
wait(0.2) for i = 1, #backpackTools do
for i = 1, #backpackTools do
backpackTools[i].Parent = game.Players:GetPlayerFromCharacter(script.Parent).Backpack
end
stun.Value = stun.Value - s
else
Torso.Anchored = false
for i = 1, #backpackTools do
rbTool = backpackTools[i]:FindFirstChild(&quot;RobloxBuildTool&quot;)
if rbTool then rbTool:Remove() end
backpackTools[i].Parent = game.Lighting
end
wait(0.2)
for i = 1, #backpackTools do
wasInCharacter = backpackTools[i]:FindFirstChild(&quot;InCharTag&quot;)
if wasInChar then
wasInChar:Remove()
backpackTools[i].Parent = script.Parent
else
backpackTools[i].Parent = game.Players:GetPlayerFromCharacter(script.Parent).Backpack backpackTools[i].Parent = game.Players:GetPlayerFromCharacter(script.Parent).Backpack
end end
stun.Value = stun.Value - s
else
Torso.Anchored = false
for i = 1, #backpackTools do
rbTool = backpackTools[i]:FindFirstChild "RobloxBuildTool"
if rbTool then
rbTool:Remove()
end
backpackTools[i].Parent = game.Lighting
end
wait(0.2)
for i = 1, #backpackTools do
wasInCharacter = backpackTools[i]:FindFirstChild "InCharTag"
if wasInChar then
wasInChar:Remove()
backpackTools[i].Parent = script.Parent
else
backpackTools[i].Parent = game.Players:GetPlayerFromCharacter(script.Parent).Backpack
end
end
stun:Remove()
end end
stun:Remove()
end end
end
if delta ~= 0 then if delta ~= 0 then
newCo = coroutine.create(billboardHealthChange) newCo = coroutine.create(billboardHealthChange)
coroutine.resume(newCo, delta) coroutine.resume(newCo, delta)
end
--delta = delta * .01
end end
--delta = delta * .01 --health = health + delta * s * Humanoid.MaxHealth
end
--health = health + delta * s * Humanoid.MaxHealth health = Humanoid.Health + delta * s
if health * 1.01 < Humanoid.MaxHealth then
health = Humanoid.Health + delta * s Humanoid.Health = health
if health * 1.01 &lt; Humanoid.MaxHealth then
Humanoid.Health = health
--myHealth.Value = math.floor(Humanoid.Health) --myHealth.Value = math.floor(Humanoid.Health)
elseif delta &gt; 0 then elseif delta > 0 then
Humanoid.Health = Humanoid.MaxHealth Humanoid.Health = Humanoid.MaxHealth
--myHealth.Value = Humanoid.Health --myHealth.Value = Humanoid.Health
end
end end
end end
end

View File

@ -10,7 +10,6 @@ function waitForChild(instance, name)
end end
end end
local mainFrame local mainFrame
local choices = {} local choices = {}
local lastChoice local lastChoice
@ -19,15 +18,14 @@ local currentConversationDialog
local currentConversationPartner local currentConversationPartner
local currentAbortDialogScript local currentAbortDialogScript
local tooFarAwayMessage = "You are too far away to chat!" local tooFarAwayMessage = "You are too far away to chat!"
local tooFarAwaySize = 300 local tooFarAwaySize = 300
local characterWanderedOffMessage = "Chat ended because you walked away" local characterWanderedOffMessage = "Chat ended because you walked away"
local characterWanderedOffSize = 350 local characterWanderedOffSize = 350
local conversationTimedOut = "Chat ended because you didn't reply" local conversationTimedOut = "Chat ended because you didn't reply"
local conversationTimedOutSize = 350 local conversationTimedOutSize = 350
local player local player
local screenGui
local chatNotificationGui local chatNotificationGui
local messageDialog local messageDialog
local timeoutScript local timeoutScript
@ -36,9 +34,9 @@ local dialogMap = {}
local dialogConnections = {} local dialogConnections = {}
local gui = nil local gui = nil
waitForChild(game,"CoreGui") waitForChild(game, "CoreGui")
waitForChild(game.CoreGui,"RobloxGui") waitForChild(game.CoreGui, "RobloxGui")
if game.CoreGui.RobloxGui:FindFirstChild("ControlFrame") then if game.CoreGui.RobloxGui:FindFirstChild "ControlFrame" then
gui = game.CoreGui.RobloxGui.ControlFrame gui = game.CoreGui.RobloxGui.ControlFrame
else else
gui = game.CoreGui.RobloxGui gui = game.CoreGui.RobloxGui
@ -51,38 +49,36 @@ function currentTone()
return Enum.DialogTone.Neutral return Enum.DialogTone.Neutral
end end
end end
function createChatNotificationGui() function createChatNotificationGui()
chatNotificationGui = Instance.new("BillboardGui") chatNotificationGui = Instance.new "BillboardGui"
chatNotificationGui.Name = "ChatNotificationGui" chatNotificationGui.Name = "ChatNotificationGui"
chatNotificationGui.ExtentsOffset = Vector3.new(0,1,0) chatNotificationGui.ExtentsOffset = Vector3.new(0, 1, 0)
chatNotificationGui.Size = UDim2.new(4, 0, 5.42857122, 0) chatNotificationGui.Size = UDim2.new(4, 0, 5.42857122, 0)
chatNotificationGui.SizeOffset = Vector2.new(0,0) chatNotificationGui.SizeOffset = Vector2.new(0, 0)
chatNotificationGui.StudsOffset = Vector3.new(0.4, 4.3, 0) chatNotificationGui.StudsOffset = Vector3.new(0.4, 4.3, 0)
chatNotificationGui.Enabled = true chatNotificationGui.Enabled = true
chatNotificationGui.RobloxLocked = true chatNotificationGui.RobloxLocked = true
chatNotificationGui.Active = true chatNotificationGui.Active = true
local image = Instance.new("ImageLabel") local image = Instance.new "ImageLabel"
image.Name = "Image" image.Name = "Image"
image.Active = false image.Active = false
image.BackgroundTransparency = 1 image.BackgroundTransparency = 1
image.Position = UDim2.new(0,0,0,0) image.Position = UDim2.new(0, 0, 0, 0)
image.Size = UDim2.new(1.0,0,1.0,0) image.Size = UDim2.new(1, 0, 1, 0)
image.Image = "" image.Image = ""
image.RobloxLocked = true image.RobloxLocked = true
image.Parent = chatNotificationGui image.Parent = chatNotificationGui
local button = Instance.new("ImageButton") local button = Instance.new "ImageButton"
button.Name = "Button" button.Name = "Button"
button.AutoButtonColor = false button.AutoButtonColor = false
button.Position = UDim2.new(0.0879999995, 0, 0.0529999994, 0) button.Position = UDim2.new(0.0879999995, 0, 0.0529999994, 0)
button.Size = UDim2.new(0.829999983, 0, 0.460000008, 0) button.Size = UDim2.new(0.829999983, 0, 0.460000008, 0)
button.Image = "" button.Image = ""
button.BackgroundTransparency = 1 button.BackgroundTransparency = 1
button.RobloxLocked = true button.RobloxLocked = true
button.Parent = image button.Parent = image
end end
@ -97,7 +93,7 @@ function getChatColor(tone)
end end
function styleChoices(tone) function styleChoices(tone)
for i, obj in pairs(choices) do for _, obj in pairs(choices) do
resetColor(obj, tone) resetColor(obj, tone)
end end
resetColor(lastChoice, tone) resetColor(lastChoice, tone)
@ -114,7 +110,7 @@ function styleMainFrame(tone)
mainFrame.Style = Enum.FrameStyle.ChatRed mainFrame.Style = Enum.FrameStyle.ChatRed
mainFrame.Tail.Image = "rbxasset://textures/chatBubble_botRed_tailRight.png" mainFrame.Tail.Image = "rbxasset://textures/chatBubble_botRed_tailRight.png"
end end
styleChoices(tone) styleChoices(tone)
end end
function setChatNotificationTone(gui, purpose, tone) function setChatNotificationTone(gui, purpose, tone)
@ -135,26 +131,26 @@ function setChatNotificationTone(gui, purpose, tone)
end end
function createMessageDialog() function createMessageDialog()
messageDialog = Instance.new("Frame"); messageDialog = Instance.new "Frame"
messageDialog.Name = "DialogScriptMessage" messageDialog.Name = "DialogScriptMessage"
messageDialog.Style = Enum.FrameStyle.RobloxRound messageDialog.Style = Enum.FrameStyle.RobloxRound
messageDialog.Visible = false messageDialog.Visible = false
local text = Instance.new("TextLabel") local text = Instance.new "TextLabel"
text.Name = "Text" text.Name = "Text"
text.Position = UDim2.new(0,0,0,-1) text.Position = UDim2.new(0, 0, 0, -1)
text.Size = UDim2.new(1,0,1,0) text.Size = UDim2.new(1, 0, 1, 0)
text.FontSize = Enum.FontSize.Size14 text.FontSize = Enum.FontSize.Size14
text.BackgroundTransparency = 1 text.BackgroundTransparency = 1
text.TextColor3 = Color3.new(1,1,1) text.TextColor3 = Color3.new(1, 1, 1)
text.RobloxLocked = true text.RobloxLocked = true
text.Parent = messageDialog text.Parent = messageDialog
end end
function showMessage(msg, size) function showMessage(msg, size)
messageDialog.Text.Text = msg messageDialog.Text.Text = msg
messageDialog.Size = UDim2.new(0,size,0,40) messageDialog.Size = UDim2.new(0, size, 0, 40)
messageDialog.Position = UDim2.new(0.5, -size/2, 0.5, -40) messageDialog.Position = UDim2.new(0.5, -size / 2, 0.5, -40)
messageDialog.Visible = true messageDialog.Visible = true
wait(2) wait(2)
messageDialog.Visible = false messageDialog.Visible = false
@ -162,60 +158,60 @@ end
function variableDelay(str) function variableDelay(str)
local length = math.min(string.len(str), 100) local length = math.min(string.len(str), 100)
wait(0.75 + ((length/75) * 1.5)) wait(0.75 + ((length / 75) * 1.5))
end end
function resetColor(frame, tone) function resetColor(frame, tone)
if tone == Enum.DialogTone.Neutral then if tone == Enum.DialogTone.Neutral then
frame.BackgroundColor3 = Color3.new(0/255, 0/255, 179/255) frame.BackgroundColor3 = Color3.new(0 / 255, 0 / 255, 179 / 255)
frame.Number.TextColor3 = Color3.new(45/255, 142/255, 245/255) frame.Number.TextColor3 = Color3.new(45 / 255, 142 / 255, 245 / 255)
elseif tone == Enum.DialogTone.Friendly then elseif tone == Enum.DialogTone.Friendly then
frame.BackgroundColor3 = Color3.new(0/255, 77/255, 0/255) frame.BackgroundColor3 = Color3.new(0 / 255, 77 / 255, 0 / 255)
frame.Number.TextColor3 = Color3.new(0/255, 190/255, 0/255) frame.Number.TextColor3 = Color3.new(0 / 255, 190 / 255, 0 / 255)
elseif tone == Enum.DialogTone.Enemy then elseif tone == Enum.DialogTone.Enemy then
frame.BackgroundColor3 = Color3.new(140/255, 0/255, 0/255) frame.BackgroundColor3 = Color3.new(140 / 255, 0 / 255, 0 / 255)
frame.Number.TextColor3 = Color3.new(255/255,88/255, 79/255) frame.Number.TextColor3 = Color3.new(255 / 255, 88 / 255, 79 / 255)
end end
end end
function highlightColor(frame, tone) function highlightColor(frame, tone)
if tone == Enum.DialogTone.Neutral then if tone == Enum.DialogTone.Neutral then
frame.BackgroundColor3 = Color3.new(2/255, 108/255, 255/255) frame.BackgroundColor3 = Color3.new(2 / 255, 108 / 255, 255 / 255)
frame.Number.TextColor3 = Color3.new(1, 1, 1) frame.Number.TextColor3 = Color3.new(1, 1, 1)
elseif tone == Enum.DialogTone.Friendly then elseif tone == Enum.DialogTone.Friendly then
frame.BackgroundColor3 = Color3.new(0/255, 128/255, 0/255) frame.BackgroundColor3 = Color3.new(0 / 255, 128 / 255, 0 / 255)
frame.Number.TextColor3 = Color3.new(1, 1, 1) frame.Number.TextColor3 = Color3.new(1, 1, 1)
elseif tone == Enum.DialogTone.Enemy then elseif tone == Enum.DialogTone.Enemy then
frame.BackgroundColor3 = Color3.new(204/255, 0/255, 0/255) frame.BackgroundColor3 = Color3.new(204 / 255, 0 / 255, 0 / 255)
frame.Number.TextColor3 = Color3.new(1, 1, 1) frame.Number.TextColor3 = Color3.new(1, 1, 1)
end end
end end
function wanderDialog() function wanderDialog()
print("Wander") print "Wander"
mainFrame.Visible = false mainFrame.Visible = false
endDialog() endDialog()
showMessage(characterWanderedOffMessage, characterWanderedOffSize) showMessage(characterWanderedOffMessage, characterWanderedOffSize)
end end
function timeoutDialog() function timeoutDialog()
print("Timeout") print "Timeout"
mainFrame.Visible = false mainFrame.Visible = false
endDialog() endDialog()
showMessage(conversationTimedOut, conversationTimedOutSize) showMessage(conversationTimedOut, conversationTimedOutSize)
end end
function normalEndDialog() function normalEndDialog()
print("Done") print "Done"
endDialog() endDialog()
end end
function endDialog() function endDialog()
if currentAbortDialogScript then if currentAbortDialogScript then
currentAbortDialogScript:Remove() currentAbortDialogScript:Remove()
currentAbortDialogScript = nil currentAbortDialogScript = nil
end end
local dialog = currentConversationDialog local dialog = currentConversationDialog
currentConversationDialog = nil currentConversationDialog = nil
if dialog and dialog.InUse then if dialog and dialog.InUse then
local reenableScript = reenableDialogScript:Clone() local reenableScript = reenableDialogScript:Clone()
@ -234,11 +230,11 @@ function endDialog()
end end
function sanitizeMessage(msg) function sanitizeMessage(msg)
if string.len(msg) == 0 then if string.len(msg) == 0 then
return "..." return "..."
else else
return msg return msg
end end
end end
function selectChoice(choice) function selectChoice(choice)
@ -248,109 +244,125 @@ function selectChoice(choice)
mainFrame.Visible = false mainFrame.Visible = false
if choice == lastChoice then if choice == lastChoice then
game.Chat:Chat(game.Players.LocalPlayer.Character, "Goodbye!", getChatColor(currentTone())) game.Chat:Chat(game.Players.LocalPlayer.Character, "Goodbye!", getChatColor(currentTone()))
normalEndDialog() normalEndDialog()
else else
local dialogChoice = choiceMap[choice] local dialogChoice = choiceMap[choice]
game.Chat:Chat(game.Players.LocalPlayer.Character, sanitizeMessage(dialogChoice.UserDialog), getChatColor(currentTone())) game.Chat:Chat(
game.Players.LocalPlayer.Character,
sanitizeMessage(dialogChoice.UserDialog),
getChatColor(currentTone())
)
wait(1) wait(1)
currentConversationDialog:SignalDialogChoiceSelected(player, dialogChoice) currentConversationDialog:SignalDialogChoiceSelected(player, dialogChoice)
game.Chat:Chat(currentConversationPartner, sanitizeMessage(dialogChoice.ResponseDialog), getChatColor(currentTone())) game.Chat:Chat(
currentConversationPartner,
sanitizeMessage(dialogChoice.ResponseDialog),
getChatColor(currentTone())
)
variableDelay(dialogChoice.ResponseDialog) variableDelay(dialogChoice.ResponseDialog)
presentDialogChoices(currentConversationPartner, dialogChoice:GetChildren()) presentDialogChoices(currentConversationPartner, dialogChoice:GetChildren())
end end
end end
function newChoice(numberText) function newChoice(numberText)
local frame = Instance.new("TextButton") local frame = Instance.new "TextButton"
frame.BackgroundColor3 = Color3.new(0/255, 0/255, 179/255) frame.BackgroundColor3 = Color3.new(0 / 255, 0 / 255, 179 / 255)
frame.AutoButtonColor = false frame.AutoButtonColor = false
frame.BorderSizePixel = 0 frame.BorderSizePixel = 0
frame.Text = "" frame.Text = ""
frame.MouseEnter:connect(function() highlightColor(frame, currentTone()) end) frame.MouseEnter:connect(function()
frame.MouseLeave:connect(function() resetColor(frame, currentTone()) end) highlightColor(frame, currentTone())
frame.MouseButton1Click:connect(function() selectChoice(frame) end) end)
frame.RobloxLocked = true frame.MouseLeave:connect(function()
resetColor(frame, currentTone())
end)
frame.MouseButton1Click:connect(function()
selectChoice(frame)
end)
frame.RobloxLocked = true
local number = Instance.new("TextLabel") local number = Instance.new "TextLabel"
number.Name = "Number" number.Name = "Number"
number.TextColor3 = Color3.new(127/255, 212/255, 255/255) number.TextColor3 = Color3.new(127 / 255, 212 / 255, 255 / 255)
number.Text = numberText number.Text = numberText
number.FontSize = Enum.FontSize.Size14 number.FontSize = Enum.FontSize.Size14
number.BackgroundTransparency = 1 number.BackgroundTransparency = 1
number.Position = UDim2.new(0,4,0,2) number.Position = UDim2.new(0, 4, 0, 2)
number.Size = UDim2.new(0,20,0,24) number.Size = UDim2.new(0, 20, 0, 24)
number.TextXAlignment = Enum.TextXAlignment.Left number.TextXAlignment = Enum.TextXAlignment.Left
number.TextYAlignment = Enum.TextYAlignment.Top number.TextYAlignment = Enum.TextYAlignment.Top
number.RobloxLocked = true number.RobloxLocked = true
number.Parent = frame number.Parent = frame
local prompt = Instance.new("TextLabel") local prompt = Instance.new "TextLabel"
prompt.Name = "UserPrompt" prompt.Name = "UserPrompt"
prompt.BackgroundTransparency = 1 prompt.BackgroundTransparency = 1
prompt.TextColor3 = Color3.new(1,1,1) prompt.TextColor3 = Color3.new(1, 1, 1)
prompt.FontSize = Enum.FontSize.Size14 prompt.FontSize = Enum.FontSize.Size14
prompt.Position = UDim2.new(0,28, 0, 2) prompt.Position = UDim2.new(0, 28, 0, 2)
prompt.Size = UDim2.new(1,-32, 1, -4) prompt.Size = UDim2.new(1, -32, 1, -4)
prompt.TextXAlignment = Enum.TextXAlignment.Left prompt.TextXAlignment = Enum.TextXAlignment.Left
prompt.TextYAlignment = Enum.TextYAlignment.Top prompt.TextYAlignment = Enum.TextYAlignment.Top
prompt.TextWrap = true prompt.TextWrap = true
prompt.RobloxLocked = true prompt.RobloxLocked = true
prompt.Parent = frame prompt.Parent = frame
return frame return frame
end end
function initialize(parent) function initialize(parent)
choices[1] = newChoice("1)") choices[1] = newChoice "1)"
choices[2] = newChoice("2)") choices[2] = newChoice "2)"
choices[3] = newChoice("3)") choices[3] = newChoice "3)"
choices[4] = newChoice("4)") choices[4] = newChoice "4)"
lastChoice = newChoice("5)") lastChoice = newChoice "5)"
lastChoice.UserPrompt.Text = "Goodbye!" lastChoice.UserPrompt.Text = "Goodbye!"
lastChoice.Size = UDim2.new(1,0,0,28) lastChoice.Size = UDim2.new(1, 0, 0, 28)
mainFrame = Instance.new("Frame") mainFrame = Instance.new "Frame"
mainFrame.Name = "UserDialogArea" mainFrame.Name = "UserDialogArea"
mainFrame.Size = UDim2.new(0, 350, 0, 200) mainFrame.Size = UDim2.new(0, 350, 0, 200)
mainFrame.Style = Enum.FrameStyle.ChatBlue mainFrame.Style = Enum.FrameStyle.ChatBlue
mainFrame.Visible = false mainFrame.Visible = false
imageLabel = Instance.new("ImageLabel") imageLabel = Instance.new "ImageLabel"
imageLabel.Name = "Tail" imageLabel.Name = "Tail"
imageLabel.Size = UDim2.new(0,62,0,53) imageLabel.Size = UDim2.new(0, 62, 0, 53)
imageLabel.Position = UDim2.new(1,8,0.25) imageLabel.Position = UDim2.new(1, 8, 0.25)
imageLabel.Image = "rbxasset://textures/chatBubble_botBlue_tailRight.png" imageLabel.Image = "rbxasset://textures/chatBubble_botBlue_tailRight.png"
imageLabel.BackgroundTransparency = 1 imageLabel.BackgroundTransparency = 1
imageLabel.RobloxLocked = true imageLabel.RobloxLocked = true
imageLabel.Parent = mainFrame imageLabel.Parent = mainFrame
for n, obj in pairs(choices) do for n, obj in pairs(choices) do
obj.RobloxLocked = true obj.RobloxLocked = true
obj.Parent = mainFrame obj.Parent = mainFrame
end end
lastChoice.RobloxLocked = true lastChoice.RobloxLocked = true
lastChoice.Parent = mainFrame lastChoice.Parent = mainFrame
mainFrame.RobloxLocked = true mainFrame.RobloxLocked = true
mainFrame.Parent = parent mainFrame.Parent = parent
end end
function presentDialogChoices(talkingPart, dialogChoices) function presentDialogChoices(talkingPart, dialogChoices)
if not currentConversationDialog then if not currentConversationDialog then
return return
end end
currentConversationPartner = talkingPart currentConversationPartner = talkingPart
sortedDialogChoices = {} sortedDialogChoices = {}
for n, obj in pairs(dialogChoices) do for n, obj in pairs(dialogChoices) do
if obj:IsA("DialogChoice") then if obj:IsA "DialogChoice" then
table.insert(sortedDialogChoices, obj) table.insert(sortedDialogChoices, obj)
end end
end end
table.sort(sortedDialogChoices, function(a,b) return a.Name < b.Name end) table.sort(sortedDialogChoices, function(a, b)
return a.Name < b.Name
end)
if #sortedDialogChoices == 0 then if #sortedDialogChoices == 0 then
normalEndDialog() normalEndDialog()
@ -358,7 +370,7 @@ function presentDialogChoices(talkingPart, dialogChoices)
end end
local pos = 1 local pos = 1
local yPosition = 0 local yPosition = 0
choiceMap = {} choiceMap = {}
for n, obj in pairs(choices) do for n, obj in pairs(choices) do
obj.Visible = false obj.Visible = false
@ -367,14 +379,14 @@ function presentDialogChoices(talkingPart, dialogChoices)
for n, obj in pairs(sortedDialogChoices) do for n, obj in pairs(sortedDialogChoices) do
if pos <= #choices then if pos <= #choices then
--3 lines is the maximum, set it to that temporarily --3 lines is the maximum, set it to that temporarily
choices[pos].Size = UDim2.new(1, 0, 0, 24*3) choices[pos].Size = UDim2.new(1, 0, 0, 24 * 3)
choices[pos].UserPrompt.Text = obj.UserDialog choices[pos].UserPrompt.Text = obj.UserDialog
local height = math.ceil(choices[pos].UserPrompt.TextBounds.Y/24)*24 local height = math.ceil(choices[pos].UserPrompt.TextBounds.Y / 24) * 24
choices[pos].Position = UDim2.new(0, 0, 0, yPosition) choices[pos].Position = UDim2.new(0, 0, 0, yPosition)
choices[pos].Size = UDim2.new(1, 0, 0, height) choices[pos].Size = UDim2.new(1, 0, 0, height)
choices[pos].Visible = true choices[pos].Visible = true
choiceMap[choices[pos]] = obj choiceMap[choices[pos]] = obj
yPosition = yPosition + height yPosition = yPosition + height
@ -382,11 +394,11 @@ function presentDialogChoices(talkingPart, dialogChoices)
end end
end end
lastChoice.Position = UDim2.new(0,0,0,yPosition) lastChoice.Position = UDim2.new(0, 0, 0, yPosition)
lastChoice.Number.Text = pos .. ")" lastChoice.Number.Text = pos .. ")"
mainFrame.Size = UDim2.new(0, 350, 0, yPosition+24+32) mainFrame.Size = UDim2.new(0, 350, 0, yPosition + 24 + 32)
mainFrame.Position = UDim2.new(0,20,0.0, -mainFrame.Size.Y.Offset-20) mainFrame.Position = UDim2.new(0, 20, 0, -mainFrame.Size.Y.Offset - 20)
styleMainFrame(currentTone()) styleMainFrame(currentTone())
mainFrame.Visible = true mainFrame.Visible = true
end end
@ -398,7 +410,7 @@ function doDialog(dialog)
if dialog.InUse then if dialog.InUse then
Instance.Unlock(dialog) Instance.Unlock(dialog)
return return
else else
dialog.InUse = true dialog.InUse = true
Instance.Unlock(dialog) Instance.Unlock(dialog)
@ -425,20 +437,26 @@ end
function checkForLeaveArea() function checkForLeaveArea()
while currentConversationDialog do while currentConversationDialog do
if currentConversationDialog.Parent and (player:DistanceFromCharacter(currentConversationDialog.Parent.Position) >= currentConversationDialog.ConversationDistance) then if
currentConversationDialog.Parent
and (
player:DistanceFromCharacter(currentConversationDialog.Parent.Position)
>= currentConversationDialog.ConversationDistance
)
then
wanderDialog() wanderDialog()
end end
wait(1) wait(1)
end end
end end
function startDialog(dialog) function startDialog(dialog)
if dialog.Parent and dialog.Parent:IsA("BasePart") then if dialog.Parent and dialog.Parent:IsA "BasePart" then
if player:DistanceFromCharacter(dialog.Parent.Position) >= dialog.ConversationDistance then if player:DistanceFromCharacter(dialog.Parent.Position) >= dialog.ConversationDistance then
showMessage(tooFarAwayMessage, tooFarAwaySize) showMessage(tooFarAwayMessage, tooFarAwaySize)
return return
end end
for dialog, gui in pairs(dialogMap) do for dialog, gui in pairs(dialogMap) do
if dialog and gui then if dialog and gui then
gui.Enabled = false gui.Enabled = false
@ -453,34 +471,36 @@ function startDialog(dialog)
end end
function removeDialog(dialog) function removeDialog(dialog)
if dialogMap[dialog] then if dialogMap[dialog] then
dialogMap[dialog]:Remove() dialogMap[dialog]:Remove()
dialogMap[dialog] = nil dialogMap[dialog] = nil
end end
if dialogConnections[dialog] then if dialogConnections[dialog] then
dialogConnections[dialog]:disconnect() dialogConnections[dialog]:disconnect()
dialogConnections[dialog] = nil dialogConnections[dialog] = nil
end end
end end
function addDialog(dialog) function addDialog(dialog)
if dialog.Parent then if dialog.Parent then
if dialog.Parent:IsA("BasePart") then if dialog.Parent:IsA "BasePart" then
local chatGui = chatNotificationGui:clone() local chatGui = chatNotificationGui:clone()
chatGui.Enabled = not dialog.InUse chatGui.Enabled = not dialog.InUse
chatGui.Adornee = dialog.Parent chatGui.Adornee = dialog.Parent
chatGui.RobloxLocked = true chatGui.RobloxLocked = true
chatGui.Parent = game.CoreGui chatGui.Parent = game.CoreGui
chatGui.Image.Button.MouseButton1Click:connect(function() startDialog(dialog) end) chatGui.Image.Button.MouseButton1Click:connect(function()
startDialog(dialog)
end)
setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone) setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone)
dialogMap[dialog] = chatGui dialogMap[dialog] = chatGui
dialogConnections[dialog] = dialog.Changed:connect(function(prop) dialogConnections[dialog] = dialog.Changed:connect(function(prop)
if prop == "Parent" and dialog.Parent then if prop == "Parent" and dialog.Parent then
--This handles the reparenting case, seperate from removal case --This handles the reparenting case, seperate from removal case
removeDialog(dialog) removeDialog(dialog)
addDialog(dialog) addDialog(dialog)
elseif prop == "InUse" then elseif prop == "InUse" then
chatGui.Enabled = not currentConversationDialog and not dialog.InUse chatGui.Enabled = not currentConversationDialog and not dialog.InUse
if dialog == currentConversationDialog then if dialog == currentConversationDialog then
@ -488,15 +508,15 @@ function addDialog(dialog)
end end
elseif prop == "Tone" or prop == "Purpose" then elseif prop == "Tone" or prop == "Purpose" then
setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone) setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone)
end end
end) end)
else -- still need to listen to parent changes even if current parent is not a BasePart else -- still need to listen to parent changes even if current parent is not a BasePart
dialogConnections[dialog] = dialog.Changed:connect(function(prop) dialogConnections[dialog] = dialog.Changed:connect(function(prop)
if prop == "Parent" and dialog.Parent then if prop == "Parent" and dialog.Parent then
--This handles the reparenting case, seperate from removal case --This handles the reparenting case, seperate from removal case
removeDialog(dialog) removeDialog(dialog)
addDialog(dialog) addDialog(dialog)
end end
end) end)
end end
end end
@ -504,57 +524,65 @@ end
function fetchScripts() function fetchScripts()
local model = game:GetService("InsertService"):LoadAsset(39226062) local model = game:GetService("InsertService"):LoadAsset(39226062)
if type(model) == "string" then -- load failed, lets try again if type(model) == "string" then -- load failed, lets try again
wait(0.1) wait(0.1)
model = game:GetService("InsertService"):LoadAsset(39226062) model = game:GetService("InsertService"):LoadAsset(39226062)
end end
if type(model) == "string" then -- not going to work, lets bail if type(model) == "string" then -- not going to work, lets bail
return return
end end
waitForChild(model,"TimeoutScript") waitForChild(model, "TimeoutScript")
timeoutScript = model.TimeoutScript timeoutScript = model.TimeoutScript
waitForChild(model,"ReenableDialogScript") waitForChild(model, "ReenableDialogScript")
reenableDialogScript = model.ReenableDialogScript reenableDialogScript = model.ReenableDialogScript
end end
function onLoad() function onLoad()
waitForProperty(game.Players, "LocalPlayer") waitForProperty(game.Players, "LocalPlayer")
player = game.Players.LocalPlayer player = game.Players.LocalPlayer
waitForProperty(player, "Character") waitForProperty(player, "Character")
--print("Fetching Scripts") --print("Fetching Scripts")
fetchScripts() fetchScripts()
--print("Creating Guis") --print("Creating Guis")
createChatNotificationGui() createChatNotificationGui()
--print("Creating MessageDialog") --print("Creating MessageDialog")
createMessageDialog() createMessageDialog()
messageDialog.RobloxLocked = true messageDialog.RobloxLocked = true
messageDialog.Parent = gui messageDialog.Parent = gui
--print("Waiting for BottomLeftControl")
waitForChild(gui, "BottomLeftControl")
--print("Initializing Frame")
local frame = Instance.new("Frame")
frame.Name = "DialogFrame"
frame.Position = UDim2.new(0,0,0,0)
frame.Size = UDim2.new(0,0,0,0)
frame.BackgroundTransparency = 1
frame.RobloxLocked = true
frame.Parent = gui.BottomLeftControl
initialize(frame)
--print("Adding Dialogs") --print("Waiting for BottomLeftControl")
game.CollectionService.ItemAdded:connect(function(obj) if obj:IsA("Dialog") then addDialog(obj) end end) waitForChild(gui, "BottomLeftControl")
game.CollectionService.ItemRemoved:connect(function(obj) if obj:IsA("Dialog") then removeDialog(obj) end end)
for i, obj in pairs(game.CollectionService:GetCollection("Dialog")) do --print("Initializing Frame")
if obj:IsA("Dialog") then local frame = Instance.new "Frame"
addDialog(obj) frame.Name = "DialogFrame"
end frame.Position = UDim2.new(0, 0, 0, 0)
end frame.Size = UDim2.new(0, 0, 0, 0)
frame.BackgroundTransparency = 1
frame.RobloxLocked = true
frame.Parent = gui.BottomLeftControl
initialize(frame)
--print("Adding Dialogs")
game.CollectionService.ItemAdded:connect(function(obj)
if obj:IsA "Dialog" then
addDialog(obj)
end
end)
game.CollectionService.ItemRemoved:connect(function(obj)
if obj:IsA "Dialog" then
removeDialog(obj)
end
end)
for _, obj in pairs(game.CollectionService:GetCollection "Dialog") do
if obj:IsA "Dialog" then
addDialog(obj)
end
end
end end
onLoad() onLoad()

File diff suppressed because it is too large Load Diff

View File

@ -1,23 +1,20 @@
local t = {} local t = {}
t.Foo = t.Foo = function()
function() print "foo"
print("foo") end
end
t.Bar = t.Bar = function()
function() print "bar"
print("bar") end
end
t.Help = t.Help = function(funcNameOrFunc)
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 == "Foo" or funcNameOrFunc == t.Foo then
if funcNameOrFunc == "Foo" or funcNameOrFunc == t.Foo then return "Function Foo. Arguments: None. Side effect: prints foo"
return "Function Foo. Arguments: None. Side effect: prints foo" elseif funcNameOrFunc == "Bar" or funcNameOrFunc == t.Bar then
elseif funcNameOrFunc == "Bar" or funcNameOrFunc == t.Bar then return "Function Bar. Arguments: None. Side effect: prints bar"
return "Function Bar. Arguments: None. Side effect: prints bar"
end
end end
end
return t return t

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -9,101 +9,134 @@ function waitForChild(instance, name)
end end
end end
waitForProperty(game.Players,"LocalPlayer") waitForProperty(game.Players, "LocalPlayer")
waitForChild(script.Parent,"Popup") waitForChild(script.Parent, "Popup")
waitForChild(script.Parent.Popup,"AcceptButton") waitForChild(script.Parent.Popup, "AcceptButton")
script.Parent.Popup.AcceptButton.Modal = true script.Parent.Popup.AcceptButton.Modal = true
local localPlayer = game.Players.LocalPlayer local localPlayer = game.Players.LocalPlayer
local teleportUI = nil local teleportUI = nil
local acceptedTeleport = Instance.new("IntValue")
local friendRequestBlacklist = {} local friendRequestBlacklist = {}
local teleportEnabled = true local teleportEnabled = true
local makePopupInvisible = function() local makePopupInvisible = function()
if script.Parent.Popup then script.Parent.Popup.Visible = false end if script.Parent.Popup then
script.Parent.Popup.Visible = false
end
end end
function makeFriend(fromPlayer,toPlayer) function makeFriend(fromPlayer, toPlayer)
local popup = script.Parent:FindFirstChild "Popup"
local popup = script.Parent:FindFirstChild("Popup") if popup == nil then
if popup == nil then return end -- there is no popup! return
if popup.Visible then return end -- currently popping something, abort! end -- there is no popup!
if friendRequestBlacklist[fromPlayer] then return end -- previously cancelled friend request, we don't want it! if popup.Visible then
return
end -- currently popping something, abort!
if friendRequestBlacklist[fromPlayer] then
return
end -- previously cancelled friend request, we don't want it!
popup.PopupText.Text = "Accept Friend Request from " .. tostring(fromPlayer.Name) .. "?" popup.PopupText.Text = "Accept Friend Request from " .. tostring(fromPlayer.Name) .. "?"
popup.PopupImage.Image = "http://www.roblox.com/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=352&y=352" popup.PopupImage.Image = "http://www.roblox.com/thumbs/avatar.ashx?userId="
.. tostring(fromPlayer.userId)
.. "&x=352&y=352"
showTwoButtons() showTwoButtons()
popup.Visible = true popup.Visible = true
popup.AcceptButton.Text = "Accept" popup.AcceptButton.Text = "Accept"
popup.DeclineButton.Text = "Decline" popup.DeclineButton.Text = "Decline"
popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) popup:TweenSize(UDim2.new(0, 330, 0, 350), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 1, true)
local yesCon, noCon local yesCon, noCon
yesCon = popup.AcceptButton.MouseButton1Click:connect(function() yesCon = popup.AcceptButton.MouseButton1Click:connect(function()
popup.Visible = false popup.Visible = false
toPlayer:RequestFriendship(fromPlayer) toPlayer:RequestFriendship(fromPlayer)
if yesCon then yesCon:disconnect() end if yesCon then
if noCon then noCon:disconnect() end yesCon:disconnect()
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) end
if noCon then
noCon:disconnect()
end
popup:TweenSize(
UDim2.new(0, 0, 0, 0),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quart,
1,
true,
makePopupInvisible()
)
end) end)
noCon = popup.DeclineButton.MouseButton1Click:connect(function() noCon = popup.DeclineButton.MouseButton1Click:connect(function()
popup.Visible = false popup.Visible = false
toPlayer:RevokeFriendship(fromPlayer) toPlayer:RevokeFriendship(fromPlayer)
friendRequestBlacklist[fromPlayer] = true friendRequestBlacklist[fromPlayer] = true
print("pop up blacklist") print "pop up blacklist"
if yesCon then yesCon:disconnect() end if yesCon then
if noCon then noCon:disconnect() end yesCon:disconnect()
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) end
if noCon then
noCon:disconnect()
end
popup:TweenSize(
UDim2.new(0, 0, 0, 0),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quart,
1,
true,
makePopupInvisible()
)
end) end)
end end
game.Players.FriendRequestEvent:connect(function(fromPlayer, toPlayer, event)
game.Players.FriendRequestEvent:connect(function(fromPlayer,toPlayer,event)
-- if this doesn't involve me, then do nothing -- if this doesn't involve me, then do nothing
if fromPlayer ~= localPlayer and toPlayer ~= localPlayer then return end if fromPlayer ~= localPlayer and toPlayer ~= localPlayer then
return
end
if fromPlayer == localPlayer then if fromPlayer == localPlayer then
if event == Enum.FriendRequestEvent.Accept then if event == Enum.FriendRequestEvent.Accept then
game:GetService("GuiService"):SendNotification("You are Friends", game:GetService("GuiService"):SendNotification(
"With " .. toPlayer.Name .. "!", "You are Friends",
"http://www.roblox.com/thumbs/avatar.ashx?userId="..tostring(toPlayer.userId).."&x=48&y=48", "With " .. toPlayer.Name .. "!",
5, "http://www.roblox.com/thumbs/avatar.ashx?userId=" .. tostring(toPlayer.userId) .. "&x=48&y=48",
function() 5,
function() end
end) )
end end
elseif toPlayer == localPlayer then elseif toPlayer == localPlayer then
if event == Enum.FriendRequestEvent.Issue then if event == Enum.FriendRequestEvent.Issue then
if friendRequestBlacklist[fromPlayer] then return end -- previously cancelled friend request, we don't want it! if friendRequestBlacklist[fromPlayer] then
game:GetService("GuiService"):SendNotification("Friend Request", return
end -- previously cancelled friend request, we don't want it!
game:GetService("GuiService"):SendNotification(
"Friend Request",
"From " .. fromPlayer.Name, "From " .. fromPlayer.Name,
"http://www.roblox.com/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=48&y=48", "http://www.roblox.com/thumbs/avatar.ashx?userId=" .. tostring(fromPlayer.userId) .. "&x=48&y=48",
8, 8,
function() function()
makeFriend(fromPlayer,toPlayer) makeFriend(fromPlayer, toPlayer)
end) end
)
elseif event == Enum.FriendRequestEvent.Accept then elseif event == Enum.FriendRequestEvent.Accept then
game:GetService("GuiService"):SendNotification("You are Friends", game:GetService("GuiService"):SendNotification(
"With " .. fromPlayer.Name .. "!", "You are Friends",
"http://www.roblox.com/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=48&y=48", "With " .. fromPlayer.Name .. "!",
5, "http://www.roblox.com/thumbs/avatar.ashx?userId=" .. tostring(fromPlayer.userId) .. "&x=48&y=48",
function() 5,
function() end
end) )
end end
end end
end) end)
function showOneButton() function showOneButton()
local popup = script.Parent:FindFirstChild("Popup") local popup = script.Parent:FindFirstChild "Popup"
if popup then if popup then
popup.OKButton.Visible = true popup.OKButton.Visible = true
popup.DeclineButton.Visible = false popup.DeclineButton.Visible = false
@ -112,15 +145,15 @@ function showOneButton()
end end
function showTwoButtons() function showTwoButtons()
local popup = script.Parent:FindFirstChild("Popup") local popup = script.Parent:FindFirstChild "Popup"
if popup then if popup then
popup.OKButton.Visible = false popup.OKButton.Visible = false
popup.DeclineButton.Visible = true popup.DeclineButton.Visible = true
popup.AcceptButton.Visible = true popup.AcceptButton.Visible = true
end end
end end
function onTeleport(teleportState, placeId, spawnName) function onTeleport(teleportState, _, _)
if game:GetService("TeleportService").CustomizedTeleportUI == false then if game:GetService("TeleportService").CustomizedTeleportUI == false then
if teleportState == Enum.TeleportState.Started then if teleportState == Enum.TeleportState.Started then
showTeleportUI("Teleport started...", 0) showTeleportUI("Teleport started...", 0)
@ -139,8 +172,9 @@ function showTeleportUI(message, timer)
teleportUI:Remove() teleportUI:Remove()
end end
waitForChild(localPlayer, "PlayerGui") waitForChild(localPlayer, "PlayerGui")
teleportUI = Instance.new("Message", localPlayer.PlayerGui) teleportUI = Instance.new "Message"
teleportUI.Text = message teleportUI.Text = message
teleportUI.Parent = localPlayer.PlayerGui
if timer > 0 then if timer > 0 then
wait(timer) wait(timer)
teleportUI:Remove() teleportUI:Remove()
@ -148,100 +182,173 @@ function showTeleportUI(message, timer)
end end
if teleportEnabled then if teleportEnabled then
localPlayer.OnTeleport:connect(onTeleport) localPlayer.OnTeleport:connect(onTeleport)
game:GetService("TeleportService").ErrorCallback = function(message) game:GetService("TeleportService").ErrorCallback = function(message)
local popup = script.Parent:FindFirstChild("Popup") local popup = script.Parent:FindFirstChild "Popup"
showOneButton() showOneButton()
popup.PopupText.Text = message popup.PopupText.Text = message
local clickCon local clickCon
clickCon = popup.OKButton.MouseButton1Click:connect(function() clickCon = popup.OKButton.MouseButton1Click:connect(function()
game:GetService("TeleportService"):TeleportCancel() game:GetService("TeleportService"):TeleportCancel()
if clickCon then clickCon:disconnect() end if clickCon then
game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup")) clickCon:disconnect()
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) end
game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild "Popup")
popup:TweenSize(
UDim2.new(0, 0, 0, 0),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quart,
1,
true,
makePopupInvisible()
)
end) end)
game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog, game.GuiService:AddCenterDialog(
script.Parent:FindFirstChild "Popup",
Enum.CenterDialogType.QuitDialog,
--ShowFunction --ShowFunction
function() function()
showOneButton() showOneButton()
script.Parent:FindFirstChild("Popup").Visible = true script.Parent:FindFirstChild("Popup").Visible = true
popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) popup:TweenSize(UDim2.new(0, 330, 0, 350), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 1, true)
end, end,
--HideFunction --HideFunction
function() function()
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) popup:TweenSize(
end) UDim2.new(0, 0, 0, 0),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quart,
1,
true,
makePopupInvisible()
)
end
)
end end
game:GetService("TeleportService").ConfirmationCallback = function(message, placeId, spawnName) game:GetService("TeleportService").ConfirmationCallback = function(message, placeId, spawnName)
local popup = script.Parent:FindFirstChild("Popup") local popup = script.Parent:FindFirstChild "Popup"
popup.PopupText.Text = message popup.PopupText.Text = message
popup.PopupImage.Image = "" popup.PopupImage.Image = ""
local yesCon, noCon local yesCon, noCon
local function killCons() local function killCons()
if yesCon then yesCon:disconnect() end if yesCon then
if noCon then noCon:disconnect() end yesCon:disconnect()
game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup")) end
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) if noCon then
noCon:disconnect()
end
game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild "Popup")
popup:TweenSize(
UDim2.new(0, 0, 0, 0),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quart,
1,
true,
makePopupInvisible()
)
end end
yesCon = popup.AcceptButton.MouseButton1Click:connect(function() yesCon = popup.AcceptButton.MouseButton1Click:connect(function()
killCons() killCons()
local success, err = pcall(function() game:GetService("TeleportService"):TeleportImpl(placeId,spawnName) end) local success, err = pcall(function()
game:GetService("TeleportService"):TeleportImpl(placeId, spawnName)
end)
if not success then if not success then
showOneButton() showOneButton()
popup.PopupText.Text = err popup.PopupText.Text = err
local clickCon local clickCon
clickCon = popup.OKButton.MouseButton1Click:connect(function() clickCon = popup.OKButton.MouseButton1Click:connect(function()
if clickCon then clickCon:disconnect() end if clickCon then
game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup")) clickCon:disconnect()
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) end
game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild "Popup")
popup:TweenSize(
UDim2.new(0, 0, 0, 0),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quart,
1,
true,
makePopupInvisible()
)
end) end)
game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog, game.GuiService:AddCenterDialog(
--ShowFunction script.Parent:FindFirstChild "Popup",
function() Enum.CenterDialogType.QuitDialog,
showOneButton() --ShowFunction
script.Parent:FindFirstChild("Popup").Visible = true function()
popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) showOneButton()
end, script.Parent:FindFirstChild("Popup").Visible = true
--HideFunction popup:TweenSize(
function() UDim2.new(0, 330, 0, 350),
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) Enum.EasingDirection.Out,
end) Enum.EasingStyle.Quart,
1,
true
)
end,
--HideFunction
function()
popup:TweenSize(
UDim2.new(0, 0, 0, 0),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quart,
1,
true,
makePopupInvisible()
)
end
)
end end
end) end)
noCon = popup.DeclineButton.MouseButton1Click:connect(function() noCon = popup.DeclineButton.MouseButton1Click:connect(function()
killCons() killCons()
local success = pcall(function() game:GetService("TeleportService"):TeleportCancel() end) pcall(function()
game:GetService("TeleportService"):TeleportCancel()
end)
end)
local centerDialogSuccess = pcall(function()
game.GuiService:AddCenterDialog(
script.Parent:FindFirstChild "Popup",
Enum.CenterDialogType.QuitDialog,
--ShowFunction
function()
showTwoButtons()
popup.AcceptButton.Text = "Leave"
popup.DeclineButton.Text = "Stay"
script.Parent:FindFirstChild("Popup").Visible = true
popup:TweenSize(
UDim2.new(0, 330, 0, 350),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quart,
1,
true
)
end,
--HideFunction
function()
popup:TweenSize(
UDim2.new(0, 0, 0, 0),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quart,
1,
true,
makePopupInvisible()
)
end
)
end) end)
local centerDialogSuccess = pcall(function() game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog,
--ShowFunction
function()
showTwoButtons()
popup.AcceptButton.Text = "Leave"
popup.DeclineButton.Text = "Stay"
script.Parent:FindFirstChild("Popup").Visible = true
popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true)
end,
--HideFunction
function()
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible())
end)
end)
if centerDialogSuccess == false then if centerDialogSuccess == false then
script.Parent:FindFirstChild("Popup").Visible = true script.Parent:FindFirstChild("Popup").Visible = true
popup.AcceptButton.Text = "Leave" popup.AcceptButton.Text = "Leave"
popup.DeclineButton.Text = "Stay" popup.DeclineButton.Text = "Stay"
popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) popup:TweenSize(UDim2.new(0, 330, 0, 350), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 1, true)
end end
return true return true
end end
end end

View File

@ -1,8 +1,8 @@
--build our gui --build our gui
local popupFrame = Instance.new("Frame") local popupFrame = Instance.new "Frame"
popupFrame.Position = UDim2.new(0.5,-165,0.5,-175) popupFrame.Position = UDim2.new(0.5, -165, 0.5, -175)
popupFrame.Size = UDim2.new(0,330,0,350) popupFrame.Size = UDim2.new(0, 330, 0, 350)
popupFrame.Style = Enum.FrameStyle.RobloxRound popupFrame.Style = Enum.FrameStyle.RobloxRound
popupFrame.ZIndex = 4 popupFrame.ZIndex = 4
popupFrame.Name = "Popup" popupFrame.Name = "Popup"
@ -10,26 +10,26 @@ popupFrame.Visible = false
popupFrame.Parent = script.Parent popupFrame.Parent = script.Parent
local darken = popupFrame:clone() local darken = popupFrame:clone()
darken.Size = UDim2.new(1,16,1,16) darken.Size = UDim2.new(1, 16, 1, 16)
darken.Position = UDim2.new(0,-8,0,-8) darken.Position = UDim2.new(0, -8, 0, -8)
darken.Name = "Darken" darken.Name = "Darken"
darken.ZIndex = 1 darken.ZIndex = 1
darken.Parent = popupFrame darken.Parent = popupFrame
local acceptButton = Instance.new("TextButton") local acceptButton = Instance.new "TextButton"
acceptButton.Position = UDim2.new(0,20,0,270) acceptButton.Position = UDim2.new(0, 20, 0, 270)
acceptButton.Size = UDim2.new(0,100,0,50) acceptButton.Size = UDim2.new(0, 100, 0, 50)
acceptButton.Font = Enum.Font.ArialBold acceptButton.Font = Enum.Font.ArialBold
acceptButton.FontSize = Enum.FontSize.Size24 acceptButton.FontSize = Enum.FontSize.Size24
acceptButton.Style = Enum.ButtonStyle.RobloxButton acceptButton.Style = Enum.ButtonStyle.RobloxButton
acceptButton.TextColor3 = Color3.new(248/255,248/255,248/255) acceptButton.TextColor3 = Color3.new(248 / 255, 248 / 255, 248 / 255)
acceptButton.Text = "Yes" acceptButton.Text = "Yes"
acceptButton.ZIndex = 5 acceptButton.ZIndex = 5
acceptButton.Name = "AcceptButton" acceptButton.Name = "AcceptButton"
acceptButton.Parent = popupFrame acceptButton.Parent = popupFrame
local declineButton = acceptButton:clone() local declineButton = acceptButton:clone()
declineButton.Position = UDim2.new(1,-120,0,270) declineButton.Position = UDim2.new(1, -120, 0, 270)
declineButton.Text = "No" declineButton.Text = "No"
declineButton.Name = "DeclineButton" declineButton.Name = "DeclineButton"
declineButton.Parent = popupFrame declineButton.Parent = popupFrame
@ -37,36 +37,36 @@ declineButton.Parent = popupFrame
local okButton = acceptButton:clone() local okButton = acceptButton:clone()
okButton.Name = "OKButton" okButton.Name = "OKButton"
okButton.Text = "OK" okButton.Text = "OK"
okButton.Position = UDim2.new(0.5,-50,0,270) okButton.Position = UDim2.new(0.5, -50, 0, 270)
okButton.Visible = false okButton.Visible = false
okButton.Parent = popupFrame okButton.Parent = popupFrame
local popupImage = Instance.new("ImageLabel") local popupImage = Instance.new "ImageLabel"
popupImage.BackgroundTransparency = 1 popupImage.BackgroundTransparency = 1
popupImage.Position = UDim2.new(0.5,-140,0,0) popupImage.Position = UDim2.new(0.5, -140, 0, 0)
popupImage.Size = UDim2.new(0,280,0,280) popupImage.Size = UDim2.new(0, 280, 0, 280)
popupImage.ZIndex = 3 popupImage.ZIndex = 3
popupImage.Name = "PopupImage" popupImage.Name = "PopupImage"
popupImage.Parent = popupFrame popupImage.Parent = popupFrame
local backing = Instance.new("ImageLabel") local backing = Instance.new "ImageLabel"
backing.BackgroundTransparency = 1 backing.BackgroundTransparency = 1
backing.Size = UDim2.new(1,0,1,0) backing.Size = UDim2.new(1, 0, 1, 0)
backing.Image = "http://www.roblox.com/asset/?id=47574181" backing.Image = "http://www.roblox.com/asset/?id=47574181"
backing.Name = "Backing" backing.Name = "Backing"
backing.ZIndex = 2 backing.ZIndex = 2
backing.Parent = popupImage backing.Parent = popupImage
local popupText = Instance.new("TextLabel") local popupText = Instance.new "TextLabel"
popupText.Name = "PopupText" popupText.Name = "PopupText"
popupText.Size = UDim2.new(1,0,0.8,0) popupText.Size = UDim2.new(1, 0, 0.8, 0)
popupText.Font = Enum.Font.ArialBold popupText.Font = Enum.Font.ArialBold
popupText.FontSize = Enum.FontSize.Size36 popupText.FontSize = Enum.FontSize.Size36
popupText.BackgroundTransparency = 1 popupText.BackgroundTransparency = 1
popupText.Text = "Hello I'm a popup" popupText.Text = "Hello I'm a popup"
popupText.TextColor3 = Color3.new(248/255,248/255,248/255) popupText.TextColor3 = Color3.new(248 / 255, 248 / 255, 248 / 255)
popupText.TextWrap = true popupText.TextWrap = true
popupText.ZIndex = 5 popupText.ZIndex = 5
popupText.Parent = popupFrame popupText.Parent = popupFrame
script:remove() script:remove()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@

File diff suppressed because it is too large Load Diff

View File

@ -3,15 +3,15 @@
-- access to all of the libraries (otherwise only local scripts do) -- access to all of the libraries (otherwise only local scripts do)
local deepakTestingPlace = 3569749 local deepakTestingPlace = 3569749
local sc = game:GetService("ScriptContext") local sc = game:GetService "ScriptContext"
local tries = 0 local tries = 0
while not sc and tries < 3 do while not sc and tries < 3 do
tries = tries + 1 tries = tries + 1
sc = game:GetService("ScriptContext") sc = game:GetService "ScriptContext"
wait(0.2) wait(0.2)
end end
if sc then if sc then
sc:RegisterLibrary("Libraries/RbxGui", "45284430") sc:RegisterLibrary("Libraries/RbxGui", "45284430")
sc:RegisterLibrary("Libraries/RbxGear", "45374389") sc:RegisterLibrary("Libraries/RbxGear", "45374389")
@ -22,5 +22,5 @@ if sc then
sc:RegisterLibrary("Libraries/RbxStamper", "73157242") sc:RegisterLibrary("Libraries/RbxStamper", "73157242")
sc:LibraryRegistrationComplete() sc:LibraryRegistrationComplete()
else else
print("failed to find script context, libraries did not load") print "failed to find script context, libraries did not load"
end end

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,7 @@
-- This script manages context switches in the backpack (Gear to Wardrobe, etc.) and player state changes. Also manages global functions across different tabs (currently only search) -- This script manages context switches in the backpack (Gear to Wardrobe, etc.) and player state changes. Also manages global functions across different tabs (currently only search)
if game.CoreGui.Version < 7 then return end -- peace out if we aren't using the right client if game.CoreGui.Version < 7 then
return
end -- peace out if we aren't using the right client
-- basic functions -- basic functions
local function waitForChild(instance, name) local function waitForChild(instance, name)
@ -15,23 +17,21 @@ local function waitForProperty(instance, property)
end end
-- don't do anything if we are in an empty game -- don't do anything if we are in an empty game
waitForChild(game,"Players") waitForChild(game, "Players")
if #game.Players:GetChildren() < 1 then if #game.Players:GetChildren() < 1 then
game.Players.ChildAdded:wait() game.Players.ChildAdded:wait()
end end
-- make sure everything is loaded in before we do anything -- make sure everything is loaded in before we do anything
-- get our local player -- get our local player
waitForProperty(game.Players,"LocalPlayer") waitForProperty(game.Players, "LocalPlayer")
local player = game.Players.LocalPlayer local player = game.Players.LocalPlayer
------------------------ Locals ------------------------------ ------------------------ Locals ------------------------------
local backpack = script.Parent local backpack = script.Parent
waitForChild(backpack,"Gear") waitForChild(backpack, "Gear")
local screen = script.Parent.Parent local screen = script.Parent.Parent
assert(screen:IsA("ScreenGui")) assert(screen:IsA "ScreenGui")
waitForChild(backpack, "Tabs") waitForChild(backpack, "Tabs")
waitForChild(backpack.Tabs, "CloseButton") waitForChild(backpack.Tabs, "CloseButton")
@ -43,19 +43,19 @@ if game.CoreGui.Version >= 8 then
waitForChild(backpack.Tabs, "WardrobeButton") waitForChild(backpack.Tabs, "WardrobeButton")
local wardrobeButton = backpack.Tabs.WardrobeButton local wardrobeButton = backpack.Tabs.WardrobeButton
end end
waitForChild(backpack.Parent,"ControlFrame") waitForChild(backpack.Parent, "ControlFrame")
local backpackButton = waitForChild(backpack.Parent.ControlFrame,"BackpackButton") local backpackButton = waitForChild(backpack.Parent.ControlFrame, "BackpackButton")
local currentTab = "gear" local currentTab = "gear"
local searchFrame = waitForChild(backpack,"SearchFrame") local searchFrame = waitForChild(backpack, "SearchFrame")
waitForChild(backpack.SearchFrame,"SearchBoxFrame") waitForChild(backpack.SearchFrame, "SearchBoxFrame")
local searchBox = waitForChild(backpack.SearchFrame.SearchBoxFrame,"SearchBox") local searchBox = waitForChild(backpack.SearchFrame.SearchBoxFrame, "SearchBox")
local searchButton = waitForChild(backpack.SearchFrame,"SearchButton") local searchButton = waitForChild(backpack.SearchFrame, "SearchButton")
local resetButton = waitForChild(backpack.SearchFrame,"ResetButton") local resetButton = waitForChild(backpack.SearchFrame, "ResetButton")
local robloxGui = waitForChild(Game.CoreGui, 'RobloxGui') local robloxGui = waitForChild(Game.CoreGui, "RobloxGui")
local currentLoadout = waitForChild(robloxGui, 'CurrentLoadout') local currentLoadout = waitForChild(robloxGui, "CurrentLoadout")
local loadoutBackground = waitForChild(currentLoadout, 'Background') local loadoutBackground = waitForChild(currentLoadout, "Background")
local canToggle = true local canToggle = true
local readyForNextEvent = true local readyForNextEvent = true
@ -65,7 +65,7 @@ local disabledByDeveloper = false
local humanoidDiedCon = nil local humanoidDiedCon = nil
local backpackButtonPos local backpackButtonPos
local guiTweenSpeed = 0.25 -- how quickly we open/close the backpack local guiTweenSpeed = 0.25 -- how quickly we open/close the backpack
@ -75,21 +75,19 @@ local backquote = "`"
local backpackSize = UDim2.new(0, 600, 0, 400) local backpackSize = UDim2.new(0, 600, 0, 400)
if robloxGui.AbsoluteSize.Y <= 320 then if robloxGui.AbsoluteSize.Y <= 320 then
backpackSize = UDim2.new(0, 200, 0, 140) backpackSize = UDim2.new(0, 200, 0, 140)
end end
------------------------ End Locals --------------------------- ------------------------ End Locals ---------------------------
---------------------------------------- Public Event Setup ---------------------------------------- ---------------------------------------- Public Event Setup ----------------------------------------
function createPublicEvent(eventName) function createPublicEvent(eventName)
assert(eventName, "eventName is nil") assert(eventName, "eventName is nil")
assert(tostring(eventName),"eventName is not a string") assert(tostring(eventName), "eventName is not a string")
local newEvent = Instance.new("BindableEvent") local newEvent = Instance.new "BindableEvent"
newEvent.Name = tostring(eventName) newEvent.Name = tostring(eventName)
newEvent.Parent = script newEvent.Parent = script
@ -101,8 +99,8 @@ function createPublicFunction(funcName, invokeFunc)
assert(tostring(funcName), "funcName is not a string") assert(tostring(funcName), "funcName is not a string")
assert(invokeFunc, "invokeFunc is nil") assert(invokeFunc, "invokeFunc is nil")
assert(type(invokeFunc) == "function", "invokeFunc should be of type 'function'") assert(type(invokeFunc) == "function", "invokeFunc should be of type 'function'")
local newFunction = Instance.new("BindableFunction") local newFunction = Instance.new "BindableFunction"
newFunction.Name = tostring(funcName) newFunction.Name = tostring(funcName)
newFunction.OnInvoke = invokeFunc newFunction.OnInvoke = invokeFunc
newFunction.Parent = script newFunction.Parent = script
@ -110,16 +108,14 @@ function createPublicFunction(funcName, invokeFunc)
return newFunction return newFunction
end end
-- Events -- Events
local resizeEvent = createPublicEvent("ResizeEvent") local resizeEvent = createPublicEvent "ResizeEvent"
local backpackOpenEvent = createPublicEvent("BackpackOpenEvent") local backpackOpenEvent = createPublicEvent "BackpackOpenEvent"
local backpackCloseEvent = createPublicEvent("BackpackCloseEvent") local backpackCloseEvent = createPublicEvent "BackpackCloseEvent"
local tabClickedEvent = createPublicEvent("TabClickedEvent") local tabClickedEvent = createPublicEvent "TabClickedEvent"
local searchRequestedEvent = createPublicEvent("SearchRequestedEvent") local searchRequestedEvent = createPublicEvent "SearchRequestedEvent"
---------------------------------------- End Public Event Setup ---------------------------------------- ---------------------------------------- End Public Event Setup ----------------------------------------
--------------------------- Internal Functions ---------------------------------------- --------------------------- Internal Functions ----------------------------------------
function deactivateBackpack() function deactivateBackpack()
@ -128,20 +124,20 @@ function deactivateBackpack()
end end
function activateBackpack() function activateBackpack()
initHumanoidDiedConnections() initHumanoidDiedConnections()
active = true active = true
backpack.Visible = backpackIsOpen backpack.Visible = backpackIsOpen
if backpackIsOpen then if backpackIsOpen then
toggleBackpack() toggleBackpack()
end end
end end
function initHumanoidDiedConnections() function initHumanoidDiedConnections()
if humanoidDiedCon then if humanoidDiedCon then
humanoidDiedCon:disconnect() humanoidDiedCon:disconnect()
end end
waitForProperty(game.Players.LocalPlayer,"Character") waitForProperty(game.Players.LocalPlayer, "Character")
waitForChild(game.Players.LocalPlayer.Character,"Humanoid") waitForChild(game.Players.LocalPlayer.Character, "Humanoid")
humanoidDiedCon = game.Players.LocalPlayer.Character.Humanoid.Died:connect(deactivateBackpack) humanoidDiedCon = game.Players.LocalPlayer.Character.Humanoid.Died:connect(deactivateBackpack)
end end
@ -153,90 +149,108 @@ local hideBackpack = function()
backpackCloseEvent:Fire(currentTab) backpackCloseEvent:Fire(currentTab)
backpack.Tabs.Visible = false backpack.Tabs.Visible = false
searchFrame.Visible = false searchFrame.Visible = false
backpack:TweenSizeAndPosition(UDim2.new(0, backpackSize.X.Offset,0, 0), UDim2.new(0.5, -backpackSize.X.Offset/2, 1, -85), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed, true, backpack:TweenSizeAndPosition(
UDim2.new(0, backpackSize.X.Offset, 0, 0),
UDim2.new(0.5, -backpackSize.X.Offset / 2, 1, -85),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quad,
guiTweenSpeed,
true,
function() function()
game.GuiService:RemoveCenterDialog(backpack) game.GuiService:RemoveCenterDialog(backpack)
backpack.Visible = false backpack.Visible = false
backpackButton.Selected = false backpackButton.Selected = false
end) end
delay(guiTweenSpeed,function() )
delay(guiTweenSpeed, function()
game.GuiService:RemoveCenterDialog(backpack) game.GuiService:RemoveCenterDialog(backpack)
backpack.Visible = false backpack.Visible = false
backpackButton.Selected = false backpackButton.Selected = false
readyForNextEvent = true readyForNextEvent = true
canToggle = true canToggle = true
end) end)
end end
function showBackpack() function showBackpack()
game.GuiService:AddCenterDialog(backpack, Enum.CenterDialogType.PlayerInitiatedDialog, game.GuiService:AddCenterDialog(backpack, Enum.CenterDialogType.PlayerInitiatedDialog, function()
function() backpack.Visible = true
backpack.Visible = true backpackButton.Selected = true
backpackButton.Selected = true end, function()
end, backpack.Visible = false
function() backpackButton.Selected = false
backpack.Visible = false
backpackButton.Selected = false
end) end)
backpack.Visible = true backpack.Visible = true
backpackButton.Selected = true backpackButton.Selected = true
backpack:TweenSizeAndPosition(backpackSize, UDim2.new(0.5, -backpackSize.X.Offset/2, 1, -backpackSize.Y.Offset - 88), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed, true) backpack:TweenSizeAndPosition(
delay(guiTweenSpeed,function() backpackSize,
UDim2.new(0.5, -backpackSize.X.Offset / 2, 1, -backpackSize.Y.Offset - 88),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quad,
guiTweenSpeed,
true
)
delay(guiTweenSpeed, function()
backpack.Tabs.Visible = false backpack.Tabs.Visible = false
searchFrame.Visible = true searchFrame.Visible = true
backpackOpenEvent:Fire(currentTab) backpackOpenEvent:Fire(currentTab)
canToggle = true canToggle = true
readyForNextEvent = true readyForNextEvent = true
backpackButton.Image = 'http://www.roblox.com/asset/?id=97644093' backpackButton.Image = "http://www.roblox.com/asset/?id=97644093"
backpackButton.Position = UDim2.new(0.5, -60, 1, -backpackSize.Y.Offset - 103) backpackButton.Position = UDim2.new(0.5, -60, 1, -backpackSize.Y.Offset - 103)
end) end)
end end
function toggleBackpack() function toggleBackpack()
if not game.Players.LocalPlayer then return end if not game.Players.LocalPlayer then
if not game.Players.LocalPlayer["Character"] then return end return
if not canToggle then return end end
if not readyForNextEvent then return end if not game.Players.LocalPlayer["Character"] then
return
end
if not canToggle then
return
end
if not readyForNextEvent then
return
end
readyForNextEvent = false readyForNextEvent = false
canToggle = false canToggle = false
backpackIsOpen = not backpackIsOpen backpackIsOpen = not backpackIsOpen
if backpackIsOpen then if backpackIsOpen then
loadoutBackground.Image = 'http://www.roblox.com/asset/?id=97623721' loadoutBackground.Image = "http://www.roblox.com/asset/?id=97623721"
loadoutBackground.Position = UDim2.new(-0.03, 0, -0.17, 0) loadoutBackground.Position = UDim2.new(-0.03, 0, -0.17, 0)
loadoutBackground.Size = UDim2.new(1.05, 0, 1.25, 0) loadoutBackground.Size = UDim2.new(1.05, 0, 1.25, 0)
loadoutBackground.ZIndex = 2.0 loadoutBackground.ZIndex = 2.0
loadoutBackground.Visible = true loadoutBackground.Visible = true
showBackpack() showBackpack()
else else
backpackButton.Position = UDim2.new(0.5, -60, 1, -44) backpackButton.Position = UDim2.new(0.5, -60, 1, -44)
loadoutBackground.Visible = false loadoutBackground.Visible = false
backpackButton.Selected = false backpackButton.Selected = false
backpackButton.Image = "http://www.roblox.com/asset/?id=97617958" backpackButton.Image = "http://www.roblox.com/asset/?id=97617958"
loadoutBackground.Image = 'http://www.roblox.com/asset/?id=96536002' loadoutBackground.Image = "http://www.roblox.com/asset/?id=96536002"
loadoutBackground.Position = UDim2.new(-0.1, 0, -0.1, 0) loadoutBackground.Position = UDim2.new(-0.1, 0, -0.1, 0)
loadoutBackground.Size = UDim2.new(1.2, 0, 1.2, 0) loadoutBackground.Size = UDim2.new(1.2, 0, 1.2, 0)
hideBackpack() hideBackpack()
local clChildren = currentLoadout:GetChildren() local clChildren = currentLoadout:GetChildren()
for i = 1, #clChildren do for i = 1, #clChildren do
if clChildren[i] and clChildren[i]:IsA('Frame') then if clChildren[i] and clChildren[i]:IsA "Frame" then
local frame = clChildren[i] local frame = clChildren[i]
if #frame:GetChildren() > 0 then if #frame:GetChildren() > 0 then
backpackButton.Position = UDim2.new(0.5, -60, 1, -108) backpackButton.Position = UDim2.new(0.5, -60, 1, -108)
backpackButton.Visible = true backpackButton.Visible = true
loadoutBackground.Visible = true loadoutBackground.Visible = true
if frame:GetChildren()[1]:IsA('ImageButton') then if frame:GetChildren()[1]:IsA "ImageButton" then
local imgButton = frame:GetChildren()[1] local imgButton = frame:GetChildren()[1]
imgButton.Active = true imgButton.Active = true
imgButton.Draggable = false imgButton.Draggable = false
end end
end end
end end
end end
end end
end end
@ -248,27 +262,27 @@ end
function setSelected(tab) function setSelected(tab)
assert(tab) assert(tab)
assert(tab:IsA("TextButton")) assert(tab:IsA "TextButton")
tab.BackgroundColor3 = Color3.new(1,1,1) tab.BackgroundColor3 = Color3.new(1, 1, 1)
tab.TextColor3 = Color3.new(0,0,0) tab.TextColor3 = Color3.new(0, 0, 0)
tab.Selected = true tab.Selected = true
tab.ZIndex = 3 tab.ZIndex = 3
end end
function setUnselected(tab) function setUnselected(tab)
assert(tab) assert(tab)
assert(tab:IsA("TextButton")) assert(tab:IsA "TextButton")
tab.BackgroundColor3 = Color3.new(0,0,0) tab.BackgroundColor3 = Color3.new(0, 0, 0)
tab.TextColor3 = Color3.new(1,1,1) tab.TextColor3 = Color3.new(1, 1, 1)
tab.Selected = false tab.Selected = false
tab.ZIndex = 1 tab.ZIndex = 1
end end
function updateTabGui(selectedTab) function updateTabGui(selectedTab)
assert(selectedTab) assert(selectedTab)
if selectedTab == "gear" then if selectedTab == "gear" then
setSelected(inventoryButton) setSelected(inventoryButton)
setUnselected(wardrobeButton) setUnselected(wardrobeButton)
@ -280,44 +294,50 @@ end
function mouseLeaveTab(button) function mouseLeaveTab(button)
assert(button) assert(button)
assert(button:IsA("TextButton")) assert(button:IsA "TextButton")
if button.Selected then return end if button.Selected then
return
button.BackgroundColor3 = Color3.new(0,0,0) end
button.BackgroundColor3 = Color3.new(0, 0, 0)
end end
function mouseOverTab(button) function mouseOverTab(button)
assert(button) assert(button)
assert(button:IsA("TextButton")) assert(button:IsA "TextButton")
if button.Selected then return end if button.Selected then
return
button.BackgroundColor3 = Color3.new(39/255,39/255,39/255) end
button.BackgroundColor3 = Color3.new(39 / 255, 39 / 255, 39 / 255)
end end
function newTabClicked(tabName) function newTabClicked(tabName)
assert(tabName) assert(tabName)
tabName = string.lower(tabName) tabName = string.lower(tabName)
currentTab = tabName currentTab = tabName
updateTabGui(tabName) updateTabGui(tabName)
tabClickedEvent:Fire(tabName) tabClickedEvent:Fire(tabName)
resetSearch() resetSearch()
end end
function trim(s) function trim(s)
return (s:gsub("^%s*(.-)%s*$", "%1")) return (s:gsub("^%s*(.-)%s*$", "%1"))
end end
function splitByWhitespace(text) function splitByWhitespace(text)
if type(text) ~= "string" then return nil end if type(text) ~= "string" then
return nil
end
local terms = {} local terms = {}
for token in string.gmatch(text, "[^%s]+") do for token in string.gmatch(text, "[^%s]+") do
if string.len(token) > 0 then if string.len(token) > 0 then
table.insert(terms,token) table.insert(terms, token)
end end
end end
return terms return terms
end end
@ -348,13 +368,13 @@ local backpackReady = function()
readyForNextEvent = true readyForNextEvent = true
end end
function coreGuiChanged(coreGuiType,enabled) function coreGuiChanged(coreGuiType, enabled)
if coreGuiType == Enum.CoreGuiType.Backpack or coreGuiType == Enum.CoreGuiType.All then if coreGuiType == Enum.CoreGuiType.Backpack or coreGuiType == Enum.CoreGuiType.All then
active = enabled active = enabled
disabledByDeveloper = not enabled disabledByDeveloper = not enabled
if disabledByDeveloper then if disabledByDeveloper then
pcall(function() pcall(function()
game:GetService("GuiService"):RemoveKey(tilde) game:GetService("GuiService"):RemoveKey(tilde)
game:GetService("GuiService"):RemoveKey(backquote) game:GetService("GuiService"):RemoveKey(backquote)
end) end)
@ -374,13 +394,11 @@ end
--------------------------- End Internal Functions ------------------------------------- --------------------------- End Internal Functions -------------------------------------
------------------------------ Public Functions Setup ------------------------------------- ------------------------------ Public Functions Setup -------------------------------------
createPublicFunction("CloseBackpack", hideBackpack) createPublicFunction("CloseBackpack", hideBackpack)
createPublicFunction("BackpackReady", backpackReady) createPublicFunction("BackpackReady", backpackReady)
------------------------------ End Public Functions Setup --------------------------------- ------------------------------ End Public Functions Setup ---------------------------------
------------------------ Connections/Script Main ------------------------------------------- ------------------------ Connections/Script Main -------------------------------------------
pcall(function() pcall(function()
@ -388,14 +406,26 @@ pcall(function()
Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged) Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged)
end) end)
inventoryButton.MouseButton1Click:connect(function() newTabClicked("gear") end) inventoryButton.MouseButton1Click:connect(function()
inventoryButton.MouseEnter:connect(function() mouseOverTab(inventoryButton) end) newTabClicked "gear"
inventoryButton.MouseLeave:connect(function() mouseLeaveTab(inventoryButton) end) end)
inventoryButton.MouseEnter:connect(function()
mouseOverTab(inventoryButton)
end)
inventoryButton.MouseLeave:connect(function()
mouseLeaveTab(inventoryButton)
end)
if game.CoreGui.Version >= 8 then if game.CoreGui.Version >= 8 then
wardrobeButton.MouseButton1Click:connect(function() newTabClicked("wardrobe") end) wardrobeButton.MouseButton1Click:connect(function()
wardrobeButton.MouseEnter:connect(function() mouseOverTab(wardrobeButton) end) newTabClicked "wardrobe"
wardrobeButton.MouseLeave:connect(function() mouseLeaveTab(wardrobeButton) end) end)
wardrobeButton.MouseEnter:connect(function()
mouseOverTab(wardrobeButton)
end)
wardrobeButton.MouseLeave:connect(function()
mouseLeaveTab(wardrobeButton)
end)
end end
closeButton.MouseButton1Click:connect(closeBackpack) closeButton.MouseButton1Click:connect(closeBackpack)
@ -410,13 +440,17 @@ end)
game:GetService("GuiService"):AddKey(tilde) game:GetService("GuiService"):AddKey(tilde)
game:GetService("GuiService"):AddKey(backquote) game:GetService("GuiService"):AddKey(backquote)
game:GetService("GuiService").KeyPressed:connect(function(key) game:GetService("GuiService").KeyPressed:connect(function(key)
if not active or disabledByDeveloper then return end if not active or disabledByDeveloper then
return
end
if key == tilde or key == backquote then if key == tilde or key == backquote then
toggleBackpack() toggleBackpack()
end end
end) end)
backpackButton.MouseButton1Click:connect(function() backpackButton.MouseButton1Click:connect(function()
if not active or disabledByDeveloper then return end if not active or disabledByDeveloper then
return
end
toggleBackpack() toggleBackpack()
end) end)
@ -437,7 +471,7 @@ end)
searchButton.MouseButton1Click:connect(doSearch) searchButton.MouseButton1Click:connect(doSearch)
resetButton.MouseButton1Click:connect(resetSearch) resetButton.MouseButton1Click:connect(resetSearch)
if searchFrame and robloxGui.AbsoluteSize.Y <= 320 then if searchFrame and robloxGui.AbsoluteSize.Y <= 320 then
searchFrame.RobloxLocked = false searchFrame.RobloxLocked = false
searchFrame:Destroy() searchFrame:Destroy()
end end

File diff suppressed because it is too large Load Diff

9505
mercury.yml Normal file

File diff suppressed because it is too large Load Diff

1
selene.toml Normal file
View File

@ -0,0 +1 @@
std = "mercury"

6
stylua.toml Normal file
View File

@ -0,0 +1,6 @@
column_width = 120
line_endings = "Unix"
indent_type = "Tabs"
indent_width = 4
quote_style = "AutoPreferDouble"
call_parentheses = "None"