Fuck with the CoreScripts despite task telling me very clearly not to fuck with the corescripts
This commit is contained in:
parent
26dfa13ee3
commit
bb1eb0faa6
760
107893730.lua
760
107893730.lua
File diff suppressed because it is too large
Load Diff
100
152908679.lua
100
152908679.lua
|
|
@ -4,7 +4,7 @@
|
||||||
-- Essentially a user can bind a lua function to a key code, input type (mousebutton1 etc.) and this
|
-- Essentially a user can bind a lua function to a key code, input type (mousebutton1 etc.) and this
|
||||||
|
|
||||||
-- Variables
|
-- Variables
|
||||||
local contextActionService = Game:GetService("ContextActionService")
|
local contextActionService = Game:GetService "ContextActionService"
|
||||||
local isTouchDevice = Game:GetService("UserInputService").TouchEnabled
|
local isTouchDevice = Game:GetService("UserInputService").TouchEnabled
|
||||||
local functionTable = {}
|
local functionTable = {}
|
||||||
local buttonVector = {}
|
local buttonVector = {}
|
||||||
|
|
@ -16,15 +16,15 @@ local ContextUpImage = "http://www.banland.xyz/asset/?id=97166444"
|
||||||
|
|
||||||
local oldTouches = {}
|
local oldTouches = {}
|
||||||
|
|
||||||
local buttonPositionTable = {
|
local buttonPositionTable = {
|
||||||
[1] = UDim2.new(0,123,0,70),
|
[1] = UDim2.new(0, 123, 0, 70),
|
||||||
[2] = UDim2.new(0,30,0,60),
|
[2] = UDim2.new(0, 30, 0, 60),
|
||||||
[3] = UDim2.new(0,180,0,160),
|
[3] = UDim2.new(0, 180, 0, 160),
|
||||||
[4] = UDim2.new(0,85,0,-25),
|
[4] = UDim2.new(0, 85, 0, -25),
|
||||||
[5] = UDim2.new(0,185,0,-25),
|
[5] = UDim2.new(0, 185, 0, -25),
|
||||||
[6] = UDim2.new(0,185,0,260),
|
[6] = UDim2.new(0, 185, 0, 260),
|
||||||
[7] = UDim2.new(0,216,0,65)
|
[7] = UDim2.new(0, 216, 0, 65),
|
||||||
}
|
}
|
||||||
local maxButtons = #buttonPositionTable
|
local maxButtons = #buttonPositionTable
|
||||||
|
|
||||||
-- Preload images
|
-- Preload images
|
||||||
|
|
@ -41,13 +41,13 @@ end
|
||||||
|
|
||||||
function createContextActionGui()
|
function createContextActionGui()
|
||||||
if not buttonScreenGui and isTouchDevice then
|
if not buttonScreenGui and isTouchDevice then
|
||||||
buttonScreenGui = Instance.new("ScreenGui")
|
buttonScreenGui = Instance.new "ScreenGui"
|
||||||
buttonScreenGui.Name = "ContextActionGui"
|
buttonScreenGui.Name = "ContextActionGui"
|
||||||
|
|
||||||
buttonFrame = Instance.new("Frame")
|
buttonFrame = Instance.new "Frame"
|
||||||
buttonFrame.BackgroundTransparency = 1
|
buttonFrame.BackgroundTransparency = 1
|
||||||
buttonFrame.Size = UDim2.new(0.3,0,0.5,0)
|
buttonFrame.Size = UDim2.new(0.3, 0, 0.5, 0)
|
||||||
buttonFrame.Position = UDim2.new(0.7,0,0.5,0)
|
buttonFrame.Position = UDim2.new(0.7, 0, 0.5, 0)
|
||||||
buttonFrame.Name = "ContextButtonFrame"
|
buttonFrame.Name = "ContextButtonFrame"
|
||||||
buttonFrame.Parent = buttonScreenGui
|
buttonFrame.Parent = buttonScreenGui
|
||||||
end
|
end
|
||||||
|
|
@ -66,7 +66,7 @@ function setButtonSizeAndPosition(object)
|
||||||
xOffset = 40
|
xOffset = 40
|
||||||
end
|
end
|
||||||
|
|
||||||
object.Size = UDim2.new(0,buttonSize,0,buttonSize)
|
object.Size = UDim2.new(0, buttonSize, 0, buttonSize)
|
||||||
end
|
end
|
||||||
|
|
||||||
function contextButtonDown(button, inputObject, actionName)
|
function contextButtonDown(button, inputObject, actionName)
|
||||||
|
|
@ -85,7 +85,10 @@ end
|
||||||
|
|
||||||
function contextButtonUp(button, inputObject, actionName)
|
function contextButtonUp(button, inputObject, actionName)
|
||||||
button.Image = ContextUpImage
|
button.Image = ContextUpImage
|
||||||
if inputObject.UserInputType == Enum.UserInputType.Touch and inputObject.UserInputState == Enum.UserInputState.End then
|
if
|
||||||
|
inputObject.UserInputType == Enum.UserInputType.Touch
|
||||||
|
and inputObject.UserInputState == Enum.UserInputState.End
|
||||||
|
then
|
||||||
contextActionService:CallFunction(actionName, Enum.UserInputState.End, inputObject)
|
contextActionService:CallFunction(actionName, Enum.UserInputState.End, inputObject)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -94,26 +97,27 @@ function isSmallScreenDevice()
|
||||||
return Game:GetService("GuiService"):GetScreenResolution().y <= 320
|
return Game:GetService("GuiService"):GetScreenResolution().y <= 320
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function createNewButton(actionName, functionInfoTable)
|
function createNewButton(actionName, functionInfoTable)
|
||||||
local contextButton = Instance.new("ImageButton")
|
local contextButton = Instance.new "ImageButton"
|
||||||
contextButton.Name = "ContextActionButton"
|
contextButton.Name = "ContextActionButton"
|
||||||
contextButton.BackgroundTransparency = 1
|
contextButton.BackgroundTransparency = 1
|
||||||
contextButton.Size = UDim2.new(0,90,0,90)
|
contextButton.Size = UDim2.new(0, 90, 0, 90)
|
||||||
contextButton.Active = true
|
contextButton.Active = true
|
||||||
if isSmallScreenDevice() then
|
if isSmallScreenDevice() then
|
||||||
contextButton.Size = UDim2.new(0,70,0,70)
|
contextButton.Size = UDim2.new(0, 70, 0, 70)
|
||||||
end
|
end
|
||||||
contextButton.Image = ContextUpImage
|
contextButton.Image = ContextUpImage
|
||||||
contextButton.Parent = buttonFrame
|
contextButton.Parent = buttonFrame
|
||||||
|
|
||||||
local currentButtonTouch = nil
|
local currentButtonTouch = nil
|
||||||
|
|
||||||
Game:GetService("UserInputService").InputEnded:connect(function ( inputObject )
|
Game:GetService("UserInputService").InputEnded:connect(function(inputObject)
|
||||||
oldTouches[inputObject] = nil
|
oldTouches[inputObject] = nil
|
||||||
end)
|
end)
|
||||||
contextButton.InputBegan:connect(function(inputObject)
|
contextButton.InputBegan:connect(function(inputObject)
|
||||||
if oldTouches[inputObject] then return end
|
if oldTouches[inputObject] then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
if inputObject.UserInputState == Enum.UserInputState.Begin and currentButtonTouch == nil then
|
if inputObject.UserInputState == Enum.UserInputState.Begin and currentButtonTouch == nil then
|
||||||
currentButtonTouch = inputObject
|
currentButtonTouch = inputObject
|
||||||
|
|
@ -121,21 +125,29 @@ function createNewButton(actionName, functionInfoTable)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
contextButton.InputChanged:connect(function(inputObject)
|
contextButton.InputChanged:connect(function(inputObject)
|
||||||
if oldTouches[inputObject] then return end
|
if oldTouches[inputObject] then
|
||||||
if currentButtonTouch ~= inputObject then return end
|
return
|
||||||
|
end
|
||||||
|
if currentButtonTouch ~= inputObject then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
contextButtonMoved(contextButton, inputObject, actionName)
|
contextButtonMoved(contextButton, inputObject, actionName)
|
||||||
end)
|
end)
|
||||||
contextButton.InputEnded:connect(function(inputObject)
|
contextButton.InputEnded:connect(function(inputObject)
|
||||||
if oldTouches[inputObject] then return end
|
if oldTouches[inputObject] then
|
||||||
if currentButtonTouch ~= inputObject then return end
|
return
|
||||||
|
end
|
||||||
|
if currentButtonTouch ~= inputObject then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
currentButtonTouch = nil
|
currentButtonTouch = nil
|
||||||
oldTouches[inputObject] = true
|
oldTouches[inputObject] = true
|
||||||
contextButtonUp(contextButton, inputObject, actionName)
|
contextButtonUp(contextButton, inputObject, actionName)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local actionIcon = Instance.new("ImageLabel")
|
local actionIcon = Instance.new "ImageLabel"
|
||||||
actionIcon.Name = "ActionIcon"
|
actionIcon.Name = "ActionIcon"
|
||||||
actionIcon.Position = UDim2.new(0.175, 0, 0.175, 0)
|
actionIcon.Position = UDim2.new(0.175, 0, 0.175, 0)
|
||||||
actionIcon.Size = UDim2.new(0.65, 0, 0.65, 0)
|
actionIcon.Size = UDim2.new(0.65, 0, 0.65, 0)
|
||||||
|
|
@ -145,12 +157,12 @@ function createNewButton(actionName, functionInfoTable)
|
||||||
end
|
end
|
||||||
actionIcon.Parent = contextButton
|
actionIcon.Parent = contextButton
|
||||||
|
|
||||||
local actionTitle = Instance.new("TextLabel")
|
local actionTitle = Instance.new "TextLabel"
|
||||||
actionTitle.Name = "ActionTitle"
|
actionTitle.Name = "ActionTitle"
|
||||||
actionTitle.Size = UDim2.new(1,0,1,0)
|
actionTitle.Size = UDim2.new(1, 0, 1, 0)
|
||||||
actionTitle.BackgroundTransparency = 1
|
actionTitle.BackgroundTransparency = 1
|
||||||
actionTitle.Font = Enum.Font.SourceSansBold
|
actionTitle.Font = Enum.Font.SourceSansBold
|
||||||
actionTitle.TextColor3 = Color3.new(1,1,1)
|
actionTitle.TextColor3 = Color3.new(1, 1, 1)
|
||||||
actionTitle.TextStrokeTransparency = 0
|
actionTitle.TextStrokeTransparency = 0
|
||||||
actionTitle.FontSize = Enum.FontSize.Size18
|
actionTitle.FontSize = Enum.FontSize.Size18
|
||||||
actionTitle.TextWrapped = true
|
actionTitle.TextWrapped = true
|
||||||
|
|
@ -163,11 +175,11 @@ function createNewButton(actionName, functionInfoTable)
|
||||||
return contextButton
|
return contextButton
|
||||||
end
|
end
|
||||||
|
|
||||||
function createButton( actionName, functionInfoTable )
|
function createButton(actionName, functionInfoTable)
|
||||||
local button = createNewButton(actionName, functionInfoTable)
|
local button = createNewButton(actionName, functionInfoTable)
|
||||||
|
|
||||||
local position = nil
|
local position = nil
|
||||||
for i = 1,#buttonVector do
|
for i = 1, #buttonVector do
|
||||||
if buttonVector[i] == "empty" then
|
if buttonVector[i] == "empty" then
|
||||||
position = i
|
position = i
|
||||||
break
|
break
|
||||||
|
|
@ -194,14 +206,16 @@ function createButton( actionName, functionInfoTable )
|
||||||
end
|
end
|
||||||
|
|
||||||
function removeAction(actionName)
|
function removeAction(actionName)
|
||||||
if not functionTable[actionName] then return end
|
if not functionTable[actionName] then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local actionButton = functionTable[actionName]["button"]
|
local actionButton = functionTable[actionName]["button"]
|
||||||
|
|
||||||
if actionButton then
|
if actionButton then
|
||||||
actionButton.Parent = nil
|
actionButton.Parent = nil
|
||||||
|
|
||||||
for i = 1,#buttonVector do
|
for i = 1, #buttonVector do
|
||||||
if buttonVector[i] == actionButton then
|
if buttonVector[i] == actionButton then
|
||||||
buttonVector[i] = "empty"
|
buttonVector[i] = "empty"
|
||||||
break
|
break
|
||||||
|
|
@ -214,11 +228,11 @@ function removeAction(actionName)
|
||||||
functionTable[actionName] = nil
|
functionTable[actionName] = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
function addAction(actionName,createTouchButton,functionInfoTable)
|
function addAction(actionName, createTouchButton, functionInfoTable)
|
||||||
if functionTable[actionName] then
|
if functionTable[actionName] then
|
||||||
removeAction(actionName)
|
removeAction(actionName)
|
||||||
end
|
end
|
||||||
functionTable[actionName] = {functionInfoTable}
|
functionTable[actionName] = { functionInfoTable }
|
||||||
if createTouchButton and isTouchDevice then
|
if createTouchButton and isTouchDevice then
|
||||||
createContextActionGui()
|
createContextActionGui()
|
||||||
createButton(actionName, functionInfoTable)
|
createButton(actionName, functionInfoTable)
|
||||||
|
|
@ -226,7 +240,7 @@ function addAction(actionName,createTouchButton,functionInfoTable)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Connections
|
-- Connections
|
||||||
contextActionService.BoundActionChanged:connect( function(actionName, changeName, changeTable)
|
contextActionService.BoundActionChanged:connect(function(actionName, changeName, changeTable)
|
||||||
if functionTable[actionName] and changeTable then
|
if functionTable[actionName] and changeTable then
|
||||||
local button = functionTable[actionName]["button"]
|
local button = functionTable[actionName]["button"]
|
||||||
if button then
|
if button then
|
||||||
|
|
@ -243,15 +257,15 @@ contextActionService.BoundActionChanged:connect( function(actionName, changeName
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
contextActionService.BoundActionAdded:connect( function(actionName, createTouchButton, functionInfoTable)
|
contextActionService.BoundActionAdded:connect(function(actionName, createTouchButton, functionInfoTable)
|
||||||
addAction(actionName, createTouchButton, functionInfoTable)
|
addAction(actionName, createTouchButton, functionInfoTable)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
contextActionService.BoundActionRemoved:connect( function(actionName, functionInfoTable)
|
contextActionService.BoundActionRemoved:connect(function(actionName, functionInfoTable)
|
||||||
removeAction(actionName)
|
removeAction(actionName)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
contextActionService.GetActionButtonEvent:connect( function(actionName)
|
contextActionService.GetActionButtonEvent:connect(function(actionName)
|
||||||
if functionTable[actionName] then
|
if functionTable[actionName] then
|
||||||
contextActionService:FireActionButtonFoundSignal(actionName, functionTable[actionName]["button"])
|
contextActionService:FireActionButtonFoundSignal(actionName, functionTable[actionName]["button"])
|
||||||
end
|
end
|
||||||
|
|
@ -260,5 +274,5 @@ end)
|
||||||
-- make sure any bound data before we setup connections is handled
|
-- make sure any bound data before we setup connections is handled
|
||||||
local boundActions = contextActionService:GetAllBoundActionInfo()
|
local boundActions = contextActionService:GetAllBoundActionInfo()
|
||||||
for actionName, actionData in pairs(boundActions) do
|
for actionName, actionData in pairs(boundActions) do
|
||||||
addAction(actionName,actionData["createTouchButton"],actionData)
|
addAction(actionName, actionData["createTouchButton"], actionData)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
457
153556783.lua
457
153556783.lua
|
|
@ -6,21 +6,23 @@
|
||||||
while not Game do
|
while not Game do
|
||||||
wait()
|
wait()
|
||||||
end
|
end
|
||||||
while not Game:FindFirstChild("Players") do
|
while not Game:FindFirstChild "Players" do
|
||||||
wait()
|
wait()
|
||||||
end
|
end
|
||||||
while not Game.Players.LocalPlayer do
|
while not Game.Players.LocalPlayer do
|
||||||
wait()
|
wait()
|
||||||
end
|
end
|
||||||
while not Game:FindFirstChild("CoreGui") do
|
while not Game:FindFirstChild "CoreGui" do
|
||||||
wait()
|
wait()
|
||||||
end
|
end
|
||||||
while not Game.CoreGui:FindFirstChild("RobloxGui") do
|
while not Game.CoreGui:FindFirstChild "RobloxGui" do
|
||||||
wait()
|
wait()
|
||||||
end
|
end
|
||||||
|
|
||||||
local userInputService = Game:GetService("UserInputService")
|
local userInputService = Game:GetService "UserInputService"
|
||||||
local success = pcall(function() userInputService:IsLuaTouchControls() end)
|
local success = pcall(function()
|
||||||
|
userInputService:IsLuaTouchControls()
|
||||||
|
end)
|
||||||
if not success then
|
if not success then
|
||||||
script:Destroy()
|
script:Destroy()
|
||||||
end
|
end
|
||||||
|
|
@ -34,9 +36,8 @@ function isSmallScreenDevice()
|
||||||
end
|
end
|
||||||
|
|
||||||
local localPlayer = Game.Players.LocalPlayer
|
local localPlayer = Game.Players.LocalPlayer
|
||||||
local thumbstickInactiveAlpha = 0.3
|
|
||||||
local thumbstickSize = 120
|
local thumbstickSize = 120
|
||||||
if isSmallScreenDevice() then
|
if isSmallScreenDevice() then
|
||||||
thumbstickSize = 70
|
thumbstickSize = 70
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -46,7 +47,7 @@ local ThumbstickMaxPercentGive = 0.92
|
||||||
local thumbstickTouches = {}
|
local thumbstickTouches = {}
|
||||||
|
|
||||||
local jumpButtonSize = 90
|
local jumpButtonSize = 90
|
||||||
if isSmallScreenDevice() then
|
if isSmallScreenDevice() then
|
||||||
jumpButtonSize = 70
|
jumpButtonSize = 70
|
||||||
end
|
end
|
||||||
local oldJumpTouches = {}
|
local oldJumpTouches = {}
|
||||||
|
|
@ -58,7 +59,6 @@ local CameraZoomSensitivity = 0.03
|
||||||
local PinchZoomDelay = 0.2
|
local PinchZoomDelay = 0.2
|
||||||
local cameraTouch = nil
|
local cameraTouch = nil
|
||||||
|
|
||||||
|
|
||||||
-- make sure all of our images are good to go
|
-- make sure all of our images are good to go
|
||||||
Game:GetService("ContentProvider"):Preload(touchControlsSheet)
|
Game:GetService("ContentProvider"):Preload(touchControlsSheet)
|
||||||
|
|
||||||
|
|
@ -67,134 +67,181 @@ Game:GetService("ContentProvider"):Preload(touchControlsSheet)
|
||||||
-- Functions
|
-- Functions
|
||||||
|
|
||||||
function DistanceBetweenTwoPoints(point1, point2)
|
function DistanceBetweenTwoPoints(point1, point2)
|
||||||
local dx = point2.x - point1.x
|
local dx = point2.x - point1.x
|
||||||
local dy = point2.y - point1.y
|
local dy = point2.y - point1.y
|
||||||
return math.sqrt( (dx*dx) + (dy*dy) )
|
return math.sqrt((dx * dx) + (dy * dy))
|
||||||
end
|
end
|
||||||
|
|
||||||
function transformFromCenterToTopLeft(pointToTranslate, guiObject)
|
function transformFromCenterToTopLeft(pointToTranslate, guiObject)
|
||||||
return UDim2.new(0,pointToTranslate.x - guiObject.AbsoluteSize.x/2,0,pointToTranslate.y - guiObject.AbsoluteSize.y/2)
|
return UDim2.new(
|
||||||
|
0,
|
||||||
|
pointToTranslate.x - guiObject.AbsoluteSize.x / 2,
|
||||||
|
0,
|
||||||
|
pointToTranslate.y - guiObject.AbsoluteSize.y / 2
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
function rotatePointAboutLocation(pointToRotate, pointToRotateAbout, radians)
|
function rotatePointAboutLocation(pointToRotate, pointToRotateAbout, radians)
|
||||||
local sinAnglePercent = math.sin(radians)
|
local sinAnglePercent = math.sin(radians)
|
||||||
local cosAnglePercent = math.cos(radians)
|
local cosAnglePercent = math.cos(radians)
|
||||||
|
|
||||||
local transformedPoint = pointToRotate
|
|
||||||
|
|
||||||
-- translate point back to origin:
|
|
||||||
transformedPoint = Vector2.new(transformedPoint.x - pointToRotateAbout.x, transformedPoint.y - pointToRotateAbout.y)
|
|
||||||
|
|
||||||
-- rotate point
|
|
||||||
local xNew = transformedPoint.x * cosAnglePercent - transformedPoint.y * sinAnglePercent
|
|
||||||
local yNew = transformedPoint.x * sinAnglePercent + transformedPoint.y * cosAnglePercent
|
|
||||||
|
|
||||||
-- translate point back:
|
|
||||||
transformedPoint = Vector2.new(xNew + pointToRotateAbout.x, yNew + pointToRotateAbout.y)
|
|
||||||
|
|
||||||
return transformedPoint
|
local transformedPoint = pointToRotate
|
||||||
|
|
||||||
|
-- translate point back to origin:
|
||||||
|
transformedPoint = Vector2.new(transformedPoint.x - pointToRotateAbout.x, transformedPoint.y - pointToRotateAbout.y)
|
||||||
|
|
||||||
|
-- rotate point
|
||||||
|
local xNew = transformedPoint.x * cosAnglePercent - transformedPoint.y * sinAnglePercent
|
||||||
|
local yNew = transformedPoint.x * sinAnglePercent + transformedPoint.y * cosAnglePercent
|
||||||
|
|
||||||
|
-- translate point back:
|
||||||
|
transformedPoint = Vector2.new(xNew + pointToRotateAbout.x, yNew + pointToRotateAbout.y)
|
||||||
|
|
||||||
|
return transformedPoint
|
||||||
end
|
end
|
||||||
|
|
||||||
function dotProduct(v1,v2)
|
function dotProduct(v1, v2)
|
||||||
return ((v1.x*v2.x) + (v1.y*v2.y))
|
return ((v1.x * v2.x) + (v1.y * v2.y))
|
||||||
end
|
end
|
||||||
|
|
||||||
function stationaryThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation)
|
function stationaryThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation)
|
||||||
local thumbstickOuterCenterPosition = Vector2.new(thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x/2, thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y/2)
|
local thumbstickOuterCenterPosition = Vector2.new(
|
||||||
local centerDiff = DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenterPosition)
|
thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x / 2,
|
||||||
|
thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y / 2
|
||||||
-- thumbstick is moving outside our region, need to cap its distance
|
)
|
||||||
if centerDiff > (thumbstickSize/2) then
|
local centerDiff = DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenterPosition)
|
||||||
local thumbVector = Vector2.new(touchLocation.x - thumbstickOuterCenterPosition.x,touchLocation.y - thumbstickOuterCenterPosition.y);
|
|
||||||
local normal = thumbVector.unit
|
|
||||||
if normal.x == math.nan or normal.x == math.inf then
|
|
||||||
normal = Vector2.new(0,normal.y)
|
|
||||||
end
|
|
||||||
if normal.y == math.nan or normal.y == math.inf then
|
|
||||||
normal = Vector2.new(normal.x,0)
|
|
||||||
end
|
|
||||||
|
|
||||||
local newThumbstickInnerPosition = thumbstickOuterCenterPosition + (normal * (thumbstickSize/2))
|
|
||||||
thumbstickFrame.Position = transformFromCenterToTopLeft(newThumbstickInnerPosition, thumbstickFrame)
|
|
||||||
else
|
|
||||||
thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation,thumbstickFrame)
|
|
||||||
end
|
|
||||||
|
|
||||||
return Vector2.new(thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset)
|
-- thumbstick is moving outside our region, need to cap its distance
|
||||||
|
if centerDiff > (thumbstickSize / 2) then
|
||||||
|
local thumbVector = Vector2.new(
|
||||||
|
touchLocation.x - thumbstickOuterCenterPosition.x,
|
||||||
|
touchLocation.y - thumbstickOuterCenterPosition.y
|
||||||
|
)
|
||||||
|
local normal = thumbVector.unit
|
||||||
|
if normal.x == math.nan or normal.x == math.inf then
|
||||||
|
normal = Vector2.new(0, normal.y)
|
||||||
|
end
|
||||||
|
if normal.y == math.nan or normal.y == math.inf then
|
||||||
|
normal = Vector2.new(normal.x, 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
local newThumbstickInnerPosition = thumbstickOuterCenterPosition + (normal * (thumbstickSize / 2))
|
||||||
|
thumbstickFrame.Position = transformFromCenterToTopLeft(newThumbstickInnerPosition, thumbstickFrame)
|
||||||
|
else
|
||||||
|
thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation, thumbstickFrame)
|
||||||
|
end
|
||||||
|
|
||||||
|
return Vector2.new(
|
||||||
|
thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,
|
||||||
|
thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
function followThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation)
|
function followThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation)
|
||||||
local thumbstickOuterCenter = Vector2.new(thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x/2, thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y/2)
|
local thumbstickOuterCenter = Vector2.new(
|
||||||
|
thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x / 2,
|
||||||
-- thumbstick is moving outside our region, need to position outer thumbstick texture carefully (to make look and feel like actual joystick controller)
|
thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y / 2
|
||||||
if DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenter) > thumbstickSize/2 then
|
)
|
||||||
local thumbstickInnerCenter = Vector2.new(thumbstickFrame.Position.X.Offset + thumbstickFrame.AbsoluteSize.x/2, thumbstickFrame.Position.Y.Offset + thumbstickFrame.AbsoluteSize.y/2)
|
|
||||||
local movementVectorUnit = Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y).unit
|
|
||||||
|
|
||||||
local outerToInnerVectorCurrent = Vector2.new(thumbstickInnerCenter.x - thumbstickOuterCenter.x, thumbstickInnerCenter.y - thumbstickOuterCenter.y)
|
-- thumbstick is moving outside our region, need to position outer thumbstick texture carefully (to make look and feel like actual joystick controller)
|
||||||
local outerToInnerVectorCurrentUnit = outerToInnerVectorCurrent.unit
|
if DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenter) > thumbstickSize / 2 then
|
||||||
local movementVector = Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y)
|
local thumbstickInnerCenter = Vector2.new(
|
||||||
|
thumbstickFrame.Position.X.Offset + thumbstickFrame.AbsoluteSize.x / 2,
|
||||||
-- First, find the angle between the new thumbstick movement vector,
|
thumbstickFrame.Position.Y.Offset + thumbstickFrame.AbsoluteSize.y / 2
|
||||||
-- and the vector between thumbstick inner and thumbstick outer.
|
)
|
||||||
-- We will use this to pivot thumbstick outer around thumbstick inner, gives a nice joystick feel
|
local movementVectorUnit =
|
||||||
local crossOuterToInnerWithMovement = (outerToInnerVectorCurrentUnit.x * movementVectorUnit.y) - (outerToInnerVectorCurrentUnit.y * movementVectorUnit.x)
|
Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y).unit
|
||||||
local angle = math.atan2(crossOuterToInnerWithMovement, dotProduct(outerToInnerVectorCurrentUnit, movementVectorUnit))
|
|
||||||
local anglePercent = angle * math.min( (movementVector.magnitude)/(outerToInnerVectorCurrent.magnitude), 1.0);
|
|
||||||
|
|
||||||
-- If angle is significant, rotate about the inner thumbsticks current center
|
|
||||||
if math.abs(anglePercent) > 0.00001 then
|
|
||||||
local outerThumbCenter = rotatePointAboutLocation(thumbstickOuterCenter, thumbstickInnerCenter, anglePercent)
|
|
||||||
thumbstickOuter.Position = transformFromCenterToTopLeft(Vector2.new(outerThumbCenter.x,outerThumbCenter.y), thumbstickOuter)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- now just translate outer thumbstick to make sure it stays nears inner thumbstick
|
local outerToInnerVectorCurrent = Vector2.new(
|
||||||
thumbstickOuter.Position = UDim2.new(0,thumbstickOuter.Position.X.Offset+movementVector.x,0,thumbstickOuter.Position.Y.Offset+movementVector.y)
|
thumbstickInnerCenter.x - thumbstickOuterCenter.x,
|
||||||
end
|
thumbstickInnerCenter.y - thumbstickOuterCenter.y
|
||||||
|
)
|
||||||
|
local outerToInnerVectorCurrentUnit = outerToInnerVectorCurrent.unit
|
||||||
|
local movementVector =
|
||||||
|
Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y)
|
||||||
|
|
||||||
thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation,thumbstickFrame)
|
-- First, find the angle between the new thumbstick movement vector,
|
||||||
|
-- and the vector between thumbstick inner and thumbstick outer.
|
||||||
|
-- We will use this to pivot thumbstick outer around thumbstick inner, gives a nice joystick feel
|
||||||
|
local crossOuterToInnerWithMovement = (outerToInnerVectorCurrentUnit.x * movementVectorUnit.y)
|
||||||
|
- (outerToInnerVectorCurrentUnit.y * movementVectorUnit.x)
|
||||||
|
local angle =
|
||||||
|
math.atan2(crossOuterToInnerWithMovement, dotProduct(outerToInnerVectorCurrentUnit, movementVectorUnit))
|
||||||
|
local anglePercent = angle * math.min(movementVector.magnitude / outerToInnerVectorCurrent.magnitude, 1.0)
|
||||||
|
|
||||||
-- a bit of error checking to make sure thumbsticks stay close to eachother
|
-- If angle is significant, rotate about the inner thumbsticks current center
|
||||||
thumbstickFramePosition = Vector2.new(thumbstickFrame.Position.X.Offset,thumbstickFrame.Position.Y.Offset)
|
if math.abs(anglePercent) > 0.00001 then
|
||||||
thumbstickOuterPosition = Vector2.new(thumbstickOuter.Position.X.Offset,thumbstickOuter.Position.Y.Offset)
|
local outerThumbCenter =
|
||||||
if DistanceBetweenTwoPoints(thumbstickFramePosition, thumbstickOuterPosition) > thumbstickSize/2 then
|
rotatePointAboutLocation(thumbstickOuterCenter, thumbstickInnerCenter, anglePercent)
|
||||||
local vectorWithLength = (thumbstickOuterPosition - thumbstickFramePosition).unit * thumbstickSize/2
|
thumbstickOuter.Position =
|
||||||
thumbstickOuter.Position = UDim2.new(0,thumbstickFramePosition.x + vectorWithLength.x,0,thumbstickFramePosition.y + vectorWithLength.y)
|
transformFromCenterToTopLeft(Vector2.new(outerThumbCenter.x, outerThumbCenter.y), thumbstickOuter)
|
||||||
end
|
end
|
||||||
|
|
||||||
return Vector2.new(thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset)
|
-- now just translate outer thumbstick to make sure it stays nears inner thumbstick
|
||||||
|
thumbstickOuter.Position = UDim2.new(
|
||||||
|
0,
|
||||||
|
thumbstickOuter.Position.X.Offset + movementVector.x,
|
||||||
|
0,
|
||||||
|
thumbstickOuter.Position.Y.Offset + movementVector.y
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation, thumbstickFrame)
|
||||||
|
|
||||||
|
-- a bit of error checking to make sure thumbsticks stay close to eachother
|
||||||
|
thumbstickFramePosition = Vector2.new(thumbstickFrame.Position.X.Offset, thumbstickFrame.Position.Y.Offset)
|
||||||
|
thumbstickOuterPosition = Vector2.new(thumbstickOuter.Position.X.Offset, thumbstickOuter.Position.Y.Offset)
|
||||||
|
if DistanceBetweenTwoPoints(thumbstickFramePosition, thumbstickOuterPosition) > thumbstickSize / 2 then
|
||||||
|
local vectorWithLength = (thumbstickOuterPosition - thumbstickFramePosition).unit * thumbstickSize / 2
|
||||||
|
thumbstickOuter.Position = UDim2.new(
|
||||||
|
0,
|
||||||
|
thumbstickFramePosition.x + vectorWithLength.x,
|
||||||
|
0,
|
||||||
|
thumbstickFramePosition.y + vectorWithLength.y
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
return Vector2.new(
|
||||||
|
thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,
|
||||||
|
thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
function movementOutsideDeadZone(movementVector)
|
function movementOutsideDeadZone(movementVector)
|
||||||
return ( (math.abs(movementVector.x) > ThumbstickDeadZone) or (math.abs(movementVector.y) > ThumbstickDeadZone) )
|
return ((math.abs(movementVector.x) > ThumbstickDeadZone) or (math.abs(movementVector.y) > ThumbstickDeadZone))
|
||||||
end
|
end
|
||||||
|
|
||||||
function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThumbstick)
|
function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThumbstick)
|
||||||
local thumbstickFrame = Instance.new("Frame")
|
local thumbstickFrame = Instance.new "Frame"
|
||||||
thumbstickFrame.Name = "ThumbstickFrame"
|
thumbstickFrame.Name = "ThumbstickFrame"
|
||||||
thumbstickFrame.Active = true
|
thumbstickFrame.Active = true
|
||||||
thumbstickFrame.Size = UDim2.new(0,thumbstickSize,0,thumbstickSize)
|
thumbstickFrame.Size = UDim2.new(0, thumbstickSize, 0, thumbstickSize)
|
||||||
thumbstickFrame.Position = defaultThumbstickPos
|
thumbstickFrame.Position = defaultThumbstickPos
|
||||||
thumbstickFrame.BackgroundTransparency = 1
|
thumbstickFrame.BackgroundTransparency = 1
|
||||||
|
|
||||||
local outerThumbstick = Instance.new("ImageLabel")
|
local outerThumbstick = Instance.new "ImageLabel"
|
||||||
outerThumbstick.Name = "OuterThumbstick"
|
outerThumbstick.Name = "OuterThumbstick"
|
||||||
outerThumbstick.Image = touchControlsSheet
|
outerThumbstick.Image = touchControlsSheet
|
||||||
outerThumbstick.ImageRectOffset = Vector2.new(0,0)
|
outerThumbstick.ImageRectOffset = Vector2.new(0, 0)
|
||||||
outerThumbstick.ImageRectSize = Vector2.new(220,220)
|
outerThumbstick.ImageRectSize = Vector2.new(220, 220)
|
||||||
outerThumbstick.BackgroundTransparency = 1
|
outerThumbstick.BackgroundTransparency = 1
|
||||||
outerThumbstick.Size = UDim2.new(0,thumbstickSize,0,thumbstickSize)
|
outerThumbstick.Size = UDim2.new(0, thumbstickSize, 0, thumbstickSize)
|
||||||
outerThumbstick.Position = defaultThumbstickPos
|
outerThumbstick.Position = defaultThumbstickPos
|
||||||
outerThumbstick.Parent = Game.CoreGui.RobloxGui
|
outerThumbstick.Parent = Game.CoreGui.RobloxGui
|
||||||
|
|
||||||
local innerThumbstick = Instance.new("ImageLabel")
|
local innerThumbstick = Instance.new "ImageLabel"
|
||||||
innerThumbstick.Name = "InnerThumbstick"
|
innerThumbstick.Name = "InnerThumbstick"
|
||||||
innerThumbstick.Image = touchControlsSheet
|
innerThumbstick.Image = touchControlsSheet
|
||||||
innerThumbstick.ImageRectOffset = Vector2.new(220,0)
|
innerThumbstick.ImageRectOffset = Vector2.new(220, 0)
|
||||||
innerThumbstick.ImageRectSize = Vector2.new(111,111)
|
innerThumbstick.ImageRectSize = Vector2.new(111, 111)
|
||||||
innerThumbstick.BackgroundTransparency = 1
|
innerThumbstick.BackgroundTransparency = 1
|
||||||
innerThumbstick.Size = UDim2.new(0,thumbstickSize/2,0,thumbstickSize/2)
|
innerThumbstick.Size = UDim2.new(0, thumbstickSize / 2, 0, thumbstickSize / 2)
|
||||||
innerThumbstick.Position = UDim2.new(0, thumbstickFrame.Size.X.Offset/2 - thumbstickSize/4, 0, thumbstickFrame.Size.Y.Offset/2 - thumbstickSize/4)
|
innerThumbstick.Position = UDim2.new(
|
||||||
|
0,
|
||||||
|
thumbstickFrame.Size.X.Offset / 2 - thumbstickSize / 4,
|
||||||
|
0,
|
||||||
|
thumbstickFrame.Size.Y.Offset / 2 - thumbstickSize / 4
|
||||||
|
)
|
||||||
innerThumbstick.Parent = thumbstickFrame
|
innerThumbstick.Parent = thumbstickFrame
|
||||||
innerThumbstick.ZIndex = 2
|
innerThumbstick.ZIndex = 2
|
||||||
|
|
||||||
|
|
@ -203,35 +250,51 @@ function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThu
|
||||||
local userInputSeviceTouchEndedCon = nil
|
local userInputSeviceTouchEndedCon = nil
|
||||||
|
|
||||||
local startInputTracking = function(inputObject)
|
local startInputTracking = function(inputObject)
|
||||||
if thumbstickTouch then return end
|
if thumbstickTouch then
|
||||||
if inputObject == cameraTouch then return end
|
return
|
||||||
if inputObject == currentJumpTouch then return end
|
end
|
||||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
|
if inputObject == cameraTouch then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if inputObject == currentJumpTouch then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
thumbstickTouch = inputObject
|
thumbstickTouch = inputObject
|
||||||
table.insert(thumbstickTouches,thumbstickTouch)
|
table.insert(thumbstickTouches, thumbstickTouch)
|
||||||
|
|
||||||
thumbstickFrame.Position = transformFromCenterToTopLeft(thumbstickTouch.Position,thumbstickFrame)
|
thumbstickFrame.Position = transformFromCenterToTopLeft(thumbstickTouch.Position, thumbstickFrame)
|
||||||
outerThumbstick.Position = thumbstickFrame.Position
|
outerThumbstick.Position = thumbstickFrame.Position
|
||||||
|
|
||||||
userInputServiceTouchMovedCon = userInputService.TouchMoved:connect(function(movedInput)
|
userInputServiceTouchMovedCon = userInputService.TouchMoved:connect(function(movedInput)
|
||||||
if movedInput == thumbstickTouch then
|
if movedInput == thumbstickTouch then
|
||||||
local movementVector = nil
|
local movementVector = nil
|
||||||
if stationaryThumbstick then
|
if stationaryThumbstick then
|
||||||
movementVector = stationaryThumbstickTouchMove(thumbstickFrame,outerThumbstick,Vector2.new(movedInput.Position.x,movedInput.Position.y))
|
movementVector = stationaryThumbstickTouchMove(
|
||||||
|
thumbstickFrame,
|
||||||
|
outerThumbstick,
|
||||||
|
Vector2.new(movedInput.Position.x, movedInput.Position.y)
|
||||||
|
)
|
||||||
else
|
else
|
||||||
movementVector = followThumbstickTouchMove(thumbstickFrame,outerThumbstick,Vector2.new(movedInput.Position.x,movedInput.Position.y))
|
movementVector = followThumbstickTouchMove(
|
||||||
|
thumbstickFrame,
|
||||||
|
outerThumbstick,
|
||||||
|
Vector2.new(movedInput.Position.x, movedInput.Position.y)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
if updateFunction then
|
if updateFunction then
|
||||||
updateFunction(movementVector,outerThumbstick.Size.X.Offset/2)
|
updateFunction(movementVector, outerThumbstick.Size.X.Offset / 2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
userInputSeviceTouchEndedCon = userInputService.TouchEnded:connect(function(endedInput)
|
userInputSeviceTouchEndedCon = userInputService.TouchEnded:connect(function(endedInput)
|
||||||
if endedInput == thumbstickTouch then
|
if endedInput == thumbstickTouch then
|
||||||
if updateFunction then
|
if updateFunction then
|
||||||
updateFunction(Vector2.new(0,0),1)
|
updateFunction(Vector2.new(0, 0), 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
userInputSeviceTouchEndedCon:disconnect()
|
userInputSeviceTouchEndedCon:disconnect()
|
||||||
|
|
@ -242,7 +305,7 @@ function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThu
|
||||||
|
|
||||||
for i, object in pairs(thumbstickTouches) do
|
for i, object in pairs(thumbstickTouches) do
|
||||||
if object == thumbstickTouch then
|
if object == thumbstickTouch then
|
||||||
table.remove(thumbstickTouches,i)
|
table.remove(thumbstickTouches, i)
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -262,31 +325,31 @@ function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThu
|
||||||
return thumbstickFrame
|
return thumbstickFrame
|
||||||
end
|
end
|
||||||
|
|
||||||
function setupCharacterMovement( parentFrame )
|
function setupCharacterMovement(parentFrame)
|
||||||
local lastMovementVector, lastMaxMovement = nil
|
local lastMovementVector, lastMaxMovement = nil
|
||||||
local moveCharacterFunc = localPlayer.MoveCharacter
|
local moveCharacterFunc = localPlayer.MoveCharacter
|
||||||
local moveCharacterFunction = function ( movementVector, maxMovement )
|
local moveCharacterFunction = function(movementVector, maxMovement)
|
||||||
if localPlayer then
|
if localPlayer then
|
||||||
if movementOutsideDeadZone(movementVector) then
|
if movementOutsideDeadZone(movementVector) then
|
||||||
lastMovementVector = movementVector
|
lastMovementVector = movementVector
|
||||||
lastMaxMovement = maxMovement
|
lastMaxMovement = maxMovement
|
||||||
-- sometimes rounding error will not allow us to go max speed at some
|
-- sometimes rounding error will not allow us to go max speed at some
|
||||||
-- thumbstick angles, fix this with a bit of fudging near 100% throttle
|
-- thumbstick angles, fix this with a bit of fudging near 100% throttle
|
||||||
if movementVector.magnitude/maxMovement > ThumbstickMaxPercentGive then
|
if movementVector.magnitude / maxMovement > ThumbstickMaxPercentGive then
|
||||||
maxMovement = movementVector.magnitude - 1
|
maxMovement = movementVector.magnitude - 1
|
||||||
end
|
end
|
||||||
moveCharacterFunc(localPlayer, movementVector, maxMovement)
|
moveCharacterFunc(localPlayer, movementVector, maxMovement)
|
||||||
else
|
else
|
||||||
lastMovementVector = Vector2.new(0,0)
|
lastMovementVector = Vector2.new(0, 0)
|
||||||
lastMaxMovement = 1
|
lastMaxMovement = 1
|
||||||
moveCharacterFunc(localPlayer, lastMovementVector, lastMaxMovement)
|
moveCharacterFunc(localPlayer, lastMovementVector, lastMaxMovement)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local thumbstickPos = UDim2.new(0,thumbstickSize/2,1,-thumbstickSize*1.75)
|
local thumbstickPos = UDim2.new(0, thumbstickSize / 2, 1, -thumbstickSize * 1.75)
|
||||||
if isSmallScreenDevice() then
|
if isSmallScreenDevice() then
|
||||||
thumbstickPos = UDim2.new(0,(thumbstickSize/2) - 10,1,-thumbstickSize - 20)
|
thumbstickPos = UDim2.new(0, (thumbstickSize / 2) - 10, 1, -thumbstickSize - 20)
|
||||||
end
|
end
|
||||||
local characterThumbstick = constructThumbstick(thumbstickPos, moveCharacterFunction, false)
|
local characterThumbstick = constructThumbstick(thumbstickPos, moveCharacterFunction, false)
|
||||||
characterThumbstick.Name = "CharacterThumbstick"
|
characterThumbstick.Name = "CharacterThumbstick"
|
||||||
|
|
@ -300,36 +363,41 @@ function setupCharacterMovement( parentFrame )
|
||||||
return refreshCharacterMovement
|
return refreshCharacterMovement
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function setupJumpButton(parentFrame)
|
||||||
function setupJumpButton( parentFrame )
|
local jumpButton = Instance.new "ImageButton"
|
||||||
local jumpButton = Instance.new("ImageButton")
|
|
||||||
jumpButton.Name = "JumpButton"
|
jumpButton.Name = "JumpButton"
|
||||||
jumpButton.BackgroundTransparency = 1
|
jumpButton.BackgroundTransparency = 1
|
||||||
jumpButton.Image = touchControlsSheet
|
jumpButton.Image = touchControlsSheet
|
||||||
jumpButton.ImageRectOffset = Vector2.new(176,222)
|
jumpButton.ImageRectOffset = Vector2.new(176, 222)
|
||||||
jumpButton.ImageRectSize = Vector2.new(174,174)
|
jumpButton.ImageRectSize = Vector2.new(174, 174)
|
||||||
jumpButton.Size = UDim2.new(0,jumpButtonSize,0,jumpButtonSize)
|
jumpButton.Size = UDim2.new(0, jumpButtonSize, 0, jumpButtonSize)
|
||||||
if isSmallScreenDevice() then
|
if isSmallScreenDevice() then
|
||||||
jumpButton.Position = UDim2.new(1, -(jumpButtonSize*2.25), 1, -jumpButtonSize - 20)
|
jumpButton.Position = UDim2.new(1, -(jumpButtonSize * 2.25), 1, -jumpButtonSize - 20)
|
||||||
else
|
else
|
||||||
jumpButton.Position = UDim2.new(1, -(jumpButtonSize*2.75), 1, -jumpButtonSize - 120)
|
jumpButton.Position = UDim2.new(1, -(jumpButtonSize * 2.75), 1, -jumpButtonSize - 120)
|
||||||
end
|
end
|
||||||
|
|
||||||
local playerJumpFunc = localPlayer.JumpCharacter
|
local playerJumpFunc = localPlayer.JumpCharacter
|
||||||
|
|
||||||
local doJumpLoop = function ()
|
local doJumpLoop = function()
|
||||||
while currentJumpTouch do
|
while currentJumpTouch do
|
||||||
if localPlayer then
|
if localPlayer then
|
||||||
playerJumpFunc(localPlayer)
|
playerJumpFunc(localPlayer)
|
||||||
end
|
end
|
||||||
wait(1/60)
|
wait(1 / 60)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
jumpButton.InputBegan:connect(function(inputObject)
|
jumpButton.InputBegan:connect(function(inputObject)
|
||||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
|
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
|
||||||
if currentJumpTouch then return end
|
return
|
||||||
if inputObject == cameraTouch then return end
|
end
|
||||||
|
if currentJumpTouch then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if inputObject == cameraTouch then
|
||||||
|
return
|
||||||
|
end
|
||||||
for i, touch in pairs(oldJumpTouches) do
|
for i, touch in pairs(oldJumpTouches) do
|
||||||
if touch == inputObject then
|
if touch == inputObject then
|
||||||
return
|
return
|
||||||
|
|
@ -337,25 +405,27 @@ function setupJumpButton( parentFrame )
|
||||||
end
|
end
|
||||||
|
|
||||||
currentJumpTouch = inputObject
|
currentJumpTouch = inputObject
|
||||||
jumpButton.ImageRectOffset = Vector2.new(0,222)
|
jumpButton.ImageRectOffset = Vector2.new(0, 222)
|
||||||
jumpButton.ImageRectSize = Vector2.new(174,174)
|
jumpButton.ImageRectSize = Vector2.new(174, 174)
|
||||||
doJumpLoop()
|
doJumpLoop()
|
||||||
end)
|
end)
|
||||||
jumpButton.InputEnded:connect(function (inputObject)
|
jumpButton.InputEnded:connect(function(inputObject)
|
||||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
|
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
|
||||||
|
return
|
||||||
jumpButton.ImageRectOffset = Vector2.new(176,222)
|
end
|
||||||
jumpButton.ImageRectSize = Vector2.new(174,174)
|
|
||||||
|
jumpButton.ImageRectOffset = Vector2.new(176, 222)
|
||||||
|
jumpButton.ImageRectSize = Vector2.new(174, 174)
|
||||||
|
|
||||||
if inputObject == currentJumpTouch then
|
if inputObject == currentJumpTouch then
|
||||||
table.insert(oldJumpTouches,currentJumpTouch)
|
table.insert(oldJumpTouches, currentJumpTouch)
|
||||||
currentJumpTouch = nil
|
currentJumpTouch = nil
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
userInputService.InputEnded:connect(function ( globalInputObject )
|
userInputService.InputEnded:connect(function(globalInputObject)
|
||||||
for i, touch in pairs(oldJumpTouches) do
|
for i, touch in pairs(oldJumpTouches) do
|
||||||
if touch == globalInputObject then
|
if touch == globalInputObject then
|
||||||
table.remove(oldJumpTouches,i)
|
table.remove(oldJumpTouches, i)
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -370,8 +440,10 @@ function setupJumpButton( parentFrame )
|
||||||
jumpButton.Parent = parentFrame
|
jumpButton.Parent = parentFrame
|
||||||
end
|
end
|
||||||
|
|
||||||
function isTouchUsedByJumpButton( touch )
|
function isTouchUsedByJumpButton(touch)
|
||||||
if touch == currentJumpTouch then return true end
|
if touch == currentJumpTouch then
|
||||||
|
return true
|
||||||
|
end
|
||||||
for i, touchToCompare in pairs(oldJumpTouches) do
|
for i, touchToCompare in pairs(oldJumpTouches) do
|
||||||
if touch == touchToCompare then
|
if touch == touchToCompare then
|
||||||
return true
|
return true
|
||||||
|
|
@ -409,28 +481,30 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
|
||||||
lastPos = nil
|
lastPos = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
local resetPinchState = function ()
|
local resetPinchState = function()
|
||||||
pinchTouches = {}
|
pinchTouches = {}
|
||||||
lastPinchScale = nil
|
lastPinchScale = nil
|
||||||
shouldPinch = false
|
shouldPinch = false
|
||||||
pinchFrame:Destroy()
|
pinchFrame:Destroy()
|
||||||
pinchFrame = nil
|
pinchFrame = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
local startPinch = function(firstTouch, secondTouch)
|
local startPinch = function(firstTouch, secondTouch)
|
||||||
-- track pinching in new frame
|
-- track pinching in new frame
|
||||||
if pinchFrame then pinchFrame:Destroy() end -- make sure we didn't track in any mud
|
if pinchFrame then
|
||||||
pinchFrame = Instance.new("Frame")
|
pinchFrame:Destroy()
|
||||||
pinchFrame.Name = "PinchFrame"
|
end -- make sure we didn't track in any mud
|
||||||
pinchFrame.BackgroundTransparency = 1
|
pinchFrame = Instance.new "Frame"
|
||||||
pinchFrame.Parent = parentFrame
|
pinchFrame.Name = "PinchFrame"
|
||||||
pinchFrame.Size = UDim2.new(1,0,1,0)
|
pinchFrame.BackgroundTransparency = 1
|
||||||
|
pinchFrame.Parent = parentFrame
|
||||||
|
pinchFrame.Size = UDim2.new(1, 0, 1, 0)
|
||||||
|
|
||||||
pinchFrame.InputChanged:connect(function(inputObject)
|
pinchFrame.InputChanged:connect(function(inputObject)
|
||||||
if not shouldPinch then
|
if not shouldPinch then
|
||||||
resetPinchState()
|
resetPinchState()
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
resetCameraRotateState()
|
resetCameraRotateState()
|
||||||
|
|
||||||
if lastPinchScale == nil then -- first pinch move, just set up scale
|
if lastPinchScale == nil then -- first pinch move, just set up scale
|
||||||
|
|
@ -458,34 +532,38 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
|
||||||
lastPinchScale = newPinchDistance
|
lastPinchScale = newPinchDistance
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
pinchFrame.InputEnded:connect(function(inputObject) -- pinch is over, destroy all
|
pinchFrame.InputEnded:connect(function(inputObject) -- pinch is over, destroy all
|
||||||
if inputObject == firstTouch or inputObject == secondTouch then
|
if inputObject == firstTouch or inputObject == secondTouch then
|
||||||
resetPinchState()
|
resetPinchState()
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
local pinchGestureReceivedTouch = function(inputObject)
|
local pinchGestureReceivedTouch = function(inputObject)
|
||||||
if #pinchTouches < 1 then
|
if #pinchTouches < 1 then
|
||||||
table.insert(pinchTouches,inputObject)
|
table.insert(pinchTouches, inputObject)
|
||||||
pinchTime = tick()
|
pinchTime = tick()
|
||||||
shouldPinch = false
|
shouldPinch = false
|
||||||
elseif #pinchTouches == 1 then
|
elseif #pinchTouches == 1 then
|
||||||
shouldPinch = ( (tick() - pinchTime) <= PinchZoomDelay )
|
shouldPinch = ((tick() - pinchTime) <= PinchZoomDelay)
|
||||||
|
|
||||||
if shouldPinch then
|
if shouldPinch then
|
||||||
table.insert(pinchTouches,inputObject)
|
table.insert(pinchTouches, inputObject)
|
||||||
startPinch(pinchTouches[1], pinchTouches[2])
|
startPinch(pinchTouches[1], pinchTouches[2])
|
||||||
else -- shouldn't ever get here, but just in case
|
else -- shouldn't ever get here, but just in case
|
||||||
pinchTouches = {}
|
pinchTouches = {}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
parentFrame.InputBegan:connect(function (inputObject)
|
parentFrame.InputBegan:connect(function(inputObject)
|
||||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
|
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
|
||||||
if isTouchUsedByJumpButton(inputObject) then return end
|
return
|
||||||
|
end
|
||||||
|
if isTouchUsedByJumpButton(inputObject) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local usedByThumbstick = isTouchUsedByThumbstick(inputObject)
|
local usedByThumbstick = isTouchUsedByThumbstick(inputObject)
|
||||||
if not usedByThumbstick then
|
if not usedByThumbstick then
|
||||||
|
|
@ -494,15 +572,19 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
|
||||||
|
|
||||||
if cameraTouch == nil and not usedByThumbstick then
|
if cameraTouch == nil and not usedByThumbstick then
|
||||||
cameraTouch = inputObject
|
cameraTouch = inputObject
|
||||||
lastPos = Vector2.new(cameraTouch.Position.x,cameraTouch.Position.y)
|
lastPos = Vector2.new(cameraTouch.Position.x, cameraTouch.Position.y)
|
||||||
lastTick = tick()
|
lastTick = tick()
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
userInputService.InputChanged:connect(function (inputObject)
|
userInputService.InputChanged:connect(function(inputObject)
|
||||||
if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end
|
if inputObject.UserInputType ~= Enum.UserInputType.Touch then
|
||||||
if cameraTouch ~= inputObject then return end
|
return
|
||||||
|
end
|
||||||
|
if cameraTouch ~= inputObject then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local newPos = Vector2.new(cameraTouch.Position.x,cameraTouch.Position.y)
|
local newPos = Vector2.new(cameraTouch.Position.x, cameraTouch.Position.y)
|
||||||
local touchDiff = (lastPos - newPos) * CameraRotateSensitivity
|
local touchDiff = (lastPos - newPos) * CameraRotateSensitivity
|
||||||
|
|
||||||
-- first time rotating outside deadzone, just setup for next changed event
|
-- first time rotating outside deadzone, just setup for next changed event
|
||||||
|
|
@ -518,23 +600,23 @@ function setupCameraControl(parentFrame, refreshCharacterMoveFunc)
|
||||||
lastPos = newPos
|
lastPos = newPos
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
userInputService.InputEnded:connect(function (inputObject)
|
userInputService.InputEnded:connect(function(inputObject)
|
||||||
if cameraTouch == inputObject or cameraTouch == nil then
|
if cameraTouch == inputObject or cameraTouch == nil then
|
||||||
resetCameraRotateState()
|
resetCameraRotateState()
|
||||||
end
|
end
|
||||||
|
|
||||||
for i, touch in pairs(pinchTouches) do
|
for i, touch in pairs(pinchTouches) do
|
||||||
if touch == inputObject then
|
if touch == inputObject then
|
||||||
table.remove(pinchTouches,i)
|
table.remove(pinchTouches, i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
function setupTouchControls()
|
function setupTouchControls()
|
||||||
local touchControlFrame = Instance.new("Frame")
|
local touchControlFrame = Instance.new "Frame"
|
||||||
touchControlFrame.Name = "TouchControlFrame"
|
touchControlFrame.Name = "TouchControlFrame"
|
||||||
touchControlFrame.Size = UDim2.new(1,0,1,0)
|
touchControlFrame.Size = UDim2.new(1, 0, 1, 0)
|
||||||
touchControlFrame.BackgroundTransparency = 1
|
touchControlFrame.BackgroundTransparency = 1
|
||||||
touchControlFrame.Parent = Game.CoreGui.RobloxGui
|
touchControlFrame.Parent = Game.CoreGui.RobloxGui
|
||||||
|
|
||||||
|
|
@ -543,7 +625,9 @@ function setupTouchControls()
|
||||||
setupCameraControl(touchControlFrame, refreshCharacterMoveFunc)
|
setupCameraControl(touchControlFrame, refreshCharacterMoveFunc)
|
||||||
|
|
||||||
userInputService.ProcessedEvent:connect(function(inputObject, processed)
|
userInputService.ProcessedEvent:connect(function(inputObject, processed)
|
||||||
if not processed then return end
|
if not processed then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
-- kill camera pan if the touch is used by some user controls
|
-- kill camera pan if the touch is used by some user controls
|
||||||
if inputObject == cameraTouch and inputObject.UserInputState == Enum.UserInputState.Begin then
|
if inputObject == cameraTouch and inputObject.UserInputState == Enum.UserInputState.Begin then
|
||||||
|
|
@ -552,7 +636,6 @@ function setupTouchControls()
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
-- Start of Script
|
-- Start of Script
|
||||||
|
|
@ -561,4 +644,4 @@ if true then --userInputService:IsLuaTouchControls() then
|
||||||
setupTouchControls()
|
setupTouchControls()
|
||||||
else
|
else
|
||||||
script:Destroy()
|
script:Destroy()
|
||||||
end
|
end
|
||||||
|
|
|
||||||
1012
157877000.lua
1012
157877000.lua
File diff suppressed because it is too large
Load Diff
76
36868950.lua
76
36868950.lua
|
|
@ -1,28 +1,28 @@
|
||||||
local controlFrame = script.Parent:FindFirstChild("ControlFrame")
|
local controlFrame = script.Parent:FindFirstChild "ControlFrame"
|
||||||
|
|
||||||
if not controlFrame then return end
|
if not controlFrame then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local topLeftControl = controlFrame:FindFirstChild("TopLeftControl")
|
local bottomLeftControl = controlFrame:FindFirstChild "BottomLeftControl"
|
||||||
local bottomLeftControl = controlFrame:FindFirstChild("BottomLeftControl")
|
local bottomRightControl = controlFrame:FindFirstChild "BottomRightControl"
|
||||||
local bottomRightControl = controlFrame:FindFirstChild("BottomRightControl")
|
|
||||||
|
|
||||||
|
local frameTip = Instance.new "TextLabel"
|
||||||
local frameTip = Instance.new("TextLabel")
|
|
||||||
frameTip.Name = "ToolTip"
|
frameTip.Name = "ToolTip"
|
||||||
frameTip.Text = ""
|
frameTip.Text = ""
|
||||||
frameTip.Font = Enum.Font.ArialBold
|
frameTip.Font = Enum.Font.ArialBold
|
||||||
frameTip.FontSize = Enum.FontSize.Size12
|
frameTip.FontSize = Enum.FontSize.Size12
|
||||||
frameTip.TextColor3 = Color3.new(1,1,1)
|
frameTip.TextColor3 = Color3.new(1, 1, 1)
|
||||||
frameTip.BorderSizePixel = 0
|
frameTip.BorderSizePixel = 0
|
||||||
frameTip.ZIndex = 10
|
frameTip.ZIndex = 10
|
||||||
frameTip.Size = UDim2.new(2,0,1,0)
|
frameTip.Size = UDim2.new(2, 0, 1, 0)
|
||||||
frameTip.Position = UDim2.new(1,0,0,0)
|
frameTip.Position = UDim2.new(1, 0, 0, 0)
|
||||||
frameTip.BackgroundColor3 = Color3.new(0,0,0)
|
frameTip.BackgroundColor3 = Color3.new(0, 0, 0)
|
||||||
frameTip.BackgroundTransparency = 1
|
frameTip.BackgroundTransparency = 1
|
||||||
frameTip.TextTransparency = 1
|
frameTip.TextTransparency = 1
|
||||||
frameTip.TextWrap = true
|
frameTip.TextWrap = true
|
||||||
|
|
||||||
local inside = Instance.new("BoolValue")
|
local inside = Instance.new "BoolValue"
|
||||||
inside.Name = "inside"
|
inside.Name = "inside"
|
||||||
inside.Value = false
|
inside.Value = false
|
||||||
inside.Parent = frameTip
|
inside.Parent = frameTip
|
||||||
|
|
@ -30,7 +30,7 @@ inside.Parent = frameTip
|
||||||
function setUpListeners(frameToListen)
|
function setUpListeners(frameToListen)
|
||||||
local fadeSpeed = 0.1
|
local fadeSpeed = 0.1
|
||||||
frameToListen.Parent.MouseEnter:connect(function()
|
frameToListen.Parent.MouseEnter:connect(function()
|
||||||
if frameToListen:FindFirstChild("inside") then
|
if frameToListen:FindFirstChild "inside" then
|
||||||
frameToListen.inside.Value = true
|
frameToListen.inside.Value = true
|
||||||
wait(1.2)
|
wait(1.2)
|
||||||
if frameToListen.inside.Value then
|
if frameToListen.inside.Value then
|
||||||
|
|
@ -47,22 +47,26 @@ function setUpListeners(frameToListen)
|
||||||
killFrame.BackgroundTransparency = 1
|
killFrame.BackgroundTransparency = 1
|
||||||
killFrame.TextTransparency = 1
|
killFrame.TextTransparency = 1
|
||||||
end
|
end
|
||||||
frameToListen.Parent.MouseLeave:connect(function() killTip(frameToListen) end)
|
frameToListen.Parent.MouseLeave:connect(function()
|
||||||
frameToListen.Parent.MouseButton1Click:connect(function() killTip(frameToListen) end)
|
killTip(frameToListen)
|
||||||
|
end)
|
||||||
|
frameToListen.Parent.MouseButton1Click:connect(function()
|
||||||
|
killTip(frameToListen)
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
function createSettingsButtonTip(parent)
|
function createSettingsButtonTip(parent)
|
||||||
if parent == nil then
|
if parent == nil then
|
||||||
parent = bottomLeftControl:FindFirstChild("SettingsButton")
|
parent = bottomLeftControl:FindFirstChild "SettingsButton"
|
||||||
end
|
end
|
||||||
|
|
||||||
local toolTip = frameTip:clone()
|
local toolTip = frameTip:clone()
|
||||||
toolTip.RobloxLocked = true
|
toolTip.RobloxLocked = true
|
||||||
toolTip.Text = "Settings/Leave Game"
|
toolTip.Text = "Settings/Leave Game"
|
||||||
toolTip.Position = UDim2.new(0,0,0,-18)
|
toolTip.Position = UDim2.new(0, 0, 0, -18)
|
||||||
toolTip.Size = UDim2.new(0,120,0,20)
|
toolTip.Size = UDim2.new(0, 120, 0, 20)
|
||||||
toolTip.Parent = parent
|
toolTip.Parent = parent
|
||||||
setUpListeners(toolTip)
|
setUpListeners(toolTip)
|
||||||
end
|
end
|
||||||
|
|
||||||
wait(5) -- make sure we are loaded in, won't need tool tips for first 5 seconds anyway
|
wait(5) -- make sure we are loaded in, won't need tool tips for first 5 seconds anyway
|
||||||
|
|
@ -70,18 +74,16 @@ wait(5) -- make sure we are loaded in, won't need tool tips for first 5 seconds
|
||||||
---------------- set up Bottom Left Tool Tips -------------------------
|
---------------- set up Bottom Left Tool Tips -------------------------
|
||||||
|
|
||||||
local bottomLeftChildren = bottomLeftControl:GetChildren()
|
local bottomLeftChildren = bottomLeftControl:GetChildren()
|
||||||
local hasSettingsTip = false
|
|
||||||
|
|
||||||
for i = 1, #bottomLeftChildren do
|
for i = 1, #bottomLeftChildren do
|
||||||
|
|
||||||
if bottomLeftChildren[i].Name == "Exit" then
|
if bottomLeftChildren[i].Name == "Exit" then
|
||||||
local exitTip = frameTip:clone()
|
local exitTip = frameTip:clone()
|
||||||
exitTip.RobloxLocked = true
|
exitTip.RobloxLocked = true
|
||||||
exitTip.Text = "Leave Place"
|
exitTip.Text = "Leave Place"
|
||||||
exitTip.Position = UDim2.new(0,0,-1,0)
|
exitTip.Position = UDim2.new(0, 0, -1, 0)
|
||||||
exitTip.Size = UDim2.new(1,0,1,0)
|
exitTip.Size = UDim2.new(1, 0, 1, 0)
|
||||||
exitTip.Parent = bottomLeftChildren[i]
|
exitTip.Parent = bottomLeftChildren[i]
|
||||||
setUpListeners(exitTip)
|
setUpListeners(exitTip)
|
||||||
elseif bottomLeftChildren[i].Name == "SettingsButton" then
|
elseif bottomLeftChildren[i].Name == "SettingsButton" then
|
||||||
hasSettingsTip = true
|
hasSettingsTip = true
|
||||||
createSettingsButtonTip(bottomLeftChildren[i])
|
createSettingsButtonTip(bottomLeftChildren[i])
|
||||||
|
|
@ -93,16 +95,16 @@ end
|
||||||
local bottomRightChildren = bottomRightControl:GetChildren()
|
local bottomRightChildren = bottomRightControl:GetChildren()
|
||||||
|
|
||||||
for i = 1, #bottomRightChildren do
|
for i = 1, #bottomRightChildren do
|
||||||
if bottomRightChildren[i].Name:find("Camera") ~= nil then
|
if bottomRightChildren[i].Name:find "Camera" ~= nil then
|
||||||
local cameraTip = frameTip:clone()
|
local cameraTip = frameTip:clone()
|
||||||
cameraTip.RobloxLocked = true
|
cameraTip.RobloxLocked = true
|
||||||
cameraTip.Text = "Camera View"
|
cameraTip.Text = "Camera View"
|
||||||
if bottomRightChildren[i].Name:find("Zoom") then
|
if bottomRightChildren[i].Name:find "Zoom" then
|
||||||
cameraTip.Position = UDim2.new(-1,0,-1.5)
|
cameraTip.Position = UDim2.new(-1, 0, -1.5)
|
||||||
else
|
else
|
||||||
cameraTip.Position = UDim2.new(0,0,-1.5,0)
|
cameraTip.Position = UDim2.new(0, 0, -1.5, 0)
|
||||||
end
|
end
|
||||||
cameraTip.Size = UDim2.new(2,0,1.25,0)
|
cameraTip.Size = UDim2.new(2, 0, 1.25, 0)
|
||||||
cameraTip.Parent = bottomRightChildren[i]
|
cameraTip.Parent = bottomRightChildren[i]
|
||||||
setUpListeners(cameraTip)
|
setUpListeners(cameraTip)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
94
37801172.lua
94
37801172.lua
|
|
@ -1,13 +1,14 @@
|
||||||
|
|
||||||
-- Creates all neccessary scripts for the gui on initial load, everything except build tools
|
-- Creates all neccessary scripts for the gui on initial load, everything except build tools
|
||||||
-- Created by Ben T. 10/29/10
|
-- Created by Ben T. 10/29/10
|
||||||
-- Please note that these are loaded in a specific order to diminish errors/perceived load time by user
|
-- Please note that these are loaded in a specific order to diminish errors/perceived load time by user
|
||||||
local scriptContext = game:GetService("ScriptContext")
|
local scriptContext = game:GetService "ScriptContext"
|
||||||
local touchEnabled = false
|
local touchEnabled = false
|
||||||
pcall(function() touchEnabled = game:GetService("UserInputService").TouchEnabled end)
|
pcall(function()
|
||||||
|
touchEnabled = game:GetService("UserInputService").TouchEnabled
|
||||||
|
end)
|
||||||
|
|
||||||
-- library registration
|
-- library registration
|
||||||
scriptContext:AddCoreScript(60595695, scriptContext,"/Libraries/LibraryRegistration/LibraryRegistration")
|
scriptContext:AddCoreScript(60595695, scriptContext, "/Libraries/LibraryRegistration/LibraryRegistration")
|
||||||
|
|
||||||
local function waitForChild(instance, name)
|
local function waitForChild(instance, name)
|
||||||
while not instance:FindFirstChild(name) do
|
while not instance:FindFirstChild(name) do
|
||||||
|
|
@ -21,90 +22,87 @@ local function waitForProperty(instance, property)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Responsible for tracking logging items
|
-- Responsible for tracking logging items
|
||||||
local scriptContext = game:GetService("ScriptContext")
|
local scriptContext = game:GetService "ScriptContext"
|
||||||
scriptContext:AddCoreScript(59002209, scriptContext, "CoreScripts/Sections")
|
scriptContext:AddCoreScript(59002209, scriptContext, "CoreScripts/Sections")
|
||||||
|
|
||||||
waitForChild(game:GetService("CoreGui"),"RobloxGui")
|
waitForChild(game:GetService "CoreGui", "RobloxGui")
|
||||||
local screenGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui")
|
local screenGui = game:GetService("CoreGui"):FindFirstChild "RobloxGui"
|
||||||
|
|
||||||
if not touchEnabled then
|
if not touchEnabled then
|
||||||
-- ToolTipper (creates tool tips for gui)
|
-- ToolTipper (creates tool tips for gui)
|
||||||
scriptContext:AddCoreScript(36868950,screenGui,"CoreScripts/ToolTip")
|
scriptContext:AddCoreScript(36868950, screenGui, "CoreScripts/ToolTip")
|
||||||
-- SettingsScript
|
-- SettingsScript
|
||||||
scriptContext:AddCoreScript(46295863,screenGui,"CoreScripts/Settings")
|
scriptContext:AddCoreScript(46295863, screenGui, "CoreScripts/Settings")
|
||||||
else
|
else
|
||||||
scriptContext:AddCoreScript(153556783,screenGui,"CoreScripts/TouchControls")
|
scriptContext:AddCoreScript(153556783, screenGui, "CoreScripts/TouchControls")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- MainBotChatScript
|
-- MainBotChatScript
|
||||||
scriptContext:AddCoreScript(39250920,screenGui,"CoreScripts/MainBotChatScript")
|
scriptContext:AddCoreScript(39250920, screenGui, "CoreScripts/MainBotChatScript")
|
||||||
|
|
||||||
-- Popup Script
|
-- Popup Script
|
||||||
scriptContext:AddCoreScript(48488451,screenGui,"CoreScripts/PopupScript")
|
scriptContext:AddCoreScript(48488451, screenGui, "CoreScripts/PopupScript")
|
||||||
-- Friend Notification Script (probably can use this script to expand out to other notifications)
|
-- Friend Notification Script (probably can use this script to expand out to other notifications)
|
||||||
scriptContext:AddCoreScript(48488398,screenGui,"CoreScripts/NotificationScript")
|
scriptContext:AddCoreScript(48488398, screenGui, "CoreScripts/NotificationScript")
|
||||||
-- Chat script
|
-- Chat script
|
||||||
scriptContext:AddCoreScript(97188756, screenGui, "CoreScripts/ChatScript")
|
scriptContext:AddCoreScript(97188756, screenGui, "CoreScripts/ChatScript")
|
||||||
-- Purchase Prompt Script
|
-- Purchase Prompt Script
|
||||||
scriptContext:AddCoreScript(107893730, screenGui, "CoreScripts/PurchasePromptScript")
|
scriptContext:AddCoreScript(107893730, screenGui, "CoreScripts/PurchasePromptScript")
|
||||||
|
|
||||||
if not touchEnabled then
|
if not touchEnabled or screenGui.AbsoluteSize.Y > 600 then
|
||||||
-- New Player List
|
-- New Player List
|
||||||
scriptContext:AddCoreScript(48488235,screenGui,"CoreScripts/PlayerListScript")
|
scriptContext:AddCoreScript(48488235, screenGui, "CoreScripts/PlayerListScript")
|
||||||
elseif screenGui.AbsoluteSize.Y > 600 then
|
else
|
||||||
-- New Player List
|
|
||||||
scriptContext:AddCoreScript(48488235,screenGui,"CoreScripts/PlayerListScript")
|
|
||||||
else
|
|
||||||
delay(5, function()
|
delay(5, function()
|
||||||
if screenGui.AbsoluteSize.Y >= 600 then
|
if screenGui.AbsoluteSize.Y >= 600 then
|
||||||
-- New Player List
|
-- New Player List
|
||||||
scriptContext:AddCoreScript(48488235,screenGui,"CoreScripts/PlayerListScript")
|
scriptContext:AddCoreScript(48488235, screenGui, "CoreScripts/PlayerListScript")
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
if game.CoreGui.Version >= 3 and game.PlaceId ~= 130815926 then --todo: remove placeid hack for halloween
|
if game.CoreGui.Version >= 3 and game.PlaceId ~= 130815926 then --todo: remove placeid hack for halloween
|
||||||
-- Backpack Builder, creates most of the backpack gui
|
-- Backpack Builder, creates most of the backpack gui
|
||||||
scriptContext:AddCoreScript(53878047,screenGui,"CoreScripts/BackpackScripts/BackpackBuilder")
|
scriptContext:AddCoreScript(53878047, screenGui, "CoreScripts/BackpackScripts/BackpackBuilder")
|
||||||
|
|
||||||
waitForChild(screenGui,"CurrentLoadout")
|
waitForChild(screenGui, "CurrentLoadout")
|
||||||
waitForChild(screenGui,"Backpack")
|
waitForChild(screenGui, "Backpack")
|
||||||
local Backpack = screenGui.Backpack
|
local Backpack = screenGui.Backpack
|
||||||
|
|
||||||
-- Manager handles all big backpack state changes, other scripts subscribe to this and do things accordingly
|
-- Manager handles all big backpack state changes, other scripts subscribe to this and do things accordingly
|
||||||
if game.CoreGui.Version >= 7 then
|
if game.CoreGui.Version >= 7 then
|
||||||
scriptContext:AddCoreScript(89449093,Backpack,"CoreScripts/BackpackScripts/BackpackManager")
|
scriptContext:AddCoreScript(89449093, Backpack, "CoreScripts/BackpackScripts/BackpackManager")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Backpack Gear (handles all backpack gear tab stuff)
|
-- Backpack Gear (handles all backpack gear tab stuff)
|
||||||
game:GetService("ScriptContext"):AddCoreScript(89449008,Backpack,"CoreScripts/BackpackScripts/BackpackGear")
|
game:GetService("ScriptContext"):AddCoreScript(89449008, Backpack, "CoreScripts/BackpackScripts/BackpackGear")
|
||||||
-- Loadout Script, used for gear hotkeys
|
-- Loadout Script, used for gear hotkeys
|
||||||
scriptContext:AddCoreScript(53878057,screenGui.CurrentLoadout,"CoreScripts/BackpackScripts/LoadoutScript")
|
scriptContext:AddCoreScript(53878057, screenGui.CurrentLoadout, "CoreScripts/BackpackScripts/LoadoutScript")
|
||||||
if game.CoreGui.Version >= 8 then
|
if game.CoreGui.Version >= 8 then
|
||||||
-- Wardrobe script handles all character dressing operations
|
-- Wardrobe script handles all character dressing operations
|
||||||
scriptContext:AddCoreScript(-1,Backpack,"CoreScripts/BackpackScripts/BackpackWardrobe")
|
scriptContext:AddCoreScript(-1, Backpack, "CoreScripts/BackpackScripts/BackpackWardrobe")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local IsPersonalServer = not not game.Workspace:FindFirstChild("PSVariable")
|
local IsPersonalServer = not not game.Workspace:FindFirstChild "PSVariable"
|
||||||
if IsPersonalServer then
|
if IsPersonalServer then
|
||||||
game:GetService("ScriptContext"):AddCoreScript(64164692,game.Players.LocalPlayer,"BuildToolManager")
|
game:GetService("ScriptContext"):AddCoreScript(64164692, game.Players.LocalPlayer, "BuildToolManager")
|
||||||
end
|
end
|
||||||
game.Workspace.ChildAdded:connect(function(nchild)
|
game.Workspace.ChildAdded:connect(function(nchild)
|
||||||
if nchild.Name=='PSVariable' and nchild:IsA('BoolValue') then
|
if nchild.Name == "PSVariable" and nchild:IsA "BoolValue" then
|
||||||
IsPersonalServer = true
|
IsPersonalServer = true
|
||||||
game:GetService("ScriptContext"):AddCoreScript(64164692,game.Players.LocalPlayer,"BuildToolManager")
|
game:GetService("ScriptContext"):AddCoreScript(64164692, game.Players.LocalPlayer, "BuildToolManager")
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
if touchEnabled then -- touch devices don't use same control frame
|
if touchEnabled then -- touch devices don't use same control frame
|
||||||
-- only used for touch device button generation
|
-- only used for touch device button generation
|
||||||
scriptContext:AddCoreScript(152908679,screenGui,"CoreScripts/ContextActionTouch")
|
scriptContext:AddCoreScript(152908679, screenGui, "CoreScripts/ContextActionTouch")
|
||||||
|
|
||||||
waitForChild(screenGui, 'ControlFrame')
|
waitForChild(screenGui, "ControlFrame")
|
||||||
waitForChild(screenGui.ControlFrame, 'BottomLeftControl')
|
waitForChild(screenGui.ControlFrame, "BottomLeftControl")
|
||||||
screenGui.ControlFrame.BottomLeftControl.Visible = false
|
screenGui.ControlFrame.BottomLeftControl.Visible = false
|
||||||
|
|
||||||
waitForChild(screenGui.ControlFrame, 'TopLeftControl')
|
waitForChild(screenGui.ControlFrame, "TopLeftControl")
|
||||||
screenGui.ControlFrame.TopLeftControl.Visible = false
|
screenGui.ControlFrame.TopLeftControl.Visible = false
|
||||||
end
|
end
|
||||||
|
|
|
||||||
323
38037565.lua
323
38037565.lua
|
|
@ -1,52 +1,52 @@
|
||||||
local damageGuiWidth = 5.0
|
local damageGuiWidth = 5.0
|
||||||
local damageGuiHeight = 5.0
|
local damageGuiHeight = 5.0
|
||||||
|
|
||||||
|
|
||||||
function waitForChild(parent, childName)
|
function waitForChild(parent, childName)
|
||||||
local child = parent:findFirstChild(childName)
|
local child = parent:findFirstChild(childName)
|
||||||
if child then return child end
|
if child then
|
||||||
while true do
|
return child
|
||||||
child = parent.ChildAdded:wait()
|
end
|
||||||
if child.Name==childName then return child end
|
while true do
|
||||||
end
|
child = parent.ChildAdded:wait()
|
||||||
|
if child.Name == childName then
|
||||||
|
return child
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- declarations
|
-- declarations
|
||||||
local Figure = script.Parent
|
local Figure = script.Parent
|
||||||
local Head = waitForChild(Figure, "Head")
|
local Humanoid = waitForChild(Figure, "Humanoid")
|
||||||
local Humanoid = waitForChild(Figure, "Humanoid")
|
local Torso = waitForChild(Figure, "Torso")
|
||||||
local walkSpeed = Humanoid.WalkSpeed
|
|
||||||
local Torso = waitForChild(Figure, "Torso")
|
|
||||||
|
|
||||||
local config = Figure:FindFirstChild("PlayerStats")
|
local config = Figure:FindFirstChild "PlayerStats"
|
||||||
|
|
||||||
local inCharTag = Instance.new("BoolValue")
|
local inCharTag = Instance.new "BoolValue"
|
||||||
inCharTag.Name = "InCharTag"
|
inCharTag.Name = "InCharTag"
|
||||||
|
|
||||||
local hider = Instance.new("BoolValue")
|
local hider = Instance.new "BoolValue"
|
||||||
hider.Name = "RobloxBuildTool"
|
hider.Name = "RobloxBuildTool"
|
||||||
|
|
||||||
local currentChildren
|
local currentChildren
|
||||||
local backpackTools
|
local backpackTools
|
||||||
|
|
||||||
if config == nil then
|
if config == nil then
|
||||||
config = Instance.new("Configuration")
|
config = Instance.new "Configuration"
|
||||||
config.Parent = Figure
|
config.Parent = Figure
|
||||||
config.Name = "PlayerStats"
|
config.Name = "PlayerStats"
|
||||||
end
|
end
|
||||||
|
|
||||||
local myHealth = config:FindFirstChild("MaxHealth")
|
local myHealth = config:FindFirstChild "MaxHealth"
|
||||||
if myHealth == nil then
|
if myHealth == nil then
|
||||||
myHealth = Instance.new("NumberValue")
|
myHealth = Instance.new "NumberValue"
|
||||||
myHealth.Parent = config
|
myHealth.Parent = config
|
||||||
myHealth.Value = 100
|
myHealth.Value = 100
|
||||||
myHealth.Name = "MaxHealth"
|
myHealth.Name = "MaxHealth"
|
||||||
end
|
end
|
||||||
|
|
||||||
Humanoid.MaxHealth = myHealth.Value
|
Humanoid.MaxHealth = myHealth.Value
|
||||||
Humanoid.Health = myHealth.Value
|
Humanoid.Health = myHealth.Value
|
||||||
|
|
||||||
|
|
||||||
function onMaxHealthChange()
|
function onMaxHealthChange()
|
||||||
Humanoid.MaxHealth = myHealth.Value
|
Humanoid.MaxHealth = myHealth.Value
|
||||||
Humanoid.Health = myHealth.Value
|
Humanoid.Health = myHealth.Value
|
||||||
|
|
@ -54,52 +54,56 @@ end
|
||||||
|
|
||||||
myHealth.Changed:connect(onMaxHealthChange)
|
myHealth.Changed:connect(onMaxHealthChange)
|
||||||
|
|
||||||
|
|
||||||
--Humanoid.MaxHealth = myHealth.Value
|
--Humanoid.MaxHealth = myHealth.Value
|
||||||
--Humanoid.Health = Humanoid.MaxHealth
|
--Humanoid.Health = Humanoid.MaxHealth
|
||||||
|
|
||||||
local vPlayer = game.Players:GetPlayerFromCharacter(script.Parent)
|
local vPlayer = game.Players:GetPlayerFromCharacter(script.Parent)
|
||||||
local dotGui = vPlayer.PlayerGui:FindFirstChild("DamageOverTimeGui")
|
local dotGui = vPlayer.PlayerGui:FindFirstChild "DamageOverTimeGui"
|
||||||
if dotGui == nil then
|
if dotGui == nil then
|
||||||
dotGui = Instance.new("BillboardGui")
|
dotGui = Instance.new "BillboardGui"
|
||||||
dotGui.Name = "DamageOverTimeGui"
|
dotGui.Name = "DamageOverTimeGui"
|
||||||
dotGui.Parent = vPlayer.PlayerGui
|
dotGui.Parent = vPlayer.PlayerGui
|
||||||
dotGui.Adornee = script.Parent:FindFirstChild("Head")
|
dotGui.Adornee = script.Parent:FindFirstChild "Head"
|
||||||
dotGui.Active = true
|
dotGui.Active = true
|
||||||
dotGui.size = UDim2.new(damageGuiWidth, 0.0, damageGuiHeight, 0.0)
|
dotGui.size = UDim2.new(damageGuiWidth, 0, damageGuiHeight, 0.0)
|
||||||
dotGui.StudsOffset = Vector3.new(0.0, 2.0, 0.0)
|
dotGui.StudsOffset = Vector3.new(0, 2.0, 0.0)
|
||||||
end
|
end
|
||||||
|
|
||||||
print("newHealth declarations finished")
|
print "newHealth declarations finished"
|
||||||
|
|
||||||
function billboardHealthChange(dmg)
|
function billboardHealthChange(dmg)
|
||||||
local textLabel = Instance.new("TextLabel")
|
local textLabel = Instance.new "TextLabel"
|
||||||
if dmg > 0 then textLabel.Text = tostring(dmg) textLabel.TextColor3 = Color3.new(0, 1, 0)
|
if dmg > 0 then
|
||||||
else textLabel.Text = tostring(dmg) textLabel.TextColor3 = Color3.new(1, 0, 1) end
|
textLabel.Text = tostring(dmg)
|
||||||
textLabel.size = UDim2.new(1.0, 0.0, 1.0, 0.0)
|
textLabel.TextColor3 = Color3.new(0, 1, 0)
|
||||||
textLabel.Active = true
|
else
|
||||||
textLabel.FontSize = 6
|
textLabel.Text = tostring(dmg)
|
||||||
textLabel.BackgroundTransparency = 1
|
textLabel.TextColor3 = Color3.new(1, 0, 1)
|
||||||
textLabel.Parent = dotGui
|
end
|
||||||
|
textLabel.size = UDim2.new(1, 0, 1, 0.0)
|
||||||
|
textLabel.Active = true
|
||||||
|
textLabel.FontSize = 6
|
||||||
|
textLabel.BackgroundTransparency = 1
|
||||||
|
textLabel.Parent = dotGui
|
||||||
|
|
||||||
for t = 1, 10 do
|
for t = 1, 10 do
|
||||||
wait(.1)
|
wait(0.1)
|
||||||
textLabel.TextTransparency = t/10
|
textLabel.TextTransparency = t / 10
|
||||||
textLabel.Position = UDim2.new(0, 0, 0, -t*5)
|
textLabel.Position = UDim2.new(0, 0, 0, -t * 5)
|
||||||
textLabel.FontSize = 6-t*.6
|
textLabel.FontSize = 6 - t * 0.6
|
||||||
end
|
end
|
||||||
|
|
||||||
textLabel:remove()
|
textLabel:remove()
|
||||||
end
|
end
|
||||||
|
|
||||||
function setMaxHealth()
|
function setMaxHealth()
|
||||||
--print(Humanoid.Health)
|
--print(Humanoid.Health)
|
||||||
if myHealth.Value >=0 then
|
if myHealth.Value >= 0 then
|
||||||
Humanoid.MaxHealth = myHealth.Value
|
Humanoid.MaxHealth = myHealth.Value
|
||||||
print(Humanoid.MaxHealth)
|
print(Humanoid.MaxHealth)
|
||||||
if Humanoid.Health > Humanoid.MaxHealth then
|
if Humanoid.Health > Humanoid.MaxHealth then
|
||||||
Humanoid.Health = Humanoid.MaxHealth
|
Humanoid.Health = Humanoid.MaxHealth
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -107,121 +111,130 @@ myHealth.Changed:connect(setMaxHealth)
|
||||||
|
|
||||||
-- Visual Effects --
|
-- Visual Effects --
|
||||||
|
|
||||||
fireEffect = Instance.new("Fire")
|
fireEffect = Instance.new "Fire"
|
||||||
fireEffect.Heat = 0.1
|
fireEffect.Heat = 0.1
|
||||||
fireEffect.Size = 3.0
|
fireEffect.Size = 3.0
|
||||||
fireEffect.Name = "FireEffect"
|
fireEffect.Name = "FireEffect"
|
||||||
fireEffect.Enabled = false
|
fireEffect.Enabled = false
|
||||||
--
|
--
|
||||||
|
|
||||||
|
-- regeneration
|
||||||
-- regeneration
|
while true do
|
||||||
while true do
|
local s = wait(1)
|
||||||
local s = wait(1)
|
local health = Humanoid.Health
|
||||||
local health = Humanoid.Health
|
if health > 0 then -- and health < Humanoid.MaxHealth then
|
||||||
if health > 0 then -- and health < Humanoid.MaxHealth then
|
local delta = 0
|
||||||
local delta = 0
|
if config then
|
||||||
if config then
|
regen = config:FindFirstChild "Regen"
|
||||||
regen = config:FindFirstChild("Regen")
|
poison = config:FindFirstChild "Poison"
|
||||||
poison = config:FindFirstChild("Poison")
|
ice = config:FindFirstChild "Ice"
|
||||||
ice = config:FindFirstChild("Ice")
|
fire = config:FindFirstChild "Fire"
|
||||||
fire = config:FindFirstChild("Fire")
|
stun = config:FindFirstChild "Stun"
|
||||||
stun = config:FindFirstChild("Stun")
|
if regen then
|
||||||
if regen then
|
delta = delta + regen.Value.X
|
||||||
delta = delta + regen.Value.X
|
if regen.Value.Y >= 0 then
|
||||||
if regen.Value.Y >= 0 then regen.Value = Vector3.new(regen.Value.X+regen.Value.Z, regen.Value.Y - s, regen.Value.Z) -- maybe have 3rd parameter be an increaser/decreaser?
|
regen.Value = Vector3.new(regen.Value.X + regen.Value.Z, regen.Value.Y - s, regen.Value.Z) -- maybe have 3rd parameter be an increaser/decreaser?
|
||||||
elseif regen.Value.Y == -1 then regen.Value = Vector3.new(regen.Value.X+regen.Value.Z, -1, regen.Value.Z)
|
elseif regen.Value.Y == -1 then
|
||||||
else regen:remove() end -- infinity is -1
|
regen.Value = Vector3.new(regen.Value.X + regen.Value.Z, -1, regen.Value.Z)
|
||||||
end
|
else
|
||||||
if poison then
|
regen:remove()
|
||||||
delta = delta - poison.Value.X
|
end -- infinity is -1
|
||||||
if poison.Value.Y >= 0 then poison.Value = Vector3.new(poison.Value.X+poison.Value.Z, poison.Value.Y - s, poison.Value.Z)
|
end
|
||||||
elseif poison.Value.Y == -1 then poison.Value = Vector3.new(poison.Value.X+poison.Value.Z, -1, poison.Value.Z)
|
if poison then
|
||||||
else poison:remove() end -- infinity is -1
|
delta = delta - poison.Value.X
|
||||||
end
|
if poison.Value.Y >= 0 then
|
||||||
|
poison.Value = Vector3.new(poison.Value.X + poison.Value.Z, poison.Value.Y - s, poison.Value.Z)
|
||||||
if ice then
|
elseif poison.Value.Y == -1 then
|
||||||
--print("IN ICE")
|
poison.Value = Vector3.new(poison.Value.X + poison.Value.Z, -1, poison.Value.Z)
|
||||||
delta = delta - ice.Value.X
|
else
|
||||||
if ice.Value.Y >=0 then
|
poison:remove()
|
||||||
ice.Value = Vector3.new(ice.Value.X, ice.Value.Y - s, ice.Value.Z)
|
end -- infinity is -1
|
||||||
else
|
|
||||||
ice:remove()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if fire then
|
|
||||||
fireEffect.Enabled = true
|
|
||||||
fireEffect.Parent = Figure.Torso
|
|
||||||
delta = delta - fire.Value.X
|
|
||||||
if fire.Value.Y >= 0 then
|
|
||||||
fire.Value = Vector3.new(fire.Value.X, fire.Value.Y - s, fire.Value.Z)
|
|
||||||
else
|
|
||||||
fire:remove()
|
|
||||||
fireEffect.Enabled = false
|
|
||||||
fireEffect.Parent = nil
|
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
if stun then
|
if ice then
|
||||||
if stun.Value > 0 then
|
--print("IN ICE")
|
||||||
Torso.Anchored = true
|
delta = delta - ice.Value.X
|
||||||
currentChildren = script.Parent:GetChildren()
|
if ice.Value.Y >= 0 then
|
||||||
backpackTools = game.Players:GetPlayerFromCharacter(script.Parent).Backpack:GetChildren()
|
ice.Value = Vector3.new(ice.Value.X, ice.Value.Y - s, ice.Value.Z)
|
||||||
for i = 1, #currentChildren do
|
else
|
||||||
if currentChildren[i].className == "Tool" then
|
ice:remove()
|
||||||
inCharTag:Clone().Parent = currentChildren[i]
|
end
|
||||||
print(backpackTools)
|
end
|
||||||
table.insert(backpackTools, currentChildren[i])
|
|
||||||
|
if fire then
|
||||||
|
fireEffect.Enabled = true
|
||||||
|
fireEffect.Parent = Figure.Torso
|
||||||
|
delta = delta - fire.Value.X
|
||||||
|
if fire.Value.Y >= 0 then
|
||||||
|
fire.Value = Vector3.new(fire.Value.X, fire.Value.Y - s, fire.Value.Z)
|
||||||
|
else
|
||||||
|
fire:remove()
|
||||||
|
fireEffect.Enabled = false
|
||||||
|
fireEffect.Parent = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if stun then
|
||||||
|
if stun.Value > 0 then
|
||||||
|
Torso.Anchored = true
|
||||||
|
currentChildren = script.Parent:GetChildren()
|
||||||
|
backpackTools = game.Players:GetPlayerFromCharacter(script.Parent).Backpack:GetChildren()
|
||||||
|
for i = 1, #currentChildren do
|
||||||
|
if currentChildren[i].className == "Tool" then
|
||||||
|
inCharTag:Clone().Parent = currentChildren[i]
|
||||||
|
print(backpackTools)
|
||||||
|
table.insert(backpackTools, currentChildren[i])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
for i = 1, #backpackTools do
|
||||||
for i = 1, #backpackTools do
|
if backpackTools[i]:FindFirstChild "RobloxBuildTool" == nil then
|
||||||
if backpackTools[i]:FindFirstChild("RobloxBuildTool") == nil then
|
hider:Clone().Parent = backpackTools[i]
|
||||||
hider:Clone().Parent = backpackTools[i]
|
backpackTools[i].Parent = game.Lighting
|
||||||
backpackTools[i].Parent = game.Lighting
|
end
|
||||||
end
|
end
|
||||||
end
|
wait(0.2)
|
||||||
wait(0.2)
|
for i = 1, #backpackTools do
|
||||||
for i = 1, #backpackTools do
|
|
||||||
backpackTools[i].Parent = game.Players:GetPlayerFromCharacter(script.Parent).Backpack
|
|
||||||
end
|
|
||||||
stun.Value = stun.Value - s
|
|
||||||
else
|
|
||||||
Torso.Anchored = false
|
|
||||||
for i = 1, #backpackTools do
|
|
||||||
rbTool = backpackTools[i]:FindFirstChild("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
|
backpackTools[i].Parent = game.Players:GetPlayerFromCharacter(script.Parent).Backpack
|
||||||
end
|
end
|
||||||
|
stun.Value = stun.Value - s
|
||||||
|
else
|
||||||
|
Torso.Anchored = false
|
||||||
|
for i = 1, #backpackTools do
|
||||||
|
rbTool = backpackTools[i]:FindFirstChild "RobloxBuildTool"
|
||||||
|
if rbTool then
|
||||||
|
rbTool:Remove()
|
||||||
|
end
|
||||||
|
backpackTools[i].Parent = game.Lighting
|
||||||
|
end
|
||||||
|
wait(0.2)
|
||||||
|
for i = 1, #backpackTools do
|
||||||
|
wasInCharacter = backpackTools[i]:FindFirstChild "InCharTag"
|
||||||
|
if wasInChar then
|
||||||
|
wasInChar:Remove()
|
||||||
|
backpackTools[i].Parent = script.Parent
|
||||||
|
else
|
||||||
|
backpackTools[i].Parent = game.Players:GetPlayerFromCharacter(script.Parent).Backpack
|
||||||
|
end
|
||||||
|
end
|
||||||
|
stun:Remove()
|
||||||
end
|
end
|
||||||
stun:Remove()
|
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
if delta ~= 0 then
|
if delta ~= 0 then
|
||||||
newCo = coroutine.create(billboardHealthChange)
|
newCo = coroutine.create(billboardHealthChange)
|
||||||
coroutine.resume(newCo, delta)
|
coroutine.resume(newCo, delta)
|
||||||
|
end
|
||||||
|
--delta = delta * .01
|
||||||
end
|
end
|
||||||
--delta = delta * .01
|
--health = health + delta * s * Humanoid.MaxHealth
|
||||||
end
|
|
||||||
--health = health + delta * s * Humanoid.MaxHealth
|
health = Humanoid.Health + delta * s
|
||||||
|
if health * 1.01 < Humanoid.MaxHealth then
|
||||||
health = Humanoid.Health + delta * s
|
Humanoid.Health = health
|
||||||
if health * 1.01 < Humanoid.MaxHealth then
|
|
||||||
Humanoid.Health = health
|
|
||||||
--myHealth.Value = math.floor(Humanoid.Health)
|
--myHealth.Value = math.floor(Humanoid.Health)
|
||||||
elseif delta > 0 then
|
elseif delta > 0 then
|
||||||
Humanoid.Health = Humanoid.MaxHealth
|
Humanoid.Health = Humanoid.MaxHealth
|
||||||
--myHealth.Value = Humanoid.Health
|
--myHealth.Value = Humanoid.Health
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
|
||||||
350
39250920.lua
350
39250920.lua
|
|
@ -10,7 +10,6 @@ function waitForChild(instance, name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local mainFrame
|
local mainFrame
|
||||||
local choices = {}
|
local choices = {}
|
||||||
local lastChoice
|
local lastChoice
|
||||||
|
|
@ -19,15 +18,14 @@ local currentConversationDialog
|
||||||
local currentConversationPartner
|
local currentConversationPartner
|
||||||
local currentAbortDialogScript
|
local currentAbortDialogScript
|
||||||
|
|
||||||
local tooFarAwayMessage = "You are too far away to chat!"
|
local tooFarAwayMessage = "You are too far away to chat!"
|
||||||
local tooFarAwaySize = 300
|
local tooFarAwaySize = 300
|
||||||
local characterWanderedOffMessage = "Chat ended because you walked away"
|
local characterWanderedOffMessage = "Chat ended because you walked away"
|
||||||
local characterWanderedOffSize = 350
|
local characterWanderedOffSize = 350
|
||||||
local conversationTimedOut = "Chat ended because you didn't reply"
|
local conversationTimedOut = "Chat ended because you didn't reply"
|
||||||
local conversationTimedOutSize = 350
|
local conversationTimedOutSize = 350
|
||||||
|
|
||||||
local player
|
local player
|
||||||
local screenGui
|
|
||||||
local chatNotificationGui
|
local chatNotificationGui
|
||||||
local messageDialog
|
local messageDialog
|
||||||
local timeoutScript
|
local timeoutScript
|
||||||
|
|
@ -36,9 +34,9 @@ local dialogMap = {}
|
||||||
local dialogConnections = {}
|
local dialogConnections = {}
|
||||||
|
|
||||||
local gui = nil
|
local gui = nil
|
||||||
waitForChild(game,"CoreGui")
|
waitForChild(game, "CoreGui")
|
||||||
waitForChild(game.CoreGui,"RobloxGui")
|
waitForChild(game.CoreGui, "RobloxGui")
|
||||||
if game.CoreGui.RobloxGui:FindFirstChild("ControlFrame") then
|
if game.CoreGui.RobloxGui:FindFirstChild "ControlFrame" then
|
||||||
gui = game.CoreGui.RobloxGui.ControlFrame
|
gui = game.CoreGui.RobloxGui.ControlFrame
|
||||||
else
|
else
|
||||||
gui = game.CoreGui.RobloxGui
|
gui = game.CoreGui.RobloxGui
|
||||||
|
|
@ -51,38 +49,36 @@ function currentTone()
|
||||||
return Enum.DialogTone.Neutral
|
return Enum.DialogTone.Neutral
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function createChatNotificationGui()
|
function createChatNotificationGui()
|
||||||
chatNotificationGui = Instance.new("BillboardGui")
|
chatNotificationGui = Instance.new "BillboardGui"
|
||||||
chatNotificationGui.Name = "ChatNotificationGui"
|
chatNotificationGui.Name = "ChatNotificationGui"
|
||||||
chatNotificationGui.ExtentsOffset = Vector3.new(0,1,0)
|
chatNotificationGui.ExtentsOffset = Vector3.new(0, 1, 0)
|
||||||
chatNotificationGui.Size = UDim2.new(4, 0, 5.42857122, 0)
|
chatNotificationGui.Size = UDim2.new(4, 0, 5.42857122, 0)
|
||||||
chatNotificationGui.SizeOffset = Vector2.new(0,0)
|
chatNotificationGui.SizeOffset = Vector2.new(0, 0)
|
||||||
chatNotificationGui.StudsOffset = Vector3.new(0.4, 4.3, 0)
|
chatNotificationGui.StudsOffset = Vector3.new(0.4, 4.3, 0)
|
||||||
chatNotificationGui.Enabled = true
|
chatNotificationGui.Enabled = true
|
||||||
chatNotificationGui.RobloxLocked = true
|
chatNotificationGui.RobloxLocked = true
|
||||||
chatNotificationGui.Active = true
|
chatNotificationGui.Active = true
|
||||||
|
|
||||||
local image = Instance.new("ImageLabel")
|
local image = Instance.new "ImageLabel"
|
||||||
image.Name = "Image"
|
image.Name = "Image"
|
||||||
image.Active = false
|
image.Active = false
|
||||||
image.BackgroundTransparency = 1
|
image.BackgroundTransparency = 1
|
||||||
image.Position = UDim2.new(0,0,0,0)
|
image.Position = UDim2.new(0, 0, 0, 0)
|
||||||
image.Size = UDim2.new(1.0,0,1.0,0)
|
image.Size = UDim2.new(1, 0, 1, 0)
|
||||||
image.Image = ""
|
image.Image = ""
|
||||||
image.RobloxLocked = true
|
image.RobloxLocked = true
|
||||||
image.Parent = chatNotificationGui
|
image.Parent = chatNotificationGui
|
||||||
|
|
||||||
|
|
||||||
local button = Instance.new("ImageButton")
|
local button = Instance.new "ImageButton"
|
||||||
button.Name = "Button"
|
button.Name = "Button"
|
||||||
button.AutoButtonColor = false
|
button.AutoButtonColor = false
|
||||||
button.Position = UDim2.new(0.0879999995, 0, 0.0529999994, 0)
|
button.Position = UDim2.new(0.0879999995, 0, 0.0529999994, 0)
|
||||||
button.Size = UDim2.new(0.829999983, 0, 0.460000008, 0)
|
button.Size = UDim2.new(0.829999983, 0, 0.460000008, 0)
|
||||||
button.Image = ""
|
button.Image = ""
|
||||||
button.BackgroundTransparency = 1
|
button.BackgroundTransparency = 1
|
||||||
button.RobloxLocked = true
|
button.RobloxLocked = true
|
||||||
button.Parent = image
|
button.Parent = image
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -97,7 +93,7 @@ function getChatColor(tone)
|
||||||
end
|
end
|
||||||
|
|
||||||
function styleChoices(tone)
|
function styleChoices(tone)
|
||||||
for i, obj in pairs(choices) do
|
for _, obj in pairs(choices) do
|
||||||
resetColor(obj, tone)
|
resetColor(obj, tone)
|
||||||
end
|
end
|
||||||
resetColor(lastChoice, tone)
|
resetColor(lastChoice, tone)
|
||||||
|
|
@ -114,7 +110,7 @@ function styleMainFrame(tone)
|
||||||
mainFrame.Style = Enum.FrameStyle.ChatRed
|
mainFrame.Style = Enum.FrameStyle.ChatRed
|
||||||
mainFrame.Tail.Image = "rbxasset://textures/chatBubble_botRed_tailRight.png"
|
mainFrame.Tail.Image = "rbxasset://textures/chatBubble_botRed_tailRight.png"
|
||||||
end
|
end
|
||||||
|
|
||||||
styleChoices(tone)
|
styleChoices(tone)
|
||||||
end
|
end
|
||||||
function setChatNotificationTone(gui, purpose, tone)
|
function setChatNotificationTone(gui, purpose, tone)
|
||||||
|
|
@ -135,26 +131,26 @@ function setChatNotificationTone(gui, purpose, tone)
|
||||||
end
|
end
|
||||||
|
|
||||||
function createMessageDialog()
|
function createMessageDialog()
|
||||||
messageDialog = Instance.new("Frame");
|
messageDialog = Instance.new "Frame"
|
||||||
messageDialog.Name = "DialogScriptMessage"
|
messageDialog.Name = "DialogScriptMessage"
|
||||||
messageDialog.Style = Enum.FrameStyle.RobloxRound
|
messageDialog.Style = Enum.FrameStyle.RobloxRound
|
||||||
messageDialog.Visible = false
|
messageDialog.Visible = false
|
||||||
|
|
||||||
local text = Instance.new("TextLabel")
|
local text = Instance.new "TextLabel"
|
||||||
text.Name = "Text"
|
text.Name = "Text"
|
||||||
text.Position = UDim2.new(0,0,0,-1)
|
text.Position = UDim2.new(0, 0, 0, -1)
|
||||||
text.Size = UDim2.new(1,0,1,0)
|
text.Size = UDim2.new(1, 0, 1, 0)
|
||||||
text.FontSize = Enum.FontSize.Size14
|
text.FontSize = Enum.FontSize.Size14
|
||||||
text.BackgroundTransparency = 1
|
text.BackgroundTransparency = 1
|
||||||
text.TextColor3 = Color3.new(1,1,1)
|
text.TextColor3 = Color3.new(1, 1, 1)
|
||||||
text.RobloxLocked = true
|
text.RobloxLocked = true
|
||||||
text.Parent = messageDialog
|
text.Parent = messageDialog
|
||||||
end
|
end
|
||||||
|
|
||||||
function showMessage(msg, size)
|
function showMessage(msg, size)
|
||||||
messageDialog.Text.Text = msg
|
messageDialog.Text.Text = msg
|
||||||
messageDialog.Size = UDim2.new(0,size,0,40)
|
messageDialog.Size = UDim2.new(0, size, 0, 40)
|
||||||
messageDialog.Position = UDim2.new(0.5, -size/2, 0.5, -40)
|
messageDialog.Position = UDim2.new(0.5, -size / 2, 0.5, -40)
|
||||||
messageDialog.Visible = true
|
messageDialog.Visible = true
|
||||||
wait(2)
|
wait(2)
|
||||||
messageDialog.Visible = false
|
messageDialog.Visible = false
|
||||||
|
|
@ -162,60 +158,60 @@ end
|
||||||
|
|
||||||
function variableDelay(str)
|
function variableDelay(str)
|
||||||
local length = math.min(string.len(str), 100)
|
local length = math.min(string.len(str), 100)
|
||||||
wait(0.75 + ((length/75) * 1.5))
|
wait(0.75 + ((length / 75) * 1.5))
|
||||||
end
|
end
|
||||||
|
|
||||||
function resetColor(frame, tone)
|
function resetColor(frame, tone)
|
||||||
if tone == Enum.DialogTone.Neutral then
|
if tone == Enum.DialogTone.Neutral then
|
||||||
frame.BackgroundColor3 = Color3.new(0/255, 0/255, 179/255)
|
frame.BackgroundColor3 = Color3.new(0 / 255, 0 / 255, 179 / 255)
|
||||||
frame.Number.TextColor3 = Color3.new(45/255, 142/255, 245/255)
|
frame.Number.TextColor3 = Color3.new(45 / 255, 142 / 255, 245 / 255)
|
||||||
elseif tone == Enum.DialogTone.Friendly then
|
elseif tone == Enum.DialogTone.Friendly then
|
||||||
frame.BackgroundColor3 = Color3.new(0/255, 77/255, 0/255)
|
frame.BackgroundColor3 = Color3.new(0 / 255, 77 / 255, 0 / 255)
|
||||||
frame.Number.TextColor3 = Color3.new(0/255, 190/255, 0/255)
|
frame.Number.TextColor3 = Color3.new(0 / 255, 190 / 255, 0 / 255)
|
||||||
elseif tone == Enum.DialogTone.Enemy then
|
elseif tone == Enum.DialogTone.Enemy then
|
||||||
frame.BackgroundColor3 = Color3.new(140/255, 0/255, 0/255)
|
frame.BackgroundColor3 = Color3.new(140 / 255, 0 / 255, 0 / 255)
|
||||||
frame.Number.TextColor3 = Color3.new(255/255,88/255, 79/255)
|
frame.Number.TextColor3 = Color3.new(255 / 255, 88 / 255, 79 / 255)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function highlightColor(frame, tone)
|
function highlightColor(frame, tone)
|
||||||
if tone == Enum.DialogTone.Neutral then
|
if tone == Enum.DialogTone.Neutral then
|
||||||
frame.BackgroundColor3 = Color3.new(2/255, 108/255, 255/255)
|
frame.BackgroundColor3 = Color3.new(2 / 255, 108 / 255, 255 / 255)
|
||||||
frame.Number.TextColor3 = Color3.new(1, 1, 1)
|
frame.Number.TextColor3 = Color3.new(1, 1, 1)
|
||||||
elseif tone == Enum.DialogTone.Friendly then
|
elseif tone == Enum.DialogTone.Friendly then
|
||||||
frame.BackgroundColor3 = Color3.new(0/255, 128/255, 0/255)
|
frame.BackgroundColor3 = Color3.new(0 / 255, 128 / 255, 0 / 255)
|
||||||
frame.Number.TextColor3 = Color3.new(1, 1, 1)
|
frame.Number.TextColor3 = Color3.new(1, 1, 1)
|
||||||
elseif tone == Enum.DialogTone.Enemy then
|
elseif tone == Enum.DialogTone.Enemy then
|
||||||
frame.BackgroundColor3 = Color3.new(204/255, 0/255, 0/255)
|
frame.BackgroundColor3 = Color3.new(204 / 255, 0 / 255, 0 / 255)
|
||||||
frame.Number.TextColor3 = Color3.new(1, 1, 1)
|
frame.Number.TextColor3 = Color3.new(1, 1, 1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function wanderDialog()
|
function wanderDialog()
|
||||||
print("Wander")
|
print "Wander"
|
||||||
mainFrame.Visible = false
|
mainFrame.Visible = false
|
||||||
endDialog()
|
endDialog()
|
||||||
showMessage(characterWanderedOffMessage, characterWanderedOffSize)
|
showMessage(characterWanderedOffMessage, characterWanderedOffSize)
|
||||||
end
|
end
|
||||||
|
|
||||||
function timeoutDialog()
|
function timeoutDialog()
|
||||||
print("Timeout")
|
print "Timeout"
|
||||||
mainFrame.Visible = false
|
mainFrame.Visible = false
|
||||||
endDialog()
|
endDialog()
|
||||||
showMessage(conversationTimedOut, conversationTimedOutSize)
|
showMessage(conversationTimedOut, conversationTimedOutSize)
|
||||||
end
|
end
|
||||||
function normalEndDialog()
|
function normalEndDialog()
|
||||||
print("Done")
|
print "Done"
|
||||||
endDialog()
|
endDialog()
|
||||||
end
|
end
|
||||||
|
|
||||||
function endDialog()
|
function endDialog()
|
||||||
if currentAbortDialogScript then
|
if currentAbortDialogScript then
|
||||||
currentAbortDialogScript:Remove()
|
currentAbortDialogScript:Remove()
|
||||||
currentAbortDialogScript = nil
|
currentAbortDialogScript = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
local dialog = currentConversationDialog
|
local dialog = currentConversationDialog
|
||||||
currentConversationDialog = nil
|
currentConversationDialog = nil
|
||||||
if dialog and dialog.InUse then
|
if dialog and dialog.InUse then
|
||||||
local reenableScript = reenableDialogScript:Clone()
|
local reenableScript = reenableDialogScript:Clone()
|
||||||
|
|
@ -234,11 +230,11 @@ function endDialog()
|
||||||
end
|
end
|
||||||
|
|
||||||
function sanitizeMessage(msg)
|
function sanitizeMessage(msg)
|
||||||
if string.len(msg) == 0 then
|
if string.len(msg) == 0 then
|
||||||
return "..."
|
return "..."
|
||||||
else
|
else
|
||||||
return msg
|
return msg
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function selectChoice(choice)
|
function selectChoice(choice)
|
||||||
|
|
@ -248,109 +244,125 @@ function selectChoice(choice)
|
||||||
mainFrame.Visible = false
|
mainFrame.Visible = false
|
||||||
if choice == lastChoice then
|
if choice == lastChoice then
|
||||||
game.Chat:Chat(game.Players.LocalPlayer.Character, "Goodbye!", getChatColor(currentTone()))
|
game.Chat:Chat(game.Players.LocalPlayer.Character, "Goodbye!", getChatColor(currentTone()))
|
||||||
|
|
||||||
normalEndDialog()
|
normalEndDialog()
|
||||||
else
|
else
|
||||||
local dialogChoice = choiceMap[choice]
|
local dialogChoice = choiceMap[choice]
|
||||||
|
|
||||||
game.Chat:Chat(game.Players.LocalPlayer.Character, sanitizeMessage(dialogChoice.UserDialog), getChatColor(currentTone()))
|
game.Chat:Chat(
|
||||||
|
game.Players.LocalPlayer.Character,
|
||||||
|
sanitizeMessage(dialogChoice.UserDialog),
|
||||||
|
getChatColor(currentTone())
|
||||||
|
)
|
||||||
wait(1)
|
wait(1)
|
||||||
currentConversationDialog:SignalDialogChoiceSelected(player, dialogChoice)
|
currentConversationDialog:SignalDialogChoiceSelected(player, dialogChoice)
|
||||||
game.Chat:Chat(currentConversationPartner, sanitizeMessage(dialogChoice.ResponseDialog), getChatColor(currentTone()))
|
game.Chat:Chat(
|
||||||
|
currentConversationPartner,
|
||||||
|
sanitizeMessage(dialogChoice.ResponseDialog),
|
||||||
|
getChatColor(currentTone())
|
||||||
|
)
|
||||||
|
|
||||||
variableDelay(dialogChoice.ResponseDialog)
|
variableDelay(dialogChoice.ResponseDialog)
|
||||||
presentDialogChoices(currentConversationPartner, dialogChoice:GetChildren())
|
presentDialogChoices(currentConversationPartner, dialogChoice:GetChildren())
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function newChoice(numberText)
|
function newChoice(numberText)
|
||||||
local frame = Instance.new("TextButton")
|
local frame = Instance.new "TextButton"
|
||||||
frame.BackgroundColor3 = Color3.new(0/255, 0/255, 179/255)
|
frame.BackgroundColor3 = Color3.new(0 / 255, 0 / 255, 179 / 255)
|
||||||
frame.AutoButtonColor = false
|
frame.AutoButtonColor = false
|
||||||
frame.BorderSizePixel = 0
|
frame.BorderSizePixel = 0
|
||||||
frame.Text = ""
|
frame.Text = ""
|
||||||
frame.MouseEnter:connect(function() highlightColor(frame, currentTone()) end)
|
frame.MouseEnter:connect(function()
|
||||||
frame.MouseLeave:connect(function() resetColor(frame, currentTone()) end)
|
highlightColor(frame, currentTone())
|
||||||
frame.MouseButton1Click:connect(function() selectChoice(frame) end)
|
end)
|
||||||
frame.RobloxLocked = true
|
frame.MouseLeave:connect(function()
|
||||||
|
resetColor(frame, currentTone())
|
||||||
|
end)
|
||||||
|
frame.MouseButton1Click:connect(function()
|
||||||
|
selectChoice(frame)
|
||||||
|
end)
|
||||||
|
frame.RobloxLocked = true
|
||||||
|
|
||||||
local number = Instance.new("TextLabel")
|
local number = Instance.new "TextLabel"
|
||||||
number.Name = "Number"
|
number.Name = "Number"
|
||||||
number.TextColor3 = Color3.new(127/255, 212/255, 255/255)
|
number.TextColor3 = Color3.new(127 / 255, 212 / 255, 255 / 255)
|
||||||
number.Text = numberText
|
number.Text = numberText
|
||||||
number.FontSize = Enum.FontSize.Size14
|
number.FontSize = Enum.FontSize.Size14
|
||||||
number.BackgroundTransparency = 1
|
number.BackgroundTransparency = 1
|
||||||
number.Position = UDim2.new(0,4,0,2)
|
number.Position = UDim2.new(0, 4, 0, 2)
|
||||||
number.Size = UDim2.new(0,20,0,24)
|
number.Size = UDim2.new(0, 20, 0, 24)
|
||||||
number.TextXAlignment = Enum.TextXAlignment.Left
|
number.TextXAlignment = Enum.TextXAlignment.Left
|
||||||
number.TextYAlignment = Enum.TextYAlignment.Top
|
number.TextYAlignment = Enum.TextYAlignment.Top
|
||||||
number.RobloxLocked = true
|
number.RobloxLocked = true
|
||||||
number.Parent = frame
|
number.Parent = frame
|
||||||
|
|
||||||
local prompt = Instance.new("TextLabel")
|
local prompt = Instance.new "TextLabel"
|
||||||
prompt.Name = "UserPrompt"
|
prompt.Name = "UserPrompt"
|
||||||
prompt.BackgroundTransparency = 1
|
prompt.BackgroundTransparency = 1
|
||||||
prompt.TextColor3 = Color3.new(1,1,1)
|
prompt.TextColor3 = Color3.new(1, 1, 1)
|
||||||
prompt.FontSize = Enum.FontSize.Size14
|
prompt.FontSize = Enum.FontSize.Size14
|
||||||
prompt.Position = UDim2.new(0,28, 0, 2)
|
prompt.Position = UDim2.new(0, 28, 0, 2)
|
||||||
prompt.Size = UDim2.new(1,-32, 1, -4)
|
prompt.Size = UDim2.new(1, -32, 1, -4)
|
||||||
prompt.TextXAlignment = Enum.TextXAlignment.Left
|
prompt.TextXAlignment = Enum.TextXAlignment.Left
|
||||||
prompt.TextYAlignment = Enum.TextYAlignment.Top
|
prompt.TextYAlignment = Enum.TextYAlignment.Top
|
||||||
prompt.TextWrap = true
|
prompt.TextWrap = true
|
||||||
prompt.RobloxLocked = true
|
prompt.RobloxLocked = true
|
||||||
prompt.Parent = frame
|
prompt.Parent = frame
|
||||||
|
|
||||||
return frame
|
return frame
|
||||||
end
|
end
|
||||||
function initialize(parent)
|
function initialize(parent)
|
||||||
choices[1] = newChoice("1)")
|
choices[1] = newChoice "1)"
|
||||||
choices[2] = newChoice("2)")
|
choices[2] = newChoice "2)"
|
||||||
choices[3] = newChoice("3)")
|
choices[3] = newChoice "3)"
|
||||||
choices[4] = newChoice("4)")
|
choices[4] = newChoice "4)"
|
||||||
|
|
||||||
lastChoice = newChoice("5)")
|
lastChoice = newChoice "5)"
|
||||||
lastChoice.UserPrompt.Text = "Goodbye!"
|
lastChoice.UserPrompt.Text = "Goodbye!"
|
||||||
lastChoice.Size = UDim2.new(1,0,0,28)
|
lastChoice.Size = UDim2.new(1, 0, 0, 28)
|
||||||
|
|
||||||
mainFrame = Instance.new("Frame")
|
mainFrame = Instance.new "Frame"
|
||||||
mainFrame.Name = "UserDialogArea"
|
mainFrame.Name = "UserDialogArea"
|
||||||
mainFrame.Size = UDim2.new(0, 350, 0, 200)
|
mainFrame.Size = UDim2.new(0, 350, 0, 200)
|
||||||
mainFrame.Style = Enum.FrameStyle.ChatBlue
|
mainFrame.Style = Enum.FrameStyle.ChatBlue
|
||||||
mainFrame.Visible = false
|
mainFrame.Visible = false
|
||||||
|
|
||||||
imageLabel = Instance.new("ImageLabel")
|
imageLabel = Instance.new "ImageLabel"
|
||||||
imageLabel.Name = "Tail"
|
imageLabel.Name = "Tail"
|
||||||
imageLabel.Size = UDim2.new(0,62,0,53)
|
imageLabel.Size = UDim2.new(0, 62, 0, 53)
|
||||||
imageLabel.Position = UDim2.new(1,8,0.25)
|
imageLabel.Position = UDim2.new(1, 8, 0.25)
|
||||||
imageLabel.Image = "rbxasset://textures/chatBubble_botBlue_tailRight.png"
|
imageLabel.Image = "rbxasset://textures/chatBubble_botBlue_tailRight.png"
|
||||||
imageLabel.BackgroundTransparency = 1
|
imageLabel.BackgroundTransparency = 1
|
||||||
imageLabel.RobloxLocked = true
|
imageLabel.RobloxLocked = true
|
||||||
imageLabel.Parent = mainFrame
|
imageLabel.Parent = mainFrame
|
||||||
|
|
||||||
for n, obj in pairs(choices) do
|
for n, obj in pairs(choices) do
|
||||||
obj.RobloxLocked = true
|
obj.RobloxLocked = true
|
||||||
obj.Parent = mainFrame
|
obj.Parent = mainFrame
|
||||||
end
|
end
|
||||||
lastChoice.RobloxLocked = true
|
lastChoice.RobloxLocked = true
|
||||||
lastChoice.Parent = mainFrame
|
lastChoice.Parent = mainFrame
|
||||||
|
|
||||||
mainFrame.RobloxLocked = true
|
mainFrame.RobloxLocked = true
|
||||||
mainFrame.Parent = parent
|
mainFrame.Parent = parent
|
||||||
end
|
end
|
||||||
|
|
||||||
function presentDialogChoices(talkingPart, dialogChoices)
|
function presentDialogChoices(talkingPart, dialogChoices)
|
||||||
if not currentConversationDialog then
|
if not currentConversationDialog then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
currentConversationPartner = talkingPart
|
currentConversationPartner = talkingPart
|
||||||
sortedDialogChoices = {}
|
sortedDialogChoices = {}
|
||||||
for n, obj in pairs(dialogChoices) do
|
for n, obj in pairs(dialogChoices) do
|
||||||
if obj:IsA("DialogChoice") then
|
if obj:IsA "DialogChoice" then
|
||||||
table.insert(sortedDialogChoices, obj)
|
table.insert(sortedDialogChoices, obj)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
table.sort(sortedDialogChoices, function(a,b) return a.Name < b.Name end)
|
table.sort(sortedDialogChoices, function(a, b)
|
||||||
|
return a.Name < b.Name
|
||||||
|
end)
|
||||||
|
|
||||||
if #sortedDialogChoices == 0 then
|
if #sortedDialogChoices == 0 then
|
||||||
normalEndDialog()
|
normalEndDialog()
|
||||||
|
|
@ -358,7 +370,7 @@ function presentDialogChoices(talkingPart, dialogChoices)
|
||||||
end
|
end
|
||||||
|
|
||||||
local pos = 1
|
local pos = 1
|
||||||
local yPosition = 0
|
local yPosition = 0
|
||||||
choiceMap = {}
|
choiceMap = {}
|
||||||
for n, obj in pairs(choices) do
|
for n, obj in pairs(choices) do
|
||||||
obj.Visible = false
|
obj.Visible = false
|
||||||
|
|
@ -367,14 +379,14 @@ function presentDialogChoices(talkingPart, dialogChoices)
|
||||||
for n, obj in pairs(sortedDialogChoices) do
|
for n, obj in pairs(sortedDialogChoices) do
|
||||||
if pos <= #choices then
|
if pos <= #choices then
|
||||||
--3 lines is the maximum, set it to that temporarily
|
--3 lines is the maximum, set it to that temporarily
|
||||||
choices[pos].Size = UDim2.new(1, 0, 0, 24*3)
|
choices[pos].Size = UDim2.new(1, 0, 0, 24 * 3)
|
||||||
choices[pos].UserPrompt.Text = obj.UserDialog
|
choices[pos].UserPrompt.Text = obj.UserDialog
|
||||||
local height = math.ceil(choices[pos].UserPrompt.TextBounds.Y/24)*24
|
local height = math.ceil(choices[pos].UserPrompt.TextBounds.Y / 24) * 24
|
||||||
|
|
||||||
choices[pos].Position = UDim2.new(0, 0, 0, yPosition)
|
choices[pos].Position = UDim2.new(0, 0, 0, yPosition)
|
||||||
choices[pos].Size = UDim2.new(1, 0, 0, height)
|
choices[pos].Size = UDim2.new(1, 0, 0, height)
|
||||||
choices[pos].Visible = true
|
choices[pos].Visible = true
|
||||||
|
|
||||||
choiceMap[choices[pos]] = obj
|
choiceMap[choices[pos]] = obj
|
||||||
|
|
||||||
yPosition = yPosition + height
|
yPosition = yPosition + height
|
||||||
|
|
@ -382,11 +394,11 @@ function presentDialogChoices(talkingPart, dialogChoices)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
lastChoice.Position = UDim2.new(0,0,0,yPosition)
|
lastChoice.Position = UDim2.new(0, 0, 0, yPosition)
|
||||||
lastChoice.Number.Text = pos .. ")"
|
lastChoice.Number.Text = pos .. ")"
|
||||||
|
|
||||||
mainFrame.Size = UDim2.new(0, 350, 0, yPosition+24+32)
|
mainFrame.Size = UDim2.new(0, 350, 0, yPosition + 24 + 32)
|
||||||
mainFrame.Position = UDim2.new(0,20,0.0, -mainFrame.Size.Y.Offset-20)
|
mainFrame.Position = UDim2.new(0, 20, 0, -mainFrame.Size.Y.Offset - 20)
|
||||||
styleMainFrame(currentTone())
|
styleMainFrame(currentTone())
|
||||||
mainFrame.Visible = true
|
mainFrame.Visible = true
|
||||||
end
|
end
|
||||||
|
|
@ -398,7 +410,7 @@ function doDialog(dialog)
|
||||||
|
|
||||||
if dialog.InUse then
|
if dialog.InUse then
|
||||||
Instance.Unlock(dialog)
|
Instance.Unlock(dialog)
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
dialog.InUse = true
|
dialog.InUse = true
|
||||||
Instance.Unlock(dialog)
|
Instance.Unlock(dialog)
|
||||||
|
|
@ -425,20 +437,26 @@ end
|
||||||
|
|
||||||
function checkForLeaveArea()
|
function checkForLeaveArea()
|
||||||
while currentConversationDialog do
|
while currentConversationDialog do
|
||||||
if currentConversationDialog.Parent and (player:DistanceFromCharacter(currentConversationDialog.Parent.Position) >= currentConversationDialog.ConversationDistance) then
|
if
|
||||||
|
currentConversationDialog.Parent
|
||||||
|
and (
|
||||||
|
player:DistanceFromCharacter(currentConversationDialog.Parent.Position)
|
||||||
|
>= currentConversationDialog.ConversationDistance
|
||||||
|
)
|
||||||
|
then
|
||||||
wanderDialog()
|
wanderDialog()
|
||||||
end
|
end
|
||||||
wait(1)
|
wait(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function startDialog(dialog)
|
function startDialog(dialog)
|
||||||
if dialog.Parent and dialog.Parent:IsA("BasePart") then
|
if dialog.Parent and dialog.Parent:IsA "BasePart" then
|
||||||
if player:DistanceFromCharacter(dialog.Parent.Position) >= dialog.ConversationDistance then
|
if player:DistanceFromCharacter(dialog.Parent.Position) >= dialog.ConversationDistance then
|
||||||
showMessage(tooFarAwayMessage, tooFarAwaySize)
|
showMessage(tooFarAwayMessage, tooFarAwaySize)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
for dialog, gui in pairs(dialogMap) do
|
for dialog, gui in pairs(dialogMap) do
|
||||||
if dialog and gui then
|
if dialog and gui then
|
||||||
gui.Enabled = false
|
gui.Enabled = false
|
||||||
|
|
@ -453,34 +471,36 @@ function startDialog(dialog)
|
||||||
end
|
end
|
||||||
|
|
||||||
function removeDialog(dialog)
|
function removeDialog(dialog)
|
||||||
if dialogMap[dialog] then
|
if dialogMap[dialog] then
|
||||||
dialogMap[dialog]:Remove()
|
dialogMap[dialog]:Remove()
|
||||||
dialogMap[dialog] = nil
|
dialogMap[dialog] = nil
|
||||||
end
|
end
|
||||||
if dialogConnections[dialog] then
|
if dialogConnections[dialog] then
|
||||||
dialogConnections[dialog]:disconnect()
|
dialogConnections[dialog]:disconnect()
|
||||||
dialogConnections[dialog] = nil
|
dialogConnections[dialog] = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function addDialog(dialog)
|
function addDialog(dialog)
|
||||||
if dialog.Parent then
|
if dialog.Parent then
|
||||||
if dialog.Parent:IsA("BasePart") then
|
if dialog.Parent:IsA "BasePart" then
|
||||||
local chatGui = chatNotificationGui:clone()
|
local chatGui = chatNotificationGui:clone()
|
||||||
chatGui.Enabled = not dialog.InUse
|
chatGui.Enabled = not dialog.InUse
|
||||||
chatGui.Adornee = dialog.Parent
|
chatGui.Adornee = dialog.Parent
|
||||||
chatGui.RobloxLocked = true
|
chatGui.RobloxLocked = true
|
||||||
chatGui.Parent = game.CoreGui
|
chatGui.Parent = game.CoreGui
|
||||||
chatGui.Image.Button.MouseButton1Click:connect(function() startDialog(dialog) end)
|
chatGui.Image.Button.MouseButton1Click:connect(function()
|
||||||
|
startDialog(dialog)
|
||||||
|
end)
|
||||||
setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone)
|
setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone)
|
||||||
|
|
||||||
dialogMap[dialog] = chatGui
|
dialogMap[dialog] = chatGui
|
||||||
|
|
||||||
dialogConnections[dialog] = dialog.Changed:connect(function(prop)
|
dialogConnections[dialog] = dialog.Changed:connect(function(prop)
|
||||||
if prop == "Parent" and dialog.Parent then
|
if prop == "Parent" and dialog.Parent then
|
||||||
--This handles the reparenting case, seperate from removal case
|
--This handles the reparenting case, seperate from removal case
|
||||||
removeDialog(dialog)
|
removeDialog(dialog)
|
||||||
addDialog(dialog)
|
addDialog(dialog)
|
||||||
elseif prop == "InUse" then
|
elseif prop == "InUse" then
|
||||||
chatGui.Enabled = not currentConversationDialog and not dialog.InUse
|
chatGui.Enabled = not currentConversationDialog and not dialog.InUse
|
||||||
if dialog == currentConversationDialog then
|
if dialog == currentConversationDialog then
|
||||||
|
|
@ -488,15 +508,15 @@ function addDialog(dialog)
|
||||||
end
|
end
|
||||||
elseif prop == "Tone" or prop == "Purpose" then
|
elseif prop == "Tone" or prop == "Purpose" then
|
||||||
setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone)
|
setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
else -- still need to listen to parent changes even if current parent is not a BasePart
|
else -- still need to listen to parent changes even if current parent is not a BasePart
|
||||||
dialogConnections[dialog] = dialog.Changed:connect(function(prop)
|
dialogConnections[dialog] = dialog.Changed:connect(function(prop)
|
||||||
if prop == "Parent" and dialog.Parent then
|
if prop == "Parent" and dialog.Parent then
|
||||||
--This handles the reparenting case, seperate from removal case
|
--This handles the reparenting case, seperate from removal case
|
||||||
removeDialog(dialog)
|
removeDialog(dialog)
|
||||||
addDialog(dialog)
|
addDialog(dialog)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -504,57 +524,65 @@ end
|
||||||
|
|
||||||
function fetchScripts()
|
function fetchScripts()
|
||||||
local model = game:GetService("InsertService"):LoadAsset(39226062)
|
local model = game:GetService("InsertService"):LoadAsset(39226062)
|
||||||
if type(model) == "string" then -- load failed, lets try again
|
if type(model) == "string" then -- load failed, lets try again
|
||||||
wait(0.1)
|
wait(0.1)
|
||||||
model = game:GetService("InsertService"):LoadAsset(39226062)
|
model = game:GetService("InsertService"):LoadAsset(39226062)
|
||||||
end
|
end
|
||||||
if type(model) == "string" then -- not going to work, lets bail
|
if type(model) == "string" then -- not going to work, lets bail
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
waitForChild(model,"TimeoutScript")
|
waitForChild(model, "TimeoutScript")
|
||||||
timeoutScript = model.TimeoutScript
|
timeoutScript = model.TimeoutScript
|
||||||
waitForChild(model,"ReenableDialogScript")
|
waitForChild(model, "ReenableDialogScript")
|
||||||
reenableDialogScript = model.ReenableDialogScript
|
reenableDialogScript = model.ReenableDialogScript
|
||||||
end
|
end
|
||||||
|
|
||||||
function onLoad()
|
function onLoad()
|
||||||
waitForProperty(game.Players, "LocalPlayer")
|
waitForProperty(game.Players, "LocalPlayer")
|
||||||
player = game.Players.LocalPlayer
|
player = game.Players.LocalPlayer
|
||||||
waitForProperty(player, "Character")
|
waitForProperty(player, "Character")
|
||||||
|
|
||||||
--print("Fetching Scripts")
|
--print("Fetching Scripts")
|
||||||
fetchScripts()
|
fetchScripts()
|
||||||
|
|
||||||
--print("Creating Guis")
|
--print("Creating Guis")
|
||||||
createChatNotificationGui()
|
createChatNotificationGui()
|
||||||
|
|
||||||
--print("Creating MessageDialog")
|
--print("Creating MessageDialog")
|
||||||
createMessageDialog()
|
createMessageDialog()
|
||||||
messageDialog.RobloxLocked = true
|
messageDialog.RobloxLocked = true
|
||||||
messageDialog.Parent = gui
|
messageDialog.Parent = gui
|
||||||
|
|
||||||
--print("Waiting for BottomLeftControl")
|
|
||||||
waitForChild(gui, "BottomLeftControl")
|
|
||||||
|
|
||||||
--print("Initializing Frame")
|
|
||||||
local frame = Instance.new("Frame")
|
|
||||||
frame.Name = "DialogFrame"
|
|
||||||
frame.Position = UDim2.new(0,0,0,0)
|
|
||||||
frame.Size = UDim2.new(0,0,0,0)
|
|
||||||
frame.BackgroundTransparency = 1
|
|
||||||
frame.RobloxLocked = true
|
|
||||||
frame.Parent = gui.BottomLeftControl
|
|
||||||
initialize(frame)
|
|
||||||
|
|
||||||
--print("Adding Dialogs")
|
--print("Waiting for BottomLeftControl")
|
||||||
game.CollectionService.ItemAdded:connect(function(obj) if obj:IsA("Dialog") then addDialog(obj) end end)
|
waitForChild(gui, "BottomLeftControl")
|
||||||
game.CollectionService.ItemRemoved:connect(function(obj) if obj:IsA("Dialog") then removeDialog(obj) end end)
|
|
||||||
for i, obj in pairs(game.CollectionService:GetCollection("Dialog")) do
|
--print("Initializing Frame")
|
||||||
if obj:IsA("Dialog") then
|
local frame = Instance.new "Frame"
|
||||||
addDialog(obj)
|
frame.Name = "DialogFrame"
|
||||||
end
|
frame.Position = UDim2.new(0, 0, 0, 0)
|
||||||
end
|
frame.Size = UDim2.new(0, 0, 0, 0)
|
||||||
|
frame.BackgroundTransparency = 1
|
||||||
|
frame.RobloxLocked = true
|
||||||
|
frame.Parent = gui.BottomLeftControl
|
||||||
|
initialize(frame)
|
||||||
|
|
||||||
|
--print("Adding Dialogs")
|
||||||
|
game.CollectionService.ItemAdded:connect(function(obj)
|
||||||
|
if obj:IsA "Dialog" then
|
||||||
|
addDialog(obj)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
game.CollectionService.ItemRemoved:connect(function(obj)
|
||||||
|
if obj:IsA "Dialog" then
|
||||||
|
removeDialog(obj)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
for _, obj in pairs(game.CollectionService:GetCollection "Dialog") do
|
||||||
|
if obj:IsA "Dialog" then
|
||||||
|
addDialog(obj)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
onLoad()
|
onLoad()
|
||||||
|
|
|
||||||
2675
45284430.lua
2675
45284430.lua
File diff suppressed because it is too large
Load Diff
31
45374389.lua
31
45374389.lua
|
|
@ -1,23 +1,20 @@
|
||||||
local t = {}
|
local t = {}
|
||||||
|
|
||||||
t.Foo =
|
t.Foo = function()
|
||||||
function()
|
print "foo"
|
||||||
print("foo")
|
end
|
||||||
end
|
|
||||||
|
|
||||||
t.Bar =
|
t.Bar = function()
|
||||||
function()
|
print "bar"
|
||||||
print("bar")
|
end
|
||||||
end
|
|
||||||
|
|
||||||
t.Help =
|
t.Help = function(funcNameOrFunc)
|
||||||
function(funcNameOrFunc)
|
--input argument can be a string or a function. Should return a description (of arguments and expected side effects)
|
||||||
--input argument can be a string or a function. Should return a description (of arguments and expected side effects)
|
if funcNameOrFunc == "Foo" or funcNameOrFunc == t.Foo then
|
||||||
if funcNameOrFunc == "Foo" or funcNameOrFunc == t.Foo then
|
return "Function Foo. Arguments: None. Side effect: prints foo"
|
||||||
return "Function Foo. Arguments: None. Side effect: prints foo"
|
elseif funcNameOrFunc == "Bar" or funcNameOrFunc == t.Bar then
|
||||||
elseif funcNameOrFunc == "Bar" or funcNameOrFunc == t.Bar then
|
return "Function Bar. Arguments: None. Side effect: prints bar"
|
||||||
return "Function Bar. Arguments: None. Side effect: prints bar"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return t
|
return t
|
||||||
|
|
|
||||||
2484
46295863.lua
2484
46295863.lua
File diff suppressed because it is too large
Load Diff
2921
48488235.lua
2921
48488235.lua
File diff suppressed because it is too large
Load Diff
317
48488398.lua
317
48488398.lua
|
|
@ -9,101 +9,134 @@ function waitForChild(instance, name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
waitForProperty(game.Players,"LocalPlayer")
|
waitForProperty(game.Players, "LocalPlayer")
|
||||||
waitForChild(script.Parent,"Popup")
|
waitForChild(script.Parent, "Popup")
|
||||||
waitForChild(script.Parent.Popup,"AcceptButton")
|
waitForChild(script.Parent.Popup, "AcceptButton")
|
||||||
script.Parent.Popup.AcceptButton.Modal = true
|
script.Parent.Popup.AcceptButton.Modal = true
|
||||||
|
|
||||||
local localPlayer = game.Players.LocalPlayer
|
local localPlayer = game.Players.LocalPlayer
|
||||||
local teleportUI = nil
|
local teleportUI = nil
|
||||||
|
|
||||||
local acceptedTeleport = Instance.new("IntValue")
|
|
||||||
|
|
||||||
local friendRequestBlacklist = {}
|
local friendRequestBlacklist = {}
|
||||||
|
|
||||||
local teleportEnabled = true
|
local teleportEnabled = true
|
||||||
|
|
||||||
local makePopupInvisible = function()
|
local makePopupInvisible = function()
|
||||||
if script.Parent.Popup then script.Parent.Popup.Visible = false end
|
if script.Parent.Popup then
|
||||||
|
script.Parent.Popup.Visible = false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function makeFriend(fromPlayer,toPlayer)
|
function makeFriend(fromPlayer, toPlayer)
|
||||||
|
local popup = script.Parent:FindFirstChild "Popup"
|
||||||
local popup = script.Parent:FindFirstChild("Popup")
|
if popup == nil then
|
||||||
if popup == nil then return end -- there is no popup!
|
return
|
||||||
if popup.Visible then return end -- currently popping something, abort!
|
end -- there is no popup!
|
||||||
if friendRequestBlacklist[fromPlayer] then return end -- previously cancelled friend request, we don't want it!
|
if popup.Visible then
|
||||||
|
return
|
||||||
|
end -- currently popping something, abort!
|
||||||
|
if friendRequestBlacklist[fromPlayer] then
|
||||||
|
return
|
||||||
|
end -- previously cancelled friend request, we don't want it!
|
||||||
|
|
||||||
popup.PopupText.Text = "Accept Friend Request from " .. tostring(fromPlayer.Name) .. "?"
|
popup.PopupText.Text = "Accept Friend Request from " .. tostring(fromPlayer.Name) .. "?"
|
||||||
popup.PopupImage.Image = "http://www.roblox.com/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=352&y=352"
|
popup.PopupImage.Image = "http://www.roblox.com/thumbs/avatar.ashx?userId="
|
||||||
|
.. tostring(fromPlayer.userId)
|
||||||
|
.. "&x=352&y=352"
|
||||||
|
|
||||||
showTwoButtons()
|
showTwoButtons()
|
||||||
popup.Visible = true
|
popup.Visible = true
|
||||||
popup.AcceptButton.Text = "Accept"
|
popup.AcceptButton.Text = "Accept"
|
||||||
popup.DeclineButton.Text = "Decline"
|
popup.DeclineButton.Text = "Decline"
|
||||||
popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true)
|
popup:TweenSize(UDim2.new(0, 330, 0, 350), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 1, true)
|
||||||
|
|
||||||
local yesCon, noCon
|
local yesCon, noCon
|
||||||
|
|
||||||
yesCon = popup.AcceptButton.MouseButton1Click:connect(function()
|
yesCon = popup.AcceptButton.MouseButton1Click:connect(function()
|
||||||
popup.Visible = false
|
popup.Visible = false
|
||||||
toPlayer:RequestFriendship(fromPlayer)
|
toPlayer:RequestFriendship(fromPlayer)
|
||||||
if yesCon then yesCon:disconnect() end
|
if yesCon then
|
||||||
if noCon then noCon:disconnect() end
|
yesCon:disconnect()
|
||||||
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible())
|
end
|
||||||
|
if noCon then
|
||||||
|
noCon:disconnect()
|
||||||
|
end
|
||||||
|
popup:TweenSize(
|
||||||
|
UDim2.new(0, 0, 0, 0),
|
||||||
|
Enum.EasingDirection.Out,
|
||||||
|
Enum.EasingStyle.Quart,
|
||||||
|
1,
|
||||||
|
true,
|
||||||
|
makePopupInvisible()
|
||||||
|
)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
noCon = popup.DeclineButton.MouseButton1Click:connect(function()
|
noCon = popup.DeclineButton.MouseButton1Click:connect(function()
|
||||||
popup.Visible = false
|
popup.Visible = false
|
||||||
toPlayer:RevokeFriendship(fromPlayer)
|
toPlayer:RevokeFriendship(fromPlayer)
|
||||||
friendRequestBlacklist[fromPlayer] = true
|
friendRequestBlacklist[fromPlayer] = true
|
||||||
print("pop up blacklist")
|
print "pop up blacklist"
|
||||||
if yesCon then yesCon:disconnect() end
|
if yesCon then
|
||||||
if noCon then noCon:disconnect() end
|
yesCon:disconnect()
|
||||||
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible())
|
end
|
||||||
|
if noCon then
|
||||||
|
noCon:disconnect()
|
||||||
|
end
|
||||||
|
popup:TweenSize(
|
||||||
|
UDim2.new(0, 0, 0, 0),
|
||||||
|
Enum.EasingDirection.Out,
|
||||||
|
Enum.EasingStyle.Quart,
|
||||||
|
1,
|
||||||
|
true,
|
||||||
|
makePopupInvisible()
|
||||||
|
)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
game.Players.FriendRequestEvent:connect(function(fromPlayer, toPlayer, event)
|
||||||
game.Players.FriendRequestEvent:connect(function(fromPlayer,toPlayer,event)
|
|
||||||
|
|
||||||
-- if this doesn't involve me, then do nothing
|
-- if this doesn't involve me, then do nothing
|
||||||
if fromPlayer ~= localPlayer and toPlayer ~= localPlayer then return end
|
if fromPlayer ~= localPlayer and toPlayer ~= localPlayer then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
if fromPlayer == localPlayer then
|
if fromPlayer == localPlayer then
|
||||||
if event == Enum.FriendRequestEvent.Accept then
|
if event == Enum.FriendRequestEvent.Accept then
|
||||||
game:GetService("GuiService"):SendNotification("You are Friends",
|
game:GetService("GuiService"):SendNotification(
|
||||||
"With " .. toPlayer.Name .. "!",
|
"You are Friends",
|
||||||
"http://www.roblox.com/thumbs/avatar.ashx?userId="..tostring(toPlayer.userId).."&x=48&y=48",
|
"With " .. toPlayer.Name .. "!",
|
||||||
5,
|
"http://www.roblox.com/thumbs/avatar.ashx?userId=" .. tostring(toPlayer.userId) .. "&x=48&y=48",
|
||||||
function()
|
5,
|
||||||
|
function() end
|
||||||
end)
|
)
|
||||||
end
|
end
|
||||||
elseif toPlayer == localPlayer then
|
elseif toPlayer == localPlayer then
|
||||||
if event == Enum.FriendRequestEvent.Issue then
|
if event == Enum.FriendRequestEvent.Issue then
|
||||||
if friendRequestBlacklist[fromPlayer] then return end -- previously cancelled friend request, we don't want it!
|
if friendRequestBlacklist[fromPlayer] then
|
||||||
game:GetService("GuiService"):SendNotification("Friend Request",
|
return
|
||||||
|
end -- previously cancelled friend request, we don't want it!
|
||||||
|
game:GetService("GuiService"):SendNotification(
|
||||||
|
"Friend Request",
|
||||||
"From " .. fromPlayer.Name,
|
"From " .. fromPlayer.Name,
|
||||||
"http://www.roblox.com/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=48&y=48",
|
"http://www.roblox.com/thumbs/avatar.ashx?userId=" .. tostring(fromPlayer.userId) .. "&x=48&y=48",
|
||||||
8,
|
8,
|
||||||
function()
|
function()
|
||||||
makeFriend(fromPlayer,toPlayer)
|
makeFriend(fromPlayer, toPlayer)
|
||||||
end)
|
end
|
||||||
|
)
|
||||||
elseif event == Enum.FriendRequestEvent.Accept then
|
elseif event == Enum.FriendRequestEvent.Accept then
|
||||||
game:GetService("GuiService"):SendNotification("You are Friends",
|
game:GetService("GuiService"):SendNotification(
|
||||||
"With " .. fromPlayer.Name .. "!",
|
"You are Friends",
|
||||||
"http://www.roblox.com/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=48&y=48",
|
"With " .. fromPlayer.Name .. "!",
|
||||||
5,
|
"http://www.roblox.com/thumbs/avatar.ashx?userId=" .. tostring(fromPlayer.userId) .. "&x=48&y=48",
|
||||||
function()
|
5,
|
||||||
|
function() end
|
||||||
end)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
function showOneButton()
|
function showOneButton()
|
||||||
local popup = script.Parent:FindFirstChild("Popup")
|
local popup = script.Parent:FindFirstChild "Popup"
|
||||||
if popup then
|
if popup then
|
||||||
popup.OKButton.Visible = true
|
popup.OKButton.Visible = true
|
||||||
popup.DeclineButton.Visible = false
|
popup.DeclineButton.Visible = false
|
||||||
|
|
@ -112,15 +145,15 @@ function showOneButton()
|
||||||
end
|
end
|
||||||
|
|
||||||
function showTwoButtons()
|
function showTwoButtons()
|
||||||
local popup = script.Parent:FindFirstChild("Popup")
|
local popup = script.Parent:FindFirstChild "Popup"
|
||||||
if popup then
|
if popup then
|
||||||
popup.OKButton.Visible = false
|
popup.OKButton.Visible = false
|
||||||
popup.DeclineButton.Visible = true
|
popup.DeclineButton.Visible = true
|
||||||
popup.AcceptButton.Visible = true
|
popup.AcceptButton.Visible = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function onTeleport(teleportState, placeId, spawnName)
|
function onTeleport(teleportState, _, _)
|
||||||
if game:GetService("TeleportService").CustomizedTeleportUI == false then
|
if game:GetService("TeleportService").CustomizedTeleportUI == false then
|
||||||
if teleportState == Enum.TeleportState.Started then
|
if teleportState == Enum.TeleportState.Started then
|
||||||
showTeleportUI("Teleport started...", 0)
|
showTeleportUI("Teleport started...", 0)
|
||||||
|
|
@ -139,8 +172,9 @@ function showTeleportUI(message, timer)
|
||||||
teleportUI:Remove()
|
teleportUI:Remove()
|
||||||
end
|
end
|
||||||
waitForChild(localPlayer, "PlayerGui")
|
waitForChild(localPlayer, "PlayerGui")
|
||||||
teleportUI = Instance.new("Message", localPlayer.PlayerGui)
|
teleportUI = Instance.new "Message"
|
||||||
teleportUI.Text = message
|
teleportUI.Text = message
|
||||||
|
teleportUI.Parent = localPlayer.PlayerGui
|
||||||
if timer > 0 then
|
if timer > 0 then
|
||||||
wait(timer)
|
wait(timer)
|
||||||
teleportUI:Remove()
|
teleportUI:Remove()
|
||||||
|
|
@ -148,100 +182,173 @@ function showTeleportUI(message, timer)
|
||||||
end
|
end
|
||||||
|
|
||||||
if teleportEnabled then
|
if teleportEnabled then
|
||||||
|
|
||||||
localPlayer.OnTeleport:connect(onTeleport)
|
localPlayer.OnTeleport:connect(onTeleport)
|
||||||
|
|
||||||
game:GetService("TeleportService").ErrorCallback = function(message)
|
game:GetService("TeleportService").ErrorCallback = function(message)
|
||||||
local popup = script.Parent:FindFirstChild("Popup")
|
local popup = script.Parent:FindFirstChild "Popup"
|
||||||
showOneButton()
|
showOneButton()
|
||||||
popup.PopupText.Text = message
|
popup.PopupText.Text = message
|
||||||
local clickCon
|
local clickCon
|
||||||
clickCon = popup.OKButton.MouseButton1Click:connect(function()
|
clickCon = popup.OKButton.MouseButton1Click:connect(function()
|
||||||
game:GetService("TeleportService"):TeleportCancel()
|
game:GetService("TeleportService"):TeleportCancel()
|
||||||
if clickCon then clickCon:disconnect() end
|
if clickCon then
|
||||||
game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup"))
|
clickCon:disconnect()
|
||||||
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible())
|
end
|
||||||
|
game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild "Popup")
|
||||||
|
popup:TweenSize(
|
||||||
|
UDim2.new(0, 0, 0, 0),
|
||||||
|
Enum.EasingDirection.Out,
|
||||||
|
Enum.EasingStyle.Quart,
|
||||||
|
1,
|
||||||
|
true,
|
||||||
|
makePopupInvisible()
|
||||||
|
)
|
||||||
end)
|
end)
|
||||||
game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog,
|
game.GuiService:AddCenterDialog(
|
||||||
|
script.Parent:FindFirstChild "Popup",
|
||||||
|
Enum.CenterDialogType.QuitDialog,
|
||||||
--ShowFunction
|
--ShowFunction
|
||||||
function()
|
function()
|
||||||
showOneButton()
|
showOneButton()
|
||||||
script.Parent:FindFirstChild("Popup").Visible = true
|
script.Parent:FindFirstChild("Popup").Visible = true
|
||||||
popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true)
|
popup:TweenSize(UDim2.new(0, 330, 0, 350), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 1, true)
|
||||||
end,
|
end,
|
||||||
--HideFunction
|
--HideFunction
|
||||||
function()
|
function()
|
||||||
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible())
|
popup:TweenSize(
|
||||||
end)
|
UDim2.new(0, 0, 0, 0),
|
||||||
|
Enum.EasingDirection.Out,
|
||||||
|
Enum.EasingStyle.Quart,
|
||||||
|
1,
|
||||||
|
true,
|
||||||
|
makePopupInvisible()
|
||||||
|
)
|
||||||
|
end
|
||||||
|
)
|
||||||
end
|
end
|
||||||
game:GetService("TeleportService").ConfirmationCallback = function(message, placeId, spawnName)
|
game:GetService("TeleportService").ConfirmationCallback = function(message, placeId, spawnName)
|
||||||
local popup = script.Parent:FindFirstChild("Popup")
|
local popup = script.Parent:FindFirstChild "Popup"
|
||||||
popup.PopupText.Text = message
|
popup.PopupText.Text = message
|
||||||
popup.PopupImage.Image = ""
|
popup.PopupImage.Image = ""
|
||||||
|
|
||||||
local yesCon, noCon
|
local yesCon, noCon
|
||||||
|
|
||||||
local function killCons()
|
local function killCons()
|
||||||
if yesCon then yesCon:disconnect() end
|
if yesCon then
|
||||||
if noCon then noCon:disconnect() end
|
yesCon:disconnect()
|
||||||
game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup"))
|
end
|
||||||
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible())
|
if noCon then
|
||||||
|
noCon:disconnect()
|
||||||
|
end
|
||||||
|
game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild "Popup")
|
||||||
|
popup:TweenSize(
|
||||||
|
UDim2.new(0, 0, 0, 0),
|
||||||
|
Enum.EasingDirection.Out,
|
||||||
|
Enum.EasingStyle.Quart,
|
||||||
|
1,
|
||||||
|
true,
|
||||||
|
makePopupInvisible()
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
yesCon = popup.AcceptButton.MouseButton1Click:connect(function()
|
yesCon = popup.AcceptButton.MouseButton1Click:connect(function()
|
||||||
killCons()
|
killCons()
|
||||||
local success, err = pcall(function() game:GetService("TeleportService"):TeleportImpl(placeId,spawnName) end)
|
local success, err = pcall(function()
|
||||||
|
game:GetService("TeleportService"):TeleportImpl(placeId, spawnName)
|
||||||
|
end)
|
||||||
if not success then
|
if not success then
|
||||||
showOneButton()
|
showOneButton()
|
||||||
popup.PopupText.Text = err
|
popup.PopupText.Text = err
|
||||||
local clickCon
|
local clickCon
|
||||||
clickCon = popup.OKButton.MouseButton1Click:connect(function()
|
clickCon = popup.OKButton.MouseButton1Click:connect(function()
|
||||||
if clickCon then clickCon:disconnect() end
|
if clickCon then
|
||||||
game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup"))
|
clickCon:disconnect()
|
||||||
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible())
|
end
|
||||||
|
game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild "Popup")
|
||||||
|
popup:TweenSize(
|
||||||
|
UDim2.new(0, 0, 0, 0),
|
||||||
|
Enum.EasingDirection.Out,
|
||||||
|
Enum.EasingStyle.Quart,
|
||||||
|
1,
|
||||||
|
true,
|
||||||
|
makePopupInvisible()
|
||||||
|
)
|
||||||
end)
|
end)
|
||||||
game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog,
|
game.GuiService:AddCenterDialog(
|
||||||
--ShowFunction
|
script.Parent:FindFirstChild "Popup",
|
||||||
function()
|
Enum.CenterDialogType.QuitDialog,
|
||||||
showOneButton()
|
--ShowFunction
|
||||||
script.Parent:FindFirstChild("Popup").Visible = true
|
function()
|
||||||
popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true)
|
showOneButton()
|
||||||
end,
|
script.Parent:FindFirstChild("Popup").Visible = true
|
||||||
--HideFunction
|
popup:TweenSize(
|
||||||
function()
|
UDim2.new(0, 330, 0, 350),
|
||||||
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible())
|
Enum.EasingDirection.Out,
|
||||||
end)
|
Enum.EasingStyle.Quart,
|
||||||
|
1,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
end,
|
||||||
|
--HideFunction
|
||||||
|
function()
|
||||||
|
popup:TweenSize(
|
||||||
|
UDim2.new(0, 0, 0, 0),
|
||||||
|
Enum.EasingDirection.Out,
|
||||||
|
Enum.EasingStyle.Quart,
|
||||||
|
1,
|
||||||
|
true,
|
||||||
|
makePopupInvisible()
|
||||||
|
)
|
||||||
|
end
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
noCon = popup.DeclineButton.MouseButton1Click:connect(function()
|
noCon = popup.DeclineButton.MouseButton1Click:connect(function()
|
||||||
killCons()
|
killCons()
|
||||||
local success = pcall(function() game:GetService("TeleportService"):TeleportCancel() end)
|
pcall(function()
|
||||||
|
game:GetService("TeleportService"):TeleportCancel()
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
|
local centerDialogSuccess = pcall(function()
|
||||||
|
game.GuiService:AddCenterDialog(
|
||||||
|
script.Parent:FindFirstChild "Popup",
|
||||||
|
Enum.CenterDialogType.QuitDialog,
|
||||||
|
--ShowFunction
|
||||||
|
function()
|
||||||
|
showTwoButtons()
|
||||||
|
popup.AcceptButton.Text = "Leave"
|
||||||
|
popup.DeclineButton.Text = "Stay"
|
||||||
|
script.Parent:FindFirstChild("Popup").Visible = true
|
||||||
|
popup:TweenSize(
|
||||||
|
UDim2.new(0, 330, 0, 350),
|
||||||
|
Enum.EasingDirection.Out,
|
||||||
|
Enum.EasingStyle.Quart,
|
||||||
|
1,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
end,
|
||||||
|
--HideFunction
|
||||||
|
function()
|
||||||
|
popup:TweenSize(
|
||||||
|
UDim2.new(0, 0, 0, 0),
|
||||||
|
Enum.EasingDirection.Out,
|
||||||
|
Enum.EasingStyle.Quart,
|
||||||
|
1,
|
||||||
|
true,
|
||||||
|
makePopupInvisible()
|
||||||
|
)
|
||||||
|
end
|
||||||
|
)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local centerDialogSuccess = pcall(function() game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog,
|
|
||||||
--ShowFunction
|
|
||||||
function()
|
|
||||||
showTwoButtons()
|
|
||||||
popup.AcceptButton.Text = "Leave"
|
|
||||||
popup.DeclineButton.Text = "Stay"
|
|
||||||
script.Parent:FindFirstChild("Popup").Visible = true
|
|
||||||
popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true)
|
|
||||||
end,
|
|
||||||
--HideFunction
|
|
||||||
function()
|
|
||||||
popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible())
|
|
||||||
end)
|
|
||||||
end)
|
|
||||||
|
|
||||||
if centerDialogSuccess == false then
|
if centerDialogSuccess == false then
|
||||||
script.Parent:FindFirstChild("Popup").Visible = true
|
script.Parent:FindFirstChild("Popup").Visible = true
|
||||||
popup.AcceptButton.Text = "Leave"
|
popup.AcceptButton.Text = "Leave"
|
||||||
popup.DeclineButton.Text = "Stay"
|
popup.DeclineButton.Text = "Stay"
|
||||||
popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true)
|
popup:TweenSize(UDim2.new(0, 330, 0, 350), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 1, true)
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
40
48488451.lua
40
48488451.lua
|
|
@ -1,8 +1,8 @@
|
||||||
--build our gui
|
--build our gui
|
||||||
|
|
||||||
local popupFrame = Instance.new("Frame")
|
local popupFrame = Instance.new "Frame"
|
||||||
popupFrame.Position = UDim2.new(0.5,-165,0.5,-175)
|
popupFrame.Position = UDim2.new(0.5, -165, 0.5, -175)
|
||||||
popupFrame.Size = UDim2.new(0,330,0,350)
|
popupFrame.Size = UDim2.new(0, 330, 0, 350)
|
||||||
popupFrame.Style = Enum.FrameStyle.RobloxRound
|
popupFrame.Style = Enum.FrameStyle.RobloxRound
|
||||||
popupFrame.ZIndex = 4
|
popupFrame.ZIndex = 4
|
||||||
popupFrame.Name = "Popup"
|
popupFrame.Name = "Popup"
|
||||||
|
|
@ -10,26 +10,26 @@ popupFrame.Visible = false
|
||||||
popupFrame.Parent = script.Parent
|
popupFrame.Parent = script.Parent
|
||||||
|
|
||||||
local darken = popupFrame:clone()
|
local darken = popupFrame:clone()
|
||||||
darken.Size = UDim2.new(1,16,1,16)
|
darken.Size = UDim2.new(1, 16, 1, 16)
|
||||||
darken.Position = UDim2.new(0,-8,0,-8)
|
darken.Position = UDim2.new(0, -8, 0, -8)
|
||||||
darken.Name = "Darken"
|
darken.Name = "Darken"
|
||||||
darken.ZIndex = 1
|
darken.ZIndex = 1
|
||||||
darken.Parent = popupFrame
|
darken.Parent = popupFrame
|
||||||
|
|
||||||
local acceptButton = Instance.new("TextButton")
|
local acceptButton = Instance.new "TextButton"
|
||||||
acceptButton.Position = UDim2.new(0,20,0,270)
|
acceptButton.Position = UDim2.new(0, 20, 0, 270)
|
||||||
acceptButton.Size = UDim2.new(0,100,0,50)
|
acceptButton.Size = UDim2.new(0, 100, 0, 50)
|
||||||
acceptButton.Font = Enum.Font.ArialBold
|
acceptButton.Font = Enum.Font.ArialBold
|
||||||
acceptButton.FontSize = Enum.FontSize.Size24
|
acceptButton.FontSize = Enum.FontSize.Size24
|
||||||
acceptButton.Style = Enum.ButtonStyle.RobloxButton
|
acceptButton.Style = Enum.ButtonStyle.RobloxButton
|
||||||
acceptButton.TextColor3 = Color3.new(248/255,248/255,248/255)
|
acceptButton.TextColor3 = Color3.new(248 / 255, 248 / 255, 248 / 255)
|
||||||
acceptButton.Text = "Yes"
|
acceptButton.Text = "Yes"
|
||||||
acceptButton.ZIndex = 5
|
acceptButton.ZIndex = 5
|
||||||
acceptButton.Name = "AcceptButton"
|
acceptButton.Name = "AcceptButton"
|
||||||
acceptButton.Parent = popupFrame
|
acceptButton.Parent = popupFrame
|
||||||
|
|
||||||
local declineButton = acceptButton:clone()
|
local declineButton = acceptButton:clone()
|
||||||
declineButton.Position = UDim2.new(1,-120,0,270)
|
declineButton.Position = UDim2.new(1, -120, 0, 270)
|
||||||
declineButton.Text = "No"
|
declineButton.Text = "No"
|
||||||
declineButton.Name = "DeclineButton"
|
declineButton.Name = "DeclineButton"
|
||||||
declineButton.Parent = popupFrame
|
declineButton.Parent = popupFrame
|
||||||
|
|
@ -37,36 +37,36 @@ declineButton.Parent = popupFrame
|
||||||
local okButton = acceptButton:clone()
|
local okButton = acceptButton:clone()
|
||||||
okButton.Name = "OKButton"
|
okButton.Name = "OKButton"
|
||||||
okButton.Text = "OK"
|
okButton.Text = "OK"
|
||||||
okButton.Position = UDim2.new(0.5,-50,0,270)
|
okButton.Position = UDim2.new(0.5, -50, 0, 270)
|
||||||
okButton.Visible = false
|
okButton.Visible = false
|
||||||
okButton.Parent = popupFrame
|
okButton.Parent = popupFrame
|
||||||
|
|
||||||
local popupImage = Instance.new("ImageLabel")
|
local popupImage = Instance.new "ImageLabel"
|
||||||
popupImage.BackgroundTransparency = 1
|
popupImage.BackgroundTransparency = 1
|
||||||
popupImage.Position = UDim2.new(0.5,-140,0,0)
|
popupImage.Position = UDim2.new(0.5, -140, 0, 0)
|
||||||
popupImage.Size = UDim2.new(0,280,0,280)
|
popupImage.Size = UDim2.new(0, 280, 0, 280)
|
||||||
popupImage.ZIndex = 3
|
popupImage.ZIndex = 3
|
||||||
popupImage.Name = "PopupImage"
|
popupImage.Name = "PopupImage"
|
||||||
popupImage.Parent = popupFrame
|
popupImage.Parent = popupFrame
|
||||||
|
|
||||||
local backing = Instance.new("ImageLabel")
|
local backing = Instance.new "ImageLabel"
|
||||||
backing.BackgroundTransparency = 1
|
backing.BackgroundTransparency = 1
|
||||||
backing.Size = UDim2.new(1,0,1,0)
|
backing.Size = UDim2.new(1, 0, 1, 0)
|
||||||
backing.Image = "http://www.roblox.com/asset/?id=47574181"
|
backing.Image = "http://www.roblox.com/asset/?id=47574181"
|
||||||
backing.Name = "Backing"
|
backing.Name = "Backing"
|
||||||
backing.ZIndex = 2
|
backing.ZIndex = 2
|
||||||
backing.Parent = popupImage
|
backing.Parent = popupImage
|
||||||
|
|
||||||
local popupText = Instance.new("TextLabel")
|
local popupText = Instance.new "TextLabel"
|
||||||
popupText.Name = "PopupText"
|
popupText.Name = "PopupText"
|
||||||
popupText.Size = UDim2.new(1,0,0.8,0)
|
popupText.Size = UDim2.new(1, 0, 0.8, 0)
|
||||||
popupText.Font = Enum.Font.ArialBold
|
popupText.Font = Enum.Font.ArialBold
|
||||||
popupText.FontSize = Enum.FontSize.Size36
|
popupText.FontSize = Enum.FontSize.Size36
|
||||||
popupText.BackgroundTransparency = 1
|
popupText.BackgroundTransparency = 1
|
||||||
popupText.Text = "Hello I'm a popup"
|
popupText.Text = "Hello I'm a popup"
|
||||||
popupText.TextColor3 = Color3.new(248/255,248/255,248/255)
|
popupText.TextColor3 = Color3.new(248 / 255, 248 / 255, 248 / 255)
|
||||||
popupText.TextWrap = true
|
popupText.TextWrap = true
|
||||||
popupText.ZIndex = 5
|
popupText.ZIndex = 5
|
||||||
popupText.Parent = popupFrame
|
popupText.Parent = popupFrame
|
||||||
|
|
||||||
script:remove()
|
script:remove()
|
||||||
|
|
|
||||||
1569
53878047.lua
1569
53878047.lua
File diff suppressed because it is too large
Load Diff
867
53878057.lua
867
53878057.lua
File diff suppressed because it is too large
Load Diff
|
|
@ -1 +0,0 @@
|
||||||
|
|
||||||
640
60595411.lua
640
60595411.lua
File diff suppressed because it is too large
Load Diff
10
60595695.lua
10
60595695.lua
|
|
@ -3,15 +3,15 @@
|
||||||
-- access to all of the libraries (otherwise only local scripts do)
|
-- access to all of the libraries (otherwise only local scripts do)
|
||||||
|
|
||||||
local deepakTestingPlace = 3569749
|
local deepakTestingPlace = 3569749
|
||||||
local sc = game:GetService("ScriptContext")
|
local sc = game:GetService "ScriptContext"
|
||||||
local tries = 0
|
local tries = 0
|
||||||
|
|
||||||
while not sc and tries < 3 do
|
while not sc and tries < 3 do
|
||||||
tries = tries + 1
|
tries = tries + 1
|
||||||
sc = game:GetService("ScriptContext")
|
sc = game:GetService "ScriptContext"
|
||||||
wait(0.2)
|
wait(0.2)
|
||||||
end
|
end
|
||||||
|
|
||||||
if sc then
|
if sc then
|
||||||
sc:RegisterLibrary("Libraries/RbxGui", "45284430")
|
sc:RegisterLibrary("Libraries/RbxGui", "45284430")
|
||||||
sc:RegisterLibrary("Libraries/RbxGear", "45374389")
|
sc:RegisterLibrary("Libraries/RbxGear", "45374389")
|
||||||
|
|
@ -22,5 +22,5 @@ if sc then
|
||||||
sc:RegisterLibrary("Libraries/RbxStamper", "73157242")
|
sc:RegisterLibrary("Libraries/RbxStamper", "73157242")
|
||||||
sc:LibraryRegistrationComplete()
|
sc:LibraryRegistrationComplete()
|
||||||
else
|
else
|
||||||
print("failed to find script context, libraries did not load")
|
print "failed to find script context, libraries did not load"
|
||||||
end
|
end
|
||||||
|
|
|
||||||
1535
73157242.lua
1535
73157242.lua
File diff suppressed because it is too large
Load Diff
529
89449008.lua
529
89449008.lua
File diff suppressed because it is too large
Load Diff
288
89449093.lua
288
89449093.lua
|
|
@ -1,5 +1,7 @@
|
||||||
-- This script manages context switches in the backpack (Gear to Wardrobe, etc.) and player state changes. Also manages global functions across different tabs (currently only search)
|
-- This script manages context switches in the backpack (Gear to Wardrobe, etc.) and player state changes. Also manages global functions across different tabs (currently only search)
|
||||||
if game.CoreGui.Version < 7 then return end -- peace out if we aren't using the right client
|
if game.CoreGui.Version < 7 then
|
||||||
|
return
|
||||||
|
end -- peace out if we aren't using the right client
|
||||||
|
|
||||||
-- basic functions
|
-- basic functions
|
||||||
local function waitForChild(instance, name)
|
local function waitForChild(instance, name)
|
||||||
|
|
@ -15,23 +17,21 @@ local function waitForProperty(instance, property)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- don't do anything if we are in an empty game
|
-- don't do anything if we are in an empty game
|
||||||
waitForChild(game,"Players")
|
waitForChild(game, "Players")
|
||||||
if #game.Players:GetChildren() < 1 then
|
if #game.Players:GetChildren() < 1 then
|
||||||
game.Players.ChildAdded:wait()
|
game.Players.ChildAdded:wait()
|
||||||
end
|
end
|
||||||
-- make sure everything is loaded in before we do anything
|
-- make sure everything is loaded in before we do anything
|
||||||
-- get our local player
|
-- get our local player
|
||||||
waitForProperty(game.Players,"LocalPlayer")
|
waitForProperty(game.Players, "LocalPlayer")
|
||||||
local player = game.Players.LocalPlayer
|
local player = game.Players.LocalPlayer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------------------------ Locals ------------------------------
|
------------------------ Locals ------------------------------
|
||||||
local backpack = script.Parent
|
local backpack = script.Parent
|
||||||
waitForChild(backpack,"Gear")
|
waitForChild(backpack, "Gear")
|
||||||
|
|
||||||
local screen = script.Parent.Parent
|
local screen = script.Parent.Parent
|
||||||
assert(screen:IsA("ScreenGui"))
|
assert(screen:IsA "ScreenGui")
|
||||||
|
|
||||||
waitForChild(backpack, "Tabs")
|
waitForChild(backpack, "Tabs")
|
||||||
waitForChild(backpack.Tabs, "CloseButton")
|
waitForChild(backpack.Tabs, "CloseButton")
|
||||||
|
|
@ -43,19 +43,19 @@ if game.CoreGui.Version >= 8 then
|
||||||
waitForChild(backpack.Tabs, "WardrobeButton")
|
waitForChild(backpack.Tabs, "WardrobeButton")
|
||||||
local wardrobeButton = backpack.Tabs.WardrobeButton
|
local wardrobeButton = backpack.Tabs.WardrobeButton
|
||||||
end
|
end
|
||||||
waitForChild(backpack.Parent,"ControlFrame")
|
waitForChild(backpack.Parent, "ControlFrame")
|
||||||
local backpackButton = waitForChild(backpack.Parent.ControlFrame,"BackpackButton")
|
local backpackButton = waitForChild(backpack.Parent.ControlFrame, "BackpackButton")
|
||||||
local currentTab = "gear"
|
local currentTab = "gear"
|
||||||
|
|
||||||
local searchFrame = waitForChild(backpack,"SearchFrame")
|
local searchFrame = waitForChild(backpack, "SearchFrame")
|
||||||
waitForChild(backpack.SearchFrame,"SearchBoxFrame")
|
waitForChild(backpack.SearchFrame, "SearchBoxFrame")
|
||||||
local searchBox = waitForChild(backpack.SearchFrame.SearchBoxFrame,"SearchBox")
|
local searchBox = waitForChild(backpack.SearchFrame.SearchBoxFrame, "SearchBox")
|
||||||
local searchButton = waitForChild(backpack.SearchFrame,"SearchButton")
|
local searchButton = waitForChild(backpack.SearchFrame, "SearchButton")
|
||||||
local resetButton = waitForChild(backpack.SearchFrame,"ResetButton")
|
local resetButton = waitForChild(backpack.SearchFrame, "ResetButton")
|
||||||
|
|
||||||
local robloxGui = waitForChild(Game.CoreGui, 'RobloxGui')
|
local robloxGui = waitForChild(Game.CoreGui, "RobloxGui")
|
||||||
local currentLoadout = waitForChild(robloxGui, 'CurrentLoadout')
|
local currentLoadout = waitForChild(robloxGui, "CurrentLoadout")
|
||||||
local loadoutBackground = waitForChild(currentLoadout, 'Background')
|
local loadoutBackground = waitForChild(currentLoadout, "Background")
|
||||||
|
|
||||||
local canToggle = true
|
local canToggle = true
|
||||||
local readyForNextEvent = true
|
local readyForNextEvent = true
|
||||||
|
|
@ -65,7 +65,7 @@ local disabledByDeveloper = false
|
||||||
|
|
||||||
local humanoidDiedCon = nil
|
local humanoidDiedCon = nil
|
||||||
|
|
||||||
local backpackButtonPos
|
local backpackButtonPos
|
||||||
|
|
||||||
local guiTweenSpeed = 0.25 -- how quickly we open/close the backpack
|
local guiTweenSpeed = 0.25 -- how quickly we open/close the backpack
|
||||||
|
|
||||||
|
|
@ -75,21 +75,19 @@ local backquote = "`"
|
||||||
|
|
||||||
local backpackSize = UDim2.new(0, 600, 0, 400)
|
local backpackSize = UDim2.new(0, 600, 0, 400)
|
||||||
|
|
||||||
if robloxGui.AbsoluteSize.Y <= 320 then
|
if robloxGui.AbsoluteSize.Y <= 320 then
|
||||||
backpackSize = UDim2.new(0, 200, 0, 140)
|
backpackSize = UDim2.new(0, 200, 0, 140)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
------------------------ End Locals ---------------------------
|
------------------------ End Locals ---------------------------
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------- Public Event Setup ----------------------------------------
|
---------------------------------------- Public Event Setup ----------------------------------------
|
||||||
|
|
||||||
function createPublicEvent(eventName)
|
function createPublicEvent(eventName)
|
||||||
assert(eventName, "eventName is nil")
|
assert(eventName, "eventName is nil")
|
||||||
assert(tostring(eventName),"eventName is not a string")
|
assert(tostring(eventName), "eventName is not a string")
|
||||||
|
|
||||||
local newEvent = Instance.new("BindableEvent")
|
local newEvent = Instance.new "BindableEvent"
|
||||||
newEvent.Name = tostring(eventName)
|
newEvent.Name = tostring(eventName)
|
||||||
newEvent.Parent = script
|
newEvent.Parent = script
|
||||||
|
|
||||||
|
|
@ -101,8 +99,8 @@ function createPublicFunction(funcName, invokeFunc)
|
||||||
assert(tostring(funcName), "funcName is not a string")
|
assert(tostring(funcName), "funcName is not a string")
|
||||||
assert(invokeFunc, "invokeFunc is nil")
|
assert(invokeFunc, "invokeFunc is nil")
|
||||||
assert(type(invokeFunc) == "function", "invokeFunc should be of type 'function'")
|
assert(type(invokeFunc) == "function", "invokeFunc should be of type 'function'")
|
||||||
|
|
||||||
local newFunction = Instance.new("BindableFunction")
|
local newFunction = Instance.new "BindableFunction"
|
||||||
newFunction.Name = tostring(funcName)
|
newFunction.Name = tostring(funcName)
|
||||||
newFunction.OnInvoke = invokeFunc
|
newFunction.OnInvoke = invokeFunc
|
||||||
newFunction.Parent = script
|
newFunction.Parent = script
|
||||||
|
|
@ -110,16 +108,14 @@ function createPublicFunction(funcName, invokeFunc)
|
||||||
return newFunction
|
return newFunction
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Events
|
-- Events
|
||||||
local resizeEvent = createPublicEvent("ResizeEvent")
|
local resizeEvent = createPublicEvent "ResizeEvent"
|
||||||
local backpackOpenEvent = createPublicEvent("BackpackOpenEvent")
|
local backpackOpenEvent = createPublicEvent "BackpackOpenEvent"
|
||||||
local backpackCloseEvent = createPublicEvent("BackpackCloseEvent")
|
local backpackCloseEvent = createPublicEvent "BackpackCloseEvent"
|
||||||
local tabClickedEvent = createPublicEvent("TabClickedEvent")
|
local tabClickedEvent = createPublicEvent "TabClickedEvent"
|
||||||
local searchRequestedEvent = createPublicEvent("SearchRequestedEvent")
|
local searchRequestedEvent = createPublicEvent "SearchRequestedEvent"
|
||||||
---------------------------------------- End Public Event Setup ----------------------------------------
|
---------------------------------------- End Public Event Setup ----------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--------------------------- Internal Functions ----------------------------------------
|
--------------------------- Internal Functions ----------------------------------------
|
||||||
|
|
||||||
function deactivateBackpack()
|
function deactivateBackpack()
|
||||||
|
|
@ -128,20 +124,20 @@ function deactivateBackpack()
|
||||||
end
|
end
|
||||||
|
|
||||||
function activateBackpack()
|
function activateBackpack()
|
||||||
initHumanoidDiedConnections()
|
initHumanoidDiedConnections()
|
||||||
active = true
|
active = true
|
||||||
backpack.Visible = backpackIsOpen
|
backpack.Visible = backpackIsOpen
|
||||||
if backpackIsOpen then
|
if backpackIsOpen then
|
||||||
toggleBackpack()
|
toggleBackpack()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function initHumanoidDiedConnections()
|
function initHumanoidDiedConnections()
|
||||||
if humanoidDiedCon then
|
if humanoidDiedCon then
|
||||||
humanoidDiedCon:disconnect()
|
humanoidDiedCon:disconnect()
|
||||||
end
|
end
|
||||||
waitForProperty(game.Players.LocalPlayer,"Character")
|
waitForProperty(game.Players.LocalPlayer, "Character")
|
||||||
waitForChild(game.Players.LocalPlayer.Character,"Humanoid")
|
waitForChild(game.Players.LocalPlayer.Character, "Humanoid")
|
||||||
humanoidDiedCon = game.Players.LocalPlayer.Character.Humanoid.Died:connect(deactivateBackpack)
|
humanoidDiedCon = game.Players.LocalPlayer.Character.Humanoid.Died:connect(deactivateBackpack)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -153,90 +149,108 @@ local hideBackpack = function()
|
||||||
backpackCloseEvent:Fire(currentTab)
|
backpackCloseEvent:Fire(currentTab)
|
||||||
backpack.Tabs.Visible = false
|
backpack.Tabs.Visible = false
|
||||||
searchFrame.Visible = false
|
searchFrame.Visible = false
|
||||||
backpack:TweenSizeAndPosition(UDim2.new(0, backpackSize.X.Offset,0, 0), UDim2.new(0.5, -backpackSize.X.Offset/2, 1, -85), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed, true,
|
backpack:TweenSizeAndPosition(
|
||||||
|
UDim2.new(0, backpackSize.X.Offset, 0, 0),
|
||||||
|
UDim2.new(0.5, -backpackSize.X.Offset / 2, 1, -85),
|
||||||
|
Enum.EasingDirection.Out,
|
||||||
|
Enum.EasingStyle.Quad,
|
||||||
|
guiTweenSpeed,
|
||||||
|
true,
|
||||||
function()
|
function()
|
||||||
game.GuiService:RemoveCenterDialog(backpack)
|
game.GuiService:RemoveCenterDialog(backpack)
|
||||||
backpack.Visible = false
|
backpack.Visible = false
|
||||||
backpackButton.Selected = false
|
backpackButton.Selected = false
|
||||||
end)
|
end
|
||||||
delay(guiTweenSpeed,function()
|
)
|
||||||
|
delay(guiTweenSpeed, function()
|
||||||
game.GuiService:RemoveCenterDialog(backpack)
|
game.GuiService:RemoveCenterDialog(backpack)
|
||||||
backpack.Visible = false
|
backpack.Visible = false
|
||||||
backpackButton.Selected = false
|
backpackButton.Selected = false
|
||||||
readyForNextEvent = true
|
readyForNextEvent = true
|
||||||
canToggle = true
|
canToggle = true
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
function showBackpack()
|
function showBackpack()
|
||||||
game.GuiService:AddCenterDialog(backpack, Enum.CenterDialogType.PlayerInitiatedDialog,
|
game.GuiService:AddCenterDialog(backpack, Enum.CenterDialogType.PlayerInitiatedDialog, function()
|
||||||
function()
|
backpack.Visible = true
|
||||||
backpack.Visible = true
|
backpackButton.Selected = true
|
||||||
backpackButton.Selected = true
|
end, function()
|
||||||
end,
|
backpack.Visible = false
|
||||||
function()
|
backpackButton.Selected = false
|
||||||
backpack.Visible = false
|
|
||||||
backpackButton.Selected = false
|
|
||||||
end)
|
end)
|
||||||
backpack.Visible = true
|
backpack.Visible = true
|
||||||
backpackButton.Selected = true
|
backpackButton.Selected = true
|
||||||
backpack:TweenSizeAndPosition(backpackSize, UDim2.new(0.5, -backpackSize.X.Offset/2, 1, -backpackSize.Y.Offset - 88), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed, true)
|
backpack:TweenSizeAndPosition(
|
||||||
delay(guiTweenSpeed,function()
|
backpackSize,
|
||||||
|
UDim2.new(0.5, -backpackSize.X.Offset / 2, 1, -backpackSize.Y.Offset - 88),
|
||||||
|
Enum.EasingDirection.Out,
|
||||||
|
Enum.EasingStyle.Quad,
|
||||||
|
guiTweenSpeed,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
delay(guiTweenSpeed, function()
|
||||||
backpack.Tabs.Visible = false
|
backpack.Tabs.Visible = false
|
||||||
searchFrame.Visible = true
|
searchFrame.Visible = true
|
||||||
backpackOpenEvent:Fire(currentTab)
|
backpackOpenEvent:Fire(currentTab)
|
||||||
canToggle = true
|
canToggle = true
|
||||||
readyForNextEvent = true
|
readyForNextEvent = true
|
||||||
backpackButton.Image = 'http://www.roblox.com/asset/?id=97644093'
|
backpackButton.Image = "http://www.roblox.com/asset/?id=97644093"
|
||||||
backpackButton.Position = UDim2.new(0.5, -60, 1, -backpackSize.Y.Offset - 103)
|
backpackButton.Position = UDim2.new(0.5, -60, 1, -backpackSize.Y.Offset - 103)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
function toggleBackpack()
|
function toggleBackpack()
|
||||||
if not game.Players.LocalPlayer then return end
|
if not game.Players.LocalPlayer then
|
||||||
if not game.Players.LocalPlayer["Character"] then return end
|
return
|
||||||
if not canToggle then return end
|
end
|
||||||
if not readyForNextEvent then return end
|
if not game.Players.LocalPlayer["Character"] then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not canToggle then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not readyForNextEvent then
|
||||||
|
return
|
||||||
|
end
|
||||||
readyForNextEvent = false
|
readyForNextEvent = false
|
||||||
canToggle = false
|
canToggle = false
|
||||||
|
|
||||||
backpackIsOpen = not backpackIsOpen
|
backpackIsOpen = not backpackIsOpen
|
||||||
|
|
||||||
if backpackIsOpen then
|
if backpackIsOpen then
|
||||||
loadoutBackground.Image = 'http://www.roblox.com/asset/?id=97623721'
|
loadoutBackground.Image = "http://www.roblox.com/asset/?id=97623721"
|
||||||
loadoutBackground.Position = UDim2.new(-0.03, 0, -0.17, 0)
|
loadoutBackground.Position = UDim2.new(-0.03, 0, -0.17, 0)
|
||||||
loadoutBackground.Size = UDim2.new(1.05, 0, 1.25, 0)
|
loadoutBackground.Size = UDim2.new(1.05, 0, 1.25, 0)
|
||||||
loadoutBackground.ZIndex = 2.0
|
loadoutBackground.ZIndex = 2.0
|
||||||
loadoutBackground.Visible = true
|
loadoutBackground.Visible = true
|
||||||
showBackpack()
|
showBackpack()
|
||||||
else
|
else
|
||||||
backpackButton.Position = UDim2.new(0.5, -60, 1, -44)
|
backpackButton.Position = UDim2.new(0.5, -60, 1, -44)
|
||||||
loadoutBackground.Visible = false
|
loadoutBackground.Visible = false
|
||||||
backpackButton.Selected = false
|
backpackButton.Selected = false
|
||||||
backpackButton.Image = "http://www.roblox.com/asset/?id=97617958"
|
backpackButton.Image = "http://www.roblox.com/asset/?id=97617958"
|
||||||
loadoutBackground.Image = 'http://www.roblox.com/asset/?id=96536002'
|
loadoutBackground.Image = "http://www.roblox.com/asset/?id=96536002"
|
||||||
loadoutBackground.Position = UDim2.new(-0.1, 0, -0.1, 0)
|
loadoutBackground.Position = UDim2.new(-0.1, 0, -0.1, 0)
|
||||||
loadoutBackground.Size = UDim2.new(1.2, 0, 1.2, 0)
|
loadoutBackground.Size = UDim2.new(1.2, 0, 1.2, 0)
|
||||||
hideBackpack()
|
hideBackpack()
|
||||||
|
|
||||||
|
|
||||||
local clChildren = currentLoadout:GetChildren()
|
local clChildren = currentLoadout:GetChildren()
|
||||||
for i = 1, #clChildren do
|
for i = 1, #clChildren do
|
||||||
if clChildren[i] and clChildren[i]:IsA('Frame') then
|
if clChildren[i] and clChildren[i]:IsA "Frame" then
|
||||||
local frame = clChildren[i]
|
local frame = clChildren[i]
|
||||||
if #frame:GetChildren() > 0 then
|
if #frame:GetChildren() > 0 then
|
||||||
backpackButton.Position = UDim2.new(0.5, -60, 1, -108)
|
backpackButton.Position = UDim2.new(0.5, -60, 1, -108)
|
||||||
backpackButton.Visible = true
|
backpackButton.Visible = true
|
||||||
loadoutBackground.Visible = true
|
loadoutBackground.Visible = true
|
||||||
if frame:GetChildren()[1]:IsA('ImageButton') then
|
if frame:GetChildren()[1]:IsA "ImageButton" then
|
||||||
local imgButton = frame:GetChildren()[1]
|
local imgButton = frame:GetChildren()[1]
|
||||||
imgButton.Active = true
|
imgButton.Active = true
|
||||||
imgButton.Draggable = false
|
imgButton.Draggable = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -248,27 +262,27 @@ end
|
||||||
|
|
||||||
function setSelected(tab)
|
function setSelected(tab)
|
||||||
assert(tab)
|
assert(tab)
|
||||||
assert(tab:IsA("TextButton"))
|
assert(tab:IsA "TextButton")
|
||||||
|
|
||||||
tab.BackgroundColor3 = Color3.new(1,1,1)
|
tab.BackgroundColor3 = Color3.new(1, 1, 1)
|
||||||
tab.TextColor3 = Color3.new(0,0,0)
|
tab.TextColor3 = Color3.new(0, 0, 0)
|
||||||
tab.Selected = true
|
tab.Selected = true
|
||||||
tab.ZIndex = 3
|
tab.ZIndex = 3
|
||||||
end
|
end
|
||||||
|
|
||||||
function setUnselected(tab)
|
function setUnselected(tab)
|
||||||
assert(tab)
|
assert(tab)
|
||||||
assert(tab:IsA("TextButton"))
|
assert(tab:IsA "TextButton")
|
||||||
|
|
||||||
tab.BackgroundColor3 = Color3.new(0,0,0)
|
tab.BackgroundColor3 = Color3.new(0, 0, 0)
|
||||||
tab.TextColor3 = Color3.new(1,1,1)
|
tab.TextColor3 = Color3.new(1, 1, 1)
|
||||||
tab.Selected = false
|
tab.Selected = false
|
||||||
tab.ZIndex = 1
|
tab.ZIndex = 1
|
||||||
end
|
end
|
||||||
|
|
||||||
function updateTabGui(selectedTab)
|
function updateTabGui(selectedTab)
|
||||||
assert(selectedTab)
|
assert(selectedTab)
|
||||||
|
|
||||||
if selectedTab == "gear" then
|
if selectedTab == "gear" then
|
||||||
setSelected(inventoryButton)
|
setSelected(inventoryButton)
|
||||||
setUnselected(wardrobeButton)
|
setUnselected(wardrobeButton)
|
||||||
|
|
@ -280,44 +294,50 @@ end
|
||||||
|
|
||||||
function mouseLeaveTab(button)
|
function mouseLeaveTab(button)
|
||||||
assert(button)
|
assert(button)
|
||||||
assert(button:IsA("TextButton"))
|
assert(button:IsA "TextButton")
|
||||||
|
|
||||||
if button.Selected then return end
|
if button.Selected then
|
||||||
|
return
|
||||||
button.BackgroundColor3 = Color3.new(0,0,0)
|
end
|
||||||
|
|
||||||
|
button.BackgroundColor3 = Color3.new(0, 0, 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mouseOverTab(button)
|
function mouseOverTab(button)
|
||||||
assert(button)
|
assert(button)
|
||||||
assert(button:IsA("TextButton"))
|
assert(button:IsA "TextButton")
|
||||||
|
|
||||||
if button.Selected then return end
|
if button.Selected then
|
||||||
|
return
|
||||||
button.BackgroundColor3 = Color3.new(39/255,39/255,39/255)
|
end
|
||||||
|
|
||||||
|
button.BackgroundColor3 = Color3.new(39 / 255, 39 / 255, 39 / 255)
|
||||||
end
|
end
|
||||||
|
|
||||||
function newTabClicked(tabName)
|
function newTabClicked(tabName)
|
||||||
assert(tabName)
|
assert(tabName)
|
||||||
tabName = string.lower(tabName)
|
tabName = string.lower(tabName)
|
||||||
currentTab = tabName
|
currentTab = tabName
|
||||||
|
|
||||||
updateTabGui(tabName)
|
updateTabGui(tabName)
|
||||||
tabClickedEvent:Fire(tabName)
|
tabClickedEvent:Fire(tabName)
|
||||||
resetSearch()
|
resetSearch()
|
||||||
end
|
end
|
||||||
|
|
||||||
function trim(s)
|
function trim(s)
|
||||||
return (s:gsub("^%s*(.-)%s*$", "%1"))
|
return (s:gsub("^%s*(.-)%s*$", "%1"))
|
||||||
end
|
end
|
||||||
|
|
||||||
function splitByWhitespace(text)
|
function splitByWhitespace(text)
|
||||||
if type(text) ~= "string" then return nil end
|
if type(text) ~= "string" then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
local terms = {}
|
local terms = {}
|
||||||
for token in string.gmatch(text, "[^%s]+") do
|
for token in string.gmatch(text, "[^%s]+") do
|
||||||
if string.len(token) > 0 then
|
if string.len(token) > 0 then
|
||||||
table.insert(terms,token)
|
table.insert(terms, token)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return terms
|
return terms
|
||||||
end
|
end
|
||||||
|
|
@ -348,13 +368,13 @@ local backpackReady = function()
|
||||||
readyForNextEvent = true
|
readyForNextEvent = true
|
||||||
end
|
end
|
||||||
|
|
||||||
function coreGuiChanged(coreGuiType,enabled)
|
function coreGuiChanged(coreGuiType, enabled)
|
||||||
if coreGuiType == Enum.CoreGuiType.Backpack or coreGuiType == Enum.CoreGuiType.All then
|
if coreGuiType == Enum.CoreGuiType.Backpack or coreGuiType == Enum.CoreGuiType.All then
|
||||||
active = enabled
|
active = enabled
|
||||||
disabledByDeveloper = not enabled
|
disabledByDeveloper = not enabled
|
||||||
|
|
||||||
if disabledByDeveloper then
|
if disabledByDeveloper then
|
||||||
pcall(function()
|
pcall(function()
|
||||||
game:GetService("GuiService"):RemoveKey(tilde)
|
game:GetService("GuiService"):RemoveKey(tilde)
|
||||||
game:GetService("GuiService"):RemoveKey(backquote)
|
game:GetService("GuiService"):RemoveKey(backquote)
|
||||||
end)
|
end)
|
||||||
|
|
@ -374,13 +394,11 @@ end
|
||||||
|
|
||||||
--------------------------- End Internal Functions -------------------------------------
|
--------------------------- End Internal Functions -------------------------------------
|
||||||
|
|
||||||
|
|
||||||
------------------------------ Public Functions Setup -------------------------------------
|
------------------------------ Public Functions Setup -------------------------------------
|
||||||
createPublicFunction("CloseBackpack", hideBackpack)
|
createPublicFunction("CloseBackpack", hideBackpack)
|
||||||
createPublicFunction("BackpackReady", backpackReady)
|
createPublicFunction("BackpackReady", backpackReady)
|
||||||
------------------------------ End Public Functions Setup ---------------------------------
|
------------------------------ End Public Functions Setup ---------------------------------
|
||||||
|
|
||||||
|
|
||||||
------------------------ Connections/Script Main -------------------------------------------
|
------------------------ Connections/Script Main -------------------------------------------
|
||||||
|
|
||||||
pcall(function()
|
pcall(function()
|
||||||
|
|
@ -388,14 +406,26 @@ pcall(function()
|
||||||
Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged)
|
Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
inventoryButton.MouseButton1Click:connect(function() newTabClicked("gear") end)
|
inventoryButton.MouseButton1Click:connect(function()
|
||||||
inventoryButton.MouseEnter:connect(function() mouseOverTab(inventoryButton) end)
|
newTabClicked "gear"
|
||||||
inventoryButton.MouseLeave:connect(function() mouseLeaveTab(inventoryButton) end)
|
end)
|
||||||
|
inventoryButton.MouseEnter:connect(function()
|
||||||
|
mouseOverTab(inventoryButton)
|
||||||
|
end)
|
||||||
|
inventoryButton.MouseLeave:connect(function()
|
||||||
|
mouseLeaveTab(inventoryButton)
|
||||||
|
end)
|
||||||
|
|
||||||
if game.CoreGui.Version >= 8 then
|
if game.CoreGui.Version >= 8 then
|
||||||
wardrobeButton.MouseButton1Click:connect(function() newTabClicked("wardrobe") end)
|
wardrobeButton.MouseButton1Click:connect(function()
|
||||||
wardrobeButton.MouseEnter:connect(function() mouseOverTab(wardrobeButton) end)
|
newTabClicked "wardrobe"
|
||||||
wardrobeButton.MouseLeave:connect(function() mouseLeaveTab(wardrobeButton) end)
|
end)
|
||||||
|
wardrobeButton.MouseEnter:connect(function()
|
||||||
|
mouseOverTab(wardrobeButton)
|
||||||
|
end)
|
||||||
|
wardrobeButton.MouseLeave:connect(function()
|
||||||
|
mouseLeaveTab(wardrobeButton)
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
closeButton.MouseButton1Click:connect(closeBackpack)
|
closeButton.MouseButton1Click:connect(closeBackpack)
|
||||||
|
|
@ -410,13 +440,17 @@ end)
|
||||||
game:GetService("GuiService"):AddKey(tilde)
|
game:GetService("GuiService"):AddKey(tilde)
|
||||||
game:GetService("GuiService"):AddKey(backquote)
|
game:GetService("GuiService"):AddKey(backquote)
|
||||||
game:GetService("GuiService").KeyPressed:connect(function(key)
|
game:GetService("GuiService").KeyPressed:connect(function(key)
|
||||||
if not active or disabledByDeveloper then return end
|
if not active or disabledByDeveloper then
|
||||||
|
return
|
||||||
|
end
|
||||||
if key == tilde or key == backquote then
|
if key == tilde or key == backquote then
|
||||||
toggleBackpack()
|
toggleBackpack()
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
backpackButton.MouseButton1Click:connect(function()
|
backpackButton.MouseButton1Click:connect(function()
|
||||||
if not active or disabledByDeveloper then return end
|
if not active or disabledByDeveloper then
|
||||||
|
return
|
||||||
|
end
|
||||||
toggleBackpack()
|
toggleBackpack()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
@ -437,7 +471,7 @@ end)
|
||||||
searchButton.MouseButton1Click:connect(doSearch)
|
searchButton.MouseButton1Click:connect(doSearch)
|
||||||
resetButton.MouseButton1Click:connect(resetSearch)
|
resetButton.MouseButton1Click:connect(resetSearch)
|
||||||
|
|
||||||
if searchFrame and robloxGui.AbsoluteSize.Y <= 320 then
|
if searchFrame and robloxGui.AbsoluteSize.Y <= 320 then
|
||||||
searchFrame.RobloxLocked = false
|
searchFrame.RobloxLocked = false
|
||||||
searchFrame:Destroy()
|
searchFrame:Destroy()
|
||||||
end
|
end
|
||||||
|
|
|
||||||
2359
97188756.lua
2359
97188756.lua
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1 @@
|
||||||
|
std = "mercury"
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
column_width = 120
|
||||||
|
line_endings = "Unix"
|
||||||
|
indent_type = "Tabs"
|
||||||
|
indent_width = 4
|
||||||
|
quote_style = "AutoPreferDouble"
|
||||||
|
call_parentheses = "None"
|
||||||
Loading…
Reference in New Issue