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

View File

@ -6,21 +6,23 @@
while not Game do
wait()
end
while not Game:FindFirstChild("Players") do
while not Game:FindFirstChild "Players" do
wait()
end
while not Game.Players.LocalPlayer do
wait()
end
while not Game:FindFirstChild("CoreGui") do
while not Game:FindFirstChild "CoreGui" do
wait()
end
while not Game.CoreGui:FindFirstChild("RobloxGui") do
while not Game.CoreGui:FindFirstChild "RobloxGui" do
wait()
end
local userInputService = Game:GetService("UserInputService")
local success = pcall(function() userInputService:IsLuaTouchControls() end)
local userInputService = Game:GetService "UserInputService"
local success = pcall(function()
userInputService:IsLuaTouchControls()
end)
if not success then
script:Destroy()
end
@ -34,9 +36,8 @@ function isSmallScreenDevice()
end
local localPlayer = Game.Players.LocalPlayer
local thumbstickInactiveAlpha = 0.3
local thumbstickSize = 120
if isSmallScreenDevice() then
if isSmallScreenDevice() then
thumbstickSize = 70
end
@ -46,7 +47,7 @@ local ThumbstickMaxPercentGive = 0.92
local thumbstickTouches = {}
local jumpButtonSize = 90
if isSmallScreenDevice() then
if isSmallScreenDevice() then
jumpButtonSize = 70
end
local oldJumpTouches = {}
@ -58,7 +59,6 @@ local CameraZoomSensitivity = 0.03
local PinchZoomDelay = 0.2
local cameraTouch = nil
-- make sure all of our images are good to go
Game:GetService("ContentProvider"):Preload(touchControlsSheet)
@ -67,134 +67,181 @@ Game:GetService("ContentProvider"):Preload(touchControlsSheet)
-- Functions
function DistanceBetweenTwoPoints(point1, point2)
local dx = point2.x - point1.x
local dy = point2.y - point1.y
return math.sqrt( (dx*dx) + (dy*dy) )
local dx = point2.x - point1.x
local dy = point2.y - point1.y
return math.sqrt((dx * dx) + (dy * dy))
end
function transformFromCenterToTopLeft(pointToTranslate, guiObject)
return UDim2.new(0,pointToTranslate.x - guiObject.AbsoluteSize.x/2,0,pointToTranslate.y - guiObject.AbsoluteSize.y/2)
return UDim2.new(
0,
pointToTranslate.x - guiObject.AbsoluteSize.x / 2,
0,
pointToTranslate.y - guiObject.AbsoluteSize.y / 2
)
end
function rotatePointAboutLocation(pointToRotate, pointToRotateAbout, radians)
local sinAnglePercent = math.sin(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)
local sinAnglePercent = math.sin(radians)
local cosAnglePercent = math.cos(radians)
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
function dotProduct(v1,v2)
return ((v1.x*v2.x) + (v1.y*v2.y))
function dotProduct(v1, v2)
return ((v1.x * v2.x) + (v1.y * v2.y))
end
function stationaryThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation)
local thumbstickOuterCenterPosition = Vector2.new(thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x/2, thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y/2)
local centerDiff = DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenterPosition)
-- thumbstick is moving outside our region, need to cap its distance
if centerDiff > (thumbstickSize/2) then
local thumbVector = Vector2.new(touchLocation.x - thumbstickOuterCenterPosition.x,touchLocation.y - thumbstickOuterCenterPosition.y);
local 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
local thumbstickOuterCenterPosition = Vector2.new(
thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x / 2,
thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y / 2
)
local centerDiff = DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenterPosition)
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
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)
-- thumbstick is moving outside our region, need to position outer thumbstick texture carefully (to make look and feel like actual joystick controller)
if DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenter) > thumbstickSize/2 then
local thumbstickInnerCenter = Vector2.new(thumbstickFrame.Position.X.Offset + thumbstickFrame.AbsoluteSize.x/2, thumbstickFrame.Position.Y.Offset + thumbstickFrame.AbsoluteSize.y/2)
local movementVectorUnit = Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y).unit
local thumbstickOuterCenter = Vector2.new(
thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x / 2,
thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y / 2
)
local outerToInnerVectorCurrent = Vector2.new(thumbstickInnerCenter.x - thumbstickOuterCenter.x, thumbstickInnerCenter.y - thumbstickOuterCenter.y)
local outerToInnerVectorCurrentUnit = outerToInnerVectorCurrent.unit
local movementVector = Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y)
-- 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);
-- 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
-- thumbstick is moving outside our region, need to position outer thumbstick texture carefully (to make look and feel like actual joystick controller)
if DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenter) > thumbstickSize / 2 then
local thumbstickInnerCenter = Vector2.new(
thumbstickFrame.Position.X.Offset + thumbstickFrame.AbsoluteSize.x / 2,
thumbstickFrame.Position.Y.Offset + thumbstickFrame.AbsoluteSize.y / 2
)
local movementVectorUnit =
Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y).unit
-- 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
local outerToInnerVectorCurrent = Vector2.new(
thumbstickInnerCenter.x - thumbstickOuterCenter.x,
thumbstickInnerCenter.y - thumbstickOuterCenter.y
)
local outerToInnerVectorCurrentUnit = outerToInnerVectorCurrent.unit
local movementVector =
Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y)
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
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
-- 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
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
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
function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThumbstick)
local thumbstickFrame = Instance.new("Frame")
local thumbstickFrame = Instance.new "Frame"
thumbstickFrame.Name = "ThumbstickFrame"
thumbstickFrame.Active = true
thumbstickFrame.Size = UDim2.new(0,thumbstickSize,0,thumbstickSize)
thumbstickFrame.Size = UDim2.new(0, thumbstickSize, 0, thumbstickSize)
thumbstickFrame.Position = defaultThumbstickPos
thumbstickFrame.BackgroundTransparency = 1
local outerThumbstick = Instance.new("ImageLabel")
local outerThumbstick = Instance.new "ImageLabel"
outerThumbstick.Name = "OuterThumbstick"
outerThumbstick.Image = touchControlsSheet
outerThumbstick.ImageRectOffset = Vector2.new(0,0)
outerThumbstick.ImageRectSize = Vector2.new(220,220)
outerThumbstick.ImageRectOffset = Vector2.new(0, 0)
outerThumbstick.ImageRectSize = Vector2.new(220, 220)
outerThumbstick.BackgroundTransparency = 1
outerThumbstick.Size = UDim2.new(0,thumbstickSize,0,thumbstickSize)
outerThumbstick.Size = UDim2.new(0, thumbstickSize, 0, thumbstickSize)
outerThumbstick.Position = defaultThumbstickPos
outerThumbstick.Parent = Game.CoreGui.RobloxGui
local innerThumbstick = Instance.new("ImageLabel")
local innerThumbstick = Instance.new "ImageLabel"
innerThumbstick.Name = "InnerThumbstick"
innerThumbstick.Image = touchControlsSheet
innerThumbstick.ImageRectOffset = Vector2.new(220,0)
innerThumbstick.ImageRectSize = Vector2.new(111,111)
innerThumbstick.ImageRectOffset = Vector2.new(220, 0)
innerThumbstick.ImageRectSize = Vector2.new(111, 111)
innerThumbstick.BackgroundTransparency = 1
innerThumbstick.Size = UDim2.new(0,thumbstickSize/2,0,thumbstickSize/2)
innerThumbstick.Position = UDim2.new(0, thumbstickFrame.Size.X.Offset/2 - thumbstickSize/4, 0, thumbstickFrame.Size.Y.Offset/2 - thumbstickSize/4)
innerThumbstick.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.Parent = thumbstickFrame
innerThumbstick.ZIndex = 2
@ -203,35 +250,51 @@ function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThu
local userInputSeviceTouchEndedCon = nil
local startInputTracking = function(inputObject)
if thumbstickTouch then return end
if inputObject == cameraTouch then return end
if inputObject == currentJumpTouch then return end
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
if thumbstickTouch then
return
end
if inputObject == cameraTouch then
return
end
if inputObject == currentJumpTouch then
return
end
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
return
end
thumbstickTouch = inputObject
table.insert(thumbstickTouches,thumbstickTouch)
table.insert(thumbstickTouches, thumbstickTouch)
thumbstickFrame.Position = transformFromCenterToTopLeft(thumbstickTouch.Position,thumbstickFrame)
thumbstickFrame.Position = transformFromCenterToTopLeft(thumbstickTouch.Position, thumbstickFrame)
outerThumbstick.Position = thumbstickFrame.Position
userInputServiceTouchMovedCon = userInputService.TouchMoved:connect(function(movedInput)
if movedInput == thumbstickTouch then
local movementVector = nil
if stationaryThumbstick then
movementVector = stationaryThumbstickTouchMove(thumbstickFrame,outerThumbstick,Vector2.new(movedInput.Position.x,movedInput.Position.y))
movementVector = stationaryThumbstickTouchMove(
thumbstickFrame,
outerThumbstick,
Vector2.new(movedInput.Position.x, movedInput.Position.y)
)
else
movementVector = followThumbstickTouchMove(thumbstickFrame,outerThumbstick,Vector2.new(movedInput.Position.x,movedInput.Position.y))
movementVector = followThumbstickTouchMove(
thumbstickFrame,
outerThumbstick,
Vector2.new(movedInput.Position.x, movedInput.Position.y)
)
end
if updateFunction then
updateFunction(movementVector,outerThumbstick.Size.X.Offset/2)
updateFunction(movementVector, outerThumbstick.Size.X.Offset / 2)
end
end
end)
userInputSeviceTouchEndedCon = userInputService.TouchEnded:connect(function(endedInput)
if endedInput == thumbstickTouch then
if updateFunction then
updateFunction(Vector2.new(0,0),1)
updateFunction(Vector2.new(0, 0), 1)
end
userInputSeviceTouchEndedCon:disconnect()
@ -242,7 +305,7 @@ function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThu
for i, object in pairs(thumbstickTouches) do
if object == thumbstickTouch then
table.remove(thumbstickTouches,i)
table.remove(thumbstickTouches, i)
break
end
end
@ -262,31 +325,31 @@ function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThu
return thumbstickFrame
end
function setupCharacterMovement( parentFrame )
function setupCharacterMovement(parentFrame)
local lastMovementVector, lastMaxMovement = nil
local moveCharacterFunc = localPlayer.MoveCharacter
local moveCharacterFunction = function ( movementVector, maxMovement )
local moveCharacterFunction = function(movementVector, maxMovement)
if localPlayer then
if movementOutsideDeadZone(movementVector) then
lastMovementVector = movementVector
lastMaxMovement = maxMovement
-- 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
if movementVector.magnitude/maxMovement > ThumbstickMaxPercentGive then
if movementVector.magnitude / maxMovement > ThumbstickMaxPercentGive then
maxMovement = movementVector.magnitude - 1
end
moveCharacterFunc(localPlayer, movementVector, maxMovement)
else
lastMovementVector = Vector2.new(0,0)
lastMovementVector = Vector2.new(0, 0)
lastMaxMovement = 1
moveCharacterFunc(localPlayer, lastMovementVector, lastMaxMovement)
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
thumbstickPos = UDim2.new(0,(thumbstickSize/2) - 10,1,-thumbstickSize - 20)
thumbstickPos = UDim2.new(0, (thumbstickSize / 2) - 10, 1, -thumbstickSize - 20)
end
local characterThumbstick = constructThumbstick(thumbstickPos, moveCharacterFunction, false)
characterThumbstick.Name = "CharacterThumbstick"
@ -300,36 +363,41 @@ function setupCharacterMovement( parentFrame )
return refreshCharacterMovement
end
function setupJumpButton( parentFrame )
local jumpButton = Instance.new("ImageButton")
function setupJumpButton(parentFrame)
local jumpButton = Instance.new "ImageButton"
jumpButton.Name = "JumpButton"
jumpButton.BackgroundTransparency = 1
jumpButton.Image = touchControlsSheet
jumpButton.ImageRectOffset = Vector2.new(176,222)
jumpButton.ImageRectSize = Vector2.new(174,174)
jumpButton.Size = UDim2.new(0,jumpButtonSize,0,jumpButtonSize)
if isSmallScreenDevice() then
jumpButton.Position = UDim2.new(1, -(jumpButtonSize*2.25), 1, -jumpButtonSize - 20)
jumpButton.ImageRectOffset = Vector2.new(176, 222)
jumpButton.ImageRectSize = Vector2.new(174, 174)
jumpButton.Size = UDim2.new(0, jumpButtonSize, 0, jumpButtonSize)
if isSmallScreenDevice() then
jumpButton.Position = UDim2.new(1, -(jumpButtonSize * 2.25), 1, -jumpButtonSize - 20)
else
jumpButton.Position = UDim2.new(1, -(jumpButtonSize*2.75), 1, -jumpButtonSize - 120)
jumpButton.Position = UDim2.new(1, -(jumpButtonSize * 2.75), 1, -jumpButtonSize - 120)
end
local playerJumpFunc = localPlayer.JumpCharacter
local doJumpLoop = function ()
local doJumpLoop = function()
while currentJumpTouch do
if localPlayer then
playerJumpFunc(localPlayer)
end
wait(1/60)
wait(1 / 60)
end
end
jumpButton.InputBegan:connect(function(inputObject)
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
if currentJumpTouch then return end
if inputObject == cameraTouch then return end
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
return
end
if currentJumpTouch then
return
end
if inputObject == cameraTouch then
return
end
for i, touch in pairs(oldJumpTouches) do
if touch == inputObject then
return
@ -337,25 +405,27 @@ function setupJumpButton( parentFrame )
end
currentJumpTouch = inputObject
jumpButton.ImageRectOffset = Vector2.new(0,222)
jumpButton.ImageRectSize = Vector2.new(174,174)
doJumpLoop()
jumpButton.ImageRectOffset = Vector2.new(0, 222)
jumpButton.ImageRectSize = Vector2.new(174, 174)
doJumpLoop()
end)
jumpButton.InputEnded:connect(function (inputObject)
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
jumpButton.ImageRectOffset = Vector2.new(176,222)
jumpButton.ImageRectSize = Vector2.new(174,174)
jumpButton.InputEnded:connect(function(inputObject)
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
return
end
jumpButton.ImageRectOffset = Vector2.new(176, 222)
jumpButton.ImageRectSize = Vector2.new(174, 174)
if inputObject == currentJumpTouch then
table.insert(oldJumpTouches,currentJumpTouch)
table.insert(oldJumpTouches, currentJumpTouch)
currentJumpTouch = nil
end
end)
userInputService.InputEnded:connect(function ( globalInputObject )
userInputService.InputEnded:connect(function(globalInputObject)
for i, touch in pairs(oldJumpTouches) do
if touch == globalInputObject then
table.remove(oldJumpTouches,i)
table.remove(oldJumpTouches, i)
break
end
end
@ -370,8 +440,10 @@ function setupJumpButton( parentFrame )
jumpButton.Parent = parentFrame
end
function isTouchUsedByJumpButton( touch )
if touch == currentJumpTouch then return true end
function isTouchUsedByJumpButton(touch)
if touch == currentJumpTouch then
return true
end
for i, touchToCompare in pairs(oldJumpTouches) do
if touch == touchToCompare then
return true
@ -409,28 +481,30 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
lastPos = nil
end
local resetPinchState = function ()
local resetPinchState = function()
pinchTouches = {}
lastPinchScale = nil
shouldPinch = false
pinchFrame:Destroy()
pinchFrame = nil
pinchFrame:Destroy()
pinchFrame = nil
end
local startPinch = function(firstTouch, secondTouch)
-- track pinching in new frame
if pinchFrame then pinchFrame:Destroy() end -- make sure we didn't track in any mud
pinchFrame = Instance.new("Frame")
pinchFrame.Name = "PinchFrame"
pinchFrame.BackgroundTransparency = 1
pinchFrame.Parent = parentFrame
pinchFrame.Size = UDim2.new(1,0,1,0)
if pinchFrame then
pinchFrame:Destroy()
end -- make sure we didn't track in any mud
pinchFrame = Instance.new "Frame"
pinchFrame.Name = "PinchFrame"
pinchFrame.BackgroundTransparency = 1
pinchFrame.Parent = parentFrame
pinchFrame.Size = UDim2.new(1, 0, 1, 0)
pinchFrame.InputChanged:connect(function(inputObject)
if not shouldPinch then
resetPinchState()
return
end
pinchFrame.InputChanged:connect(function(inputObject)
if not shouldPinch then
resetPinchState()
return
end
resetCameraRotateState()
if lastPinchScale == nil then -- first pinch move, just set up scale
@ -458,34 +532,38 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
lastPinchScale = newPinchDistance
end
end
end)
pinchFrame.InputEnded:connect(function(inputObject) -- pinch is over, destroy all
if inputObject == firstTouch or inputObject == secondTouch then
resetPinchState()
end)
pinchFrame.InputEnded:connect(function(inputObject) -- pinch is over, destroy all
if inputObject == firstTouch or inputObject == secondTouch then
resetPinchState()
end
end)
end)
end
local pinchGestureReceivedTouch = function(inputObject)
if #pinchTouches < 1 then
table.insert(pinchTouches,inputObject)
pinchTime = tick()
shouldPinch = false
elseif #pinchTouches == 1 then
shouldPinch = ( (tick() - pinchTime) <= PinchZoomDelay )
if #pinchTouches < 1 then
table.insert(pinchTouches, inputObject)
pinchTime = tick()
shouldPinch = false
elseif #pinchTouches == 1 then
shouldPinch = ((tick() - pinchTime) <= PinchZoomDelay)
if shouldPinch then
table.insert(pinchTouches,inputObject)
startPinch(pinchTouches[1], pinchTouches[2])
else -- shouldn't ever get here, but just in case
pinchTouches = {}
end
end
if shouldPinch then
table.insert(pinchTouches, inputObject)
startPinch(pinchTouches[1], pinchTouches[2])
else -- shouldn't ever get here, but just in case
pinchTouches = {}
end
end
end
parentFrame.InputBegan:connect(function (inputObject)
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
if isTouchUsedByJumpButton(inputObject) then return end
parentFrame.InputBegan:connect(function(inputObject)
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
return
end
if isTouchUsedByJumpButton(inputObject) then
return
end
local usedByThumbstick = isTouchUsedByThumbstick(inputObject)
if not usedByThumbstick then
@ -494,15 +572,19 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
if cameraTouch == nil and not usedByThumbstick then
cameraTouch = inputObject
lastPos = Vector2.new(cameraTouch.Position.x,cameraTouch.Position.y)
lastPos = Vector2.new(cameraTouch.Position.x, cameraTouch.Position.y)
lastTick = tick()
end
end)
userInputService.InputChanged:connect(function (inputObject)
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
if cameraTouch ~= inputObject then return end
userInputService.InputChanged:connect(function(inputObject)
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
return
end
if cameraTouch ~= inputObject then
return
end
local newPos = Vector2.new(cameraTouch.Position.x,cameraTouch.Position.y)
local newPos = Vector2.new(cameraTouch.Position.x, cameraTouch.Position.y)
local touchDiff = (lastPos - newPos) * CameraRotateSensitivity
-- first time rotating outside deadzone, just setup for next changed event
@ -518,23 +600,23 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
lastPos = newPos
end
end)
userInputService.InputEnded:connect(function (inputObject)
userInputService.InputEnded:connect(function(inputObject)
if cameraTouch == inputObject or cameraTouch == nil then
resetCameraRotateState()
end
for i, touch in pairs(pinchTouches) do
if touch == inputObject then
table.remove(pinchTouches,i)
table.remove(pinchTouches, i)
end
end
end)
end
function setupTouchControls()
local touchControlFrame = Instance.new("Frame")
local touchControlFrame = Instance.new "Frame"
touchControlFrame.Name = "TouchControlFrame"
touchControlFrame.Size = UDim2.new(1,0,1,0)
touchControlFrame.Size = UDim2.new(1, 0, 1, 0)
touchControlFrame.BackgroundTransparency = 1
touchControlFrame.Parent = Game.CoreGui.RobloxGui
@ -543,7 +625,9 @@ function setupTouchControls()
setupCameraControl(touchControlFrame, refreshCharacterMoveFunc)
userInputService.ProcessedEvent:connect(function(inputObject, processed)
if not processed then return end
if not processed then
return
end
-- kill camera pan if the touch is used by some user controls
if inputObject == cameraTouch and inputObject.UserInputState == Enum.UserInputState.Begin then
@ -552,7 +636,6 @@ function setupTouchControls()
end)
end
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-- Start of Script
@ -561,4 +644,4 @@ if true then --userInputService:IsLuaTouchControls() then
setupTouchControls()
else
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 bottomRightControl = controlFrame:FindFirstChild("BottomRightControl")
local bottomLeftControl = controlFrame:FindFirstChild "BottomLeftControl"
local bottomRightControl = controlFrame:FindFirstChild "BottomRightControl"
local frameTip = Instance.new("TextLabel")
local frameTip = Instance.new "TextLabel"
frameTip.Name = "ToolTip"
frameTip.Text = ""
frameTip.Font = Enum.Font.ArialBold
frameTip.FontSize = Enum.FontSize.Size12
frameTip.TextColor3 = Color3.new(1,1,1)
frameTip.TextColor3 = Color3.new(1, 1, 1)
frameTip.BorderSizePixel = 0
frameTip.ZIndex = 10
frameTip.Size = UDim2.new(2,0,1,0)
frameTip.Position = UDim2.new(1,0,0,0)
frameTip.BackgroundColor3 = Color3.new(0,0,0)
frameTip.Size = UDim2.new(2, 0, 1, 0)
frameTip.Position = UDim2.new(1, 0, 0, 0)
frameTip.BackgroundColor3 = Color3.new(0, 0, 0)
frameTip.BackgroundTransparency = 1
frameTip.TextTransparency = 1
frameTip.TextWrap = true
local inside = Instance.new("BoolValue")
local inside = Instance.new "BoolValue"
inside.Name = "inside"
inside.Value = false
inside.Parent = frameTip
@ -30,7 +30,7 @@ inside.Parent = frameTip
function setUpListeners(frameToListen)
local fadeSpeed = 0.1
frameToListen.Parent.MouseEnter:connect(function()
if frameToListen:FindFirstChild("inside") then
if frameToListen:FindFirstChild "inside" then
frameToListen.inside.Value = true
wait(1.2)
if frameToListen.inside.Value then
@ -47,22 +47,26 @@ function setUpListeners(frameToListen)
killFrame.BackgroundTransparency = 1
killFrame.TextTransparency = 1
end
frameToListen.Parent.MouseLeave:connect(function() killTip(frameToListen) end)
frameToListen.Parent.MouseButton1Click:connect(function() killTip(frameToListen) end)
frameToListen.Parent.MouseLeave:connect(function()
killTip(frameToListen)
end)
frameToListen.Parent.MouseButton1Click:connect(function()
killTip(frameToListen)
end)
end
function createSettingsButtonTip(parent)
if parent == nil then
parent = bottomLeftControl:FindFirstChild("SettingsButton")
parent = bottomLeftControl:FindFirstChild "SettingsButton"
end
local toolTip = frameTip:clone()
toolTip.RobloxLocked = true
toolTip.Text = "Settings/Leave Game"
toolTip.Position = UDim2.new(0,0,0,-18)
toolTip.Size = UDim2.new(0,120,0,20)
toolTip.Parent = parent
setUpListeners(toolTip)
toolTip.RobloxLocked = true
toolTip.Text = "Settings/Leave Game"
toolTip.Position = UDim2.new(0, 0, 0, -18)
toolTip.Size = UDim2.new(0, 120, 0, 20)
toolTip.Parent = parent
setUpListeners(toolTip)
end
wait(5) -- make sure we are loaded in, won't need tool tips for first 5 seconds anyway
@ -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 -------------------------
local bottomLeftChildren = bottomLeftControl:GetChildren()
local hasSettingsTip = false
for i = 1, #bottomLeftChildren do
if bottomLeftChildren[i].Name == "Exit" then
local exitTip = frameTip:clone()
exitTip.RobloxLocked = true
exitTip.Text = "Leave Place"
exitTip.Position = UDim2.new(0,0,-1,0)
exitTip.Size = UDim2.new(1,0,1,0)
exitTip.Parent = bottomLeftChildren[i]
setUpListeners(exitTip)
local exitTip = frameTip:clone()
exitTip.RobloxLocked = true
exitTip.Text = "Leave Place"
exitTip.Position = UDim2.new(0, 0, -1, 0)
exitTip.Size = UDim2.new(1, 0, 1, 0)
exitTip.Parent = bottomLeftChildren[i]
setUpListeners(exitTip)
elseif bottomLeftChildren[i].Name == "SettingsButton" then
hasSettingsTip = true
createSettingsButtonTip(bottomLeftChildren[i])
@ -93,16 +95,16 @@ end
local bottomRightChildren = bottomRightControl:GetChildren()
for i = 1, #bottomRightChildren do
if bottomRightChildren[i].Name:find("Camera") ~= nil then
if bottomRightChildren[i].Name:find "Camera" ~= nil then
local cameraTip = frameTip:clone()
cameraTip.RobloxLocked = true
cameraTip.Text = "Camera View"
if bottomRightChildren[i].Name:find("Zoom") then
cameraTip.Position = UDim2.new(-1,0,-1.5)
if bottomRightChildren[i].Name:find "Zoom" then
cameraTip.Position = UDim2.new(-1, 0, -1.5)
else
cameraTip.Position = UDim2.new(0,0,-1.5,0)
cameraTip.Position = UDim2.new(0, 0, -1.5, 0)
end
cameraTip.Size = UDim2.new(2,0,1.25,0)
cameraTip.Size = UDim2.new(2, 0, 1.25, 0)
cameraTip.Parent = bottomRightChildren[i]
setUpListeners(cameraTip)
end

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -1,8 +1,8 @@
--build our gui
local popupFrame = Instance.new("Frame")
popupFrame.Position = UDim2.new(0.5,-165,0.5,-175)
popupFrame.Size = UDim2.new(0,330,0,350)
local popupFrame = Instance.new "Frame"
popupFrame.Position = UDim2.new(0.5, -165, 0.5, -175)
popupFrame.Size = UDim2.new(0, 330, 0, 350)
popupFrame.Style = Enum.FrameStyle.RobloxRound
popupFrame.ZIndex = 4
popupFrame.Name = "Popup"
@ -10,26 +10,26 @@ popupFrame.Visible = false
popupFrame.Parent = script.Parent
local darken = popupFrame:clone()
darken.Size = UDim2.new(1,16,1,16)
darken.Position = UDim2.new(0,-8,0,-8)
darken.Size = UDim2.new(1, 16, 1, 16)
darken.Position = UDim2.new(0, -8, 0, -8)
darken.Name = "Darken"
darken.ZIndex = 1
darken.Parent = popupFrame
local acceptButton = Instance.new("TextButton")
acceptButton.Position = UDim2.new(0,20,0,270)
acceptButton.Size = UDim2.new(0,100,0,50)
local acceptButton = Instance.new "TextButton"
acceptButton.Position = UDim2.new(0, 20, 0, 270)
acceptButton.Size = UDim2.new(0, 100, 0, 50)
acceptButton.Font = Enum.Font.ArialBold
acceptButton.FontSize = Enum.FontSize.Size24
acceptButton.Style = Enum.ButtonStyle.RobloxButton
acceptButton.TextColor3 = Color3.new(248/255,248/255,248/255)
acceptButton.TextColor3 = Color3.new(248 / 255, 248 / 255, 248 / 255)
acceptButton.Text = "Yes"
acceptButton.ZIndex = 5
acceptButton.Name = "AcceptButton"
acceptButton.Parent = popupFrame
local declineButton = acceptButton:clone()
declineButton.Position = UDim2.new(1,-120,0,270)
declineButton.Position = UDim2.new(1, -120, 0, 270)
declineButton.Text = "No"
declineButton.Name = "DeclineButton"
declineButton.Parent = popupFrame
@ -37,36 +37,36 @@ declineButton.Parent = popupFrame
local okButton = acceptButton:clone()
okButton.Name = "OKButton"
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.Parent = popupFrame
local popupImage = Instance.new("ImageLabel")
local popupImage = Instance.new "ImageLabel"
popupImage.BackgroundTransparency = 1
popupImage.Position = UDim2.new(0.5,-140,0,0)
popupImage.Size = UDim2.new(0,280,0,280)
popupImage.Position = UDim2.new(0.5, -140, 0, 0)
popupImage.Size = UDim2.new(0, 280, 0, 280)
popupImage.ZIndex = 3
popupImage.Name = "PopupImage"
popupImage.Parent = popupFrame
local backing = Instance.new("ImageLabel")
local backing = Instance.new "ImageLabel"
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.Name = "Backing"
backing.ZIndex = 2
backing.Parent = popupImage
local popupText = Instance.new("TextLabel")
local popupText = Instance.new "TextLabel"
popupText.Name = "PopupText"
popupText.Size = UDim2.new(1,0,0.8,0)
popupText.Size = UDim2.new(1, 0, 0.8, 0)
popupText.Font = Enum.Font.ArialBold
popupText.FontSize = Enum.FontSize.Size36
popupText.BackgroundTransparency = 1
popupText.Text = "Hello I'm a popup"
popupText.TextColor3 = Color3.new(248/255,248/255,248/255)
popupText.TextColor3 = Color3.new(248 / 255, 248 / 255, 248 / 255)
popupText.TextWrap = true
popupText.ZIndex = 5
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)
local deepakTestingPlace = 3569749
local sc = game:GetService("ScriptContext")
local sc = game:GetService "ScriptContext"
local tries = 0
while not sc and tries < 3 do
tries = tries + 1
sc = game:GetService("ScriptContext")
sc = game:GetService "ScriptContext"
wait(0.2)
end
if sc then
sc:RegisterLibrary("Libraries/RbxGui", "45284430")
sc:RegisterLibrary("Libraries/RbxGear", "45374389")
@ -22,5 +22,5 @@ if sc then
sc:RegisterLibrary("Libraries/RbxStamper", "73157242")
sc:LibraryRegistrationComplete()
else
print("failed to find script context, libraries did not load")
print "failed to find script context, libraries did not load"
end

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