Run it
Copy the script and paste it into your executor.
Players = :()
ReplicatedStorage = :()
RunService = :()
UserInputService = :()
StarterGui = :()
LocalPlayer = Players.LocalPlayer
PlayerGui = LocalPlayer:()
Dialogue = PlayerGui:()
Frame = Dialogue:()
SourceLabel = Frame:()
Holder = Frame:()
RoleRemote = ReplicatedStorage:():()
screenGui = .()
screenGui.Name =
screenGui.ResetOnSpawn =
screenGui.DisplayOrder =
screenGui.ZIndexBehavior = .ZIndexBehavior.Sibling
screenGui.Parent = PlayerGui
isMinimized =
savedPosition =
savedSize =
currentTab =
notesContent =
draggingEnabled =
paraCopyIndex =
lastParaCopyTime =
PARA_COPY_TIMEOUT =
markerRestoreId =
isShowingMarker =
notifyMode =
selectedRoles = {}
isMonitoring =
(button)
button.BackgroundColor3 = .(, , )
button.TextColor3 = .(, , )
success = (()
button.FontFace = Font.(, .FontWeight.Medium, .FontStyle.Normal)
)
success
button.Font = .Font.GothamMedium
corner = .()
corner.CornerRadius = .(, )
corner.Parent = button
outerBorderFrame = .()
outerBorderFrame.Name =
outerBorderFrame.Size = .(, , , )
outerBorderFrame.BackgroundTransparency =
outerBorderFrame.ZIndex = button.ZIndex -
outerBorderFrame.Parent = button
outerCorner = .()
outerCorner.CornerRadius = .(, )
outerCorner.Parent = outerBorderFrame
outerStroke = .()
outerStroke.Name =
outerStroke.Color = .(, , )
outerStroke.Thickness =
outerStroke.Parent = outerBorderFrame
innerBorderFrame = .()
innerBorderFrame.Name =
innerBorderFrame.Size = .(, , , )
innerBorderFrame.BackgroundTransparency =
innerBorderFrame.ZIndex = button.ZIndex +
innerBorderFrame.Parent = button
innerCorner = .()
innerCorner.CornerRadius = .(, )
innerCorner.Parent = innerBorderFrame
innerStroke = .()
innerStroke.Name =
innerStroke.Color = .(, , )
innerStroke.Thickness =
innerStroke.Parent = innerBorderFrame
(button)
button.BackgroundColor3 = .(, , )
button.TextColor3 = .(, , )
button.TextStrokeColor3 = .(, , )
button.TextStrokeTransparency =
success = (()
button.FontFace = Font.(, .FontWeight.Medium, .FontStyle.Normal)
)
success
button.Font = .Font.GothamMedium
corner = .()
corner.CornerRadius = .(, )
corner.Parent = button
borderFrame = .()
borderFrame.Name =
borderFrame.Size = .(, , , )
borderFrame.BackgroundTransparency =
borderFrame.ZIndex = button.ZIndex +
borderFrame.Parent = button
borderCorner = .()
borderCorner.CornerRadius = .(, )
borderCorner.Parent = borderFrame
stroke = .()
stroke.Color = .(, , )
stroke.Thickness =
stroke.Parent = borderFrame
mainFrame = .()
mainFrame.Name =
mainFrame.Size = .(, , , )
mainFrame.Position = .(, , , -)
mainFrame.BackgroundColor3 = .(, , )
mainFrame.BackgroundTransparency =
mainFrame.BorderSizePixel =
mainFrame.Active =
mainFrame.Parent = screenGui
corner = .()
corner.CornerRadius = .(, )
corner.Parent = mainFrame
mainFrameStroke = .()
mainFrameStroke.Color = .(, , )
mainFrameStroke.Thickness =
mainFrameStroke.Parent = mainFrame
miniButton = .()
miniButton.Name =
miniButton.Size = .(, , , )
miniButton.BackgroundColor3 = .(, , )
miniButton.Image =
miniButton.ImageColor3 = .(, , )
miniButton.ScaleType = .ScaleType.Fit
miniButton.Visible =
miniButton.Active =
miniButton.ZIndex =
miniButton.Parent = screenGui
miniCorner = .()
miniCorner.CornerRadius = .(, )
miniCorner.Parent = miniButton
miniOuterBorderFrame = .()
miniOuterBorderFrame.Name =
miniOuterBorderFrame.Size = .(, , , )
miniOuterBorderFrame.BackgroundTransparency =
miniOuterBorderFrame.ZIndex = miniButton.ZIndex -
miniOuterBorderFrame.Parent = miniButton
miniOuterBorderCorner = .()
miniOuterBorderCorner.CornerRadius = .(, )
miniOuterBorderCorner.Parent = miniOuterBorderFrame
miniOuterStroke = .()
miniOuterStroke.Color = .(, , )
miniOuterStroke.Thickness =
miniOuterStroke.Parent = miniOuterBorderFrame
miniInnerFrame = .()
miniInnerFrame.Size = .(, , , )
miniInnerFrame.BackgroundTransparency =
miniInnerFrame.ZIndex = miniButton.ZIndex +
miniInnerFrame.Parent = miniButton
miniInnerCorner = .()
miniInnerCorner.CornerRadius = .(, )
miniInnerCorner.Parent = miniInnerFrame
miniInnerStroke = .()
miniInnerStroke.Color = .(, , )
miniInnerStroke.Thickness =
miniInnerStroke.Parent = miniInnerFrame
titleBar = .()
titleBar.Name =
titleBar.Size = .(, , , )
titleBar.BackgroundColor3 = .(, , )
titleBar.BackgroundTransparency =
titleBar.BorderSizePixel =
titleBar.ZIndex =
titleBar.Parent = mainFrame
titleBarCorner = .()
titleBarCorner.CornerRadius = .(, )
titleBarCorner.Parent = titleBar
tabsContainer = .()
tabsContainer.Name =
tabsContainer.Size = .(, -, , )
tabsContainer.Position = .(, , , )
tabsContainer.BackgroundTransparency =
tabsContainer.Parent = titleBar
tabLayout = .()
tabLayout.FillDirection = .FillDirection.Horizontal
tabLayout.HorizontalAlignment = .HorizontalAlignment.Left
tabLayout.VerticalAlignment = .VerticalAlignment.Center
tabLayout.Padding = .(, )
tabLayout.Parent = tabsContainer
dialogueTab = .()
dialogueTab.Name =
dialogueTab.Size = .(, , , )
dialogueTab.Text =
dialogueTab.AutoButtonColor =
dialogueTab.Parent = tabsContainer
(dialogueTab)
notesTab = .()
notesTab.Name =
notesTab.Size = .(, , , )
notesTab.Text =
notesTab.AutoButtonColor =
notesTab.Parent = tabsContainer
(notesTab)
rolesTab = .()
rolesTab.Name =
rolesTab.Size = .(, , , )
rolesTab.Text =
rolesTab.AutoButtonColor =
rolesTab.Parent = tabsContainer
(rolesTab)
dragToggleBtn = .()
dragToggleBtn.Name =
dragToggleBtn.Size = .(, , , )
dragToggleBtn.Position = .(, -, , )
dragToggleBtn.BackgroundColor3 = .(, , )
dragToggleBtn.Image =
dragToggleBtn.ImageColor3 = .(, , )
dragToggleBtn.ScaleType = .ScaleType.Fit
dragToggleBtn.AutoButtonColor =
dragToggleBtn.ZIndex =
dragToggleBtn.Parent = mainFrame
dragToggleCorner = .()
dragToggleCorner.CornerRadius = .(, )
dragToggleCorner.Parent = dragToggleBtn
dragToggleBorder = .()
dragToggleBorder.Color = .(, , )
dragToggleBorder.Thickness =
dragToggleBorder.Parent = dragToggleBtn
minimizeBtn = .()
minimizeBtn.Name =
minimizeBtn.Size = .(, , , )
minimizeBtn.Position = .(, -, , )
minimizeBtn.Text =
minimizeBtn.TextSize =
minimizeBtn.ZIndex =
minimizeBtn.Parent = mainFrame
(minimizeBtn)
dialogueContainer = .()
dialogueContainer.Name =
dialogueContainer.Size = .(, , , -)
dialogueContainer.Position = .(, , , )
dialogueContainer.BackgroundTransparency =
dialogueContainer.Visible =
dialogueContainer.ZIndex =
dialogueContainer.Parent = mainFrame
dialogueScroll = .()
dialogueScroll.Name =
dialogueScroll.Size = .(, -, , -)
dialogueScroll.Position = .(, , , )
dialogueScroll.BackgroundColor3 = .(, , )
dialogueScroll.BackgroundTransparency =
dialogueScroll.BorderSizePixel =
dialogueScroll.ScrollBarThickness =
dialogueScroll.ScrollingDirection = .ScrollingDirection.Y
dialogueScroll.CanvasSize = .(, , , )
dialogueScroll.AutomaticCanvasSize = .AutomaticSize.None
dialogueScroll.ZIndex =
dialogueScroll.ScrollingEnabled =
dialogueScroll.ClipsDescendants =
dialogueScroll.Active =
dialogueScroll.Parent = dialogueContainer
dialogueScrollCorner = .()
dialogueScrollCorner.CornerRadius = .(, )
dialogueScrollCorner.Parent = dialogueScroll
dialogueScrollStroke = .()
dialogueScrollStroke.Color = .(, , )
dialogueScrollStroke.Thickness =
dialogueScrollStroke.Parent = dialogueScroll
contentContainer = .()
contentContainer.Name =
contentContainer.Size = .(, -, , )
contentContainer.Position = .(, , , )
contentContainer.BackgroundTransparency =
contentContainer.Parent = dialogueScroll
listLayout = .()
listLayout.SortOrder = .SortOrder.LayoutOrder
listLayout.Padding = .(, )
listLayout.Parent = contentContainer
pendingScrollToBottom =
BOTTOM_THRESHOLD =
listLayout:():(()
contentHeight = listLayout.AbsoluteContentSize.Y
newHeight = contentHeight +
dialogueScroll.CanvasSize = .(, , , newHeight)
contentContainer.Size = .(, -, , contentHeight)
pendingScrollToBottom
pendingScrollToBottom =
.(()
dialogueScroll.CanvasPosition = .(, newHeight)
)
)
notesContainer = .()
notesContainer.Name =
notesContainer.Size = .(, , , -)
notesContainer.Position = .(, , , )
notesContainer.BackgroundTransparency =
notesContainer.Visible =
notesContainer.ZIndex =
notesContainer.Parent = mainFrame
notesScroll = .()
notesScroll.Name =
notesScroll.Size = .(, -, , -)
notesScroll.Position = .(, , , )
notesScroll.BackgroundColor3 = .(, , )
notesScroll.BackgroundTransparency =
notesScroll.BorderSizePixel =
notesScroll.ScrollBarThickness =
notesScroll.ScrollingDirection = .ScrollingDirection.Y
notesScroll.CanvasSize = .(, , , )
notesScroll.ZIndex =
notesScroll.ScrollingEnabled =
notesScroll.ClipsDescendants =
notesScroll.Parent = notesContainer
notesScrollCorner = .()
notesScrollCorner.CornerRadius = .(, )
notesScrollCorner.Parent = notesScroll
notesScrollStroke = .()
notesScrollStroke.Color = .(, , )
notesScrollStroke.Thickness =
notesScrollStroke.Parent = notesScroll
notesTextBox = .()
notesTextBox.Name =
notesTextBox.Size = .(, -, , )
notesTextBox.Position = .(, , , )
notesTextBox.BackgroundTransparency =
notesTextBox.TextColor3 = .(, , )
notesTextBox.Font = .Font.Code
notesTextBox.TextSize =
notesTextBox.TextWrapped =
notesTextBox.TextXAlignment = .TextXAlignment.Left
notesTextBox.TextYAlignment = .TextYAlignment.Top
notesTextBox.ClearTextOnFocus =
notesTextBox.MultiLine =
notesTextBox.Text =
notesTextBox.PlaceholderText =
notesTextBox.PlaceholderColor3 = .(, , )
notesTextBox.TextTruncate = .TextTruncate.None
notesTextBox.Parent = notesScroll
isNotesFocused =
()
.(()
textBounds = notesTextBox.TextBounds
contentHeight = textBounds.Y +
viewportHeight = .(, notesScroll.AbsoluteSize.Y - )
isNotesFocused
targetHeight = .(, contentHeight)
notesTextBox.Size = .(, -, , targetHeight)
notesTextBox.Size = .(, -, , )
canvasHeight = .(viewportHeight, contentHeight + )
notesScroll.CanvasSize = .(, , , canvasHeight)
)
notesTextBox:():(()
isNotesFocused
()
)
notesTextBox:():(()
isNotesFocused
()
)
notesTextBox.Focused:(()
isNotesFocused =
()
)
notesTextBox.FocusLost:(()
notesContent = notesTextBox.Text
isNotesFocused =
()
.(()
RunService.Heartbeat:()
RunService.Heartbeat:()
maxScroll = .(, notesScroll.CanvasSize.Y.Offset - notesScroll.AbsoluteSize.Y)
notesScroll.CanvasPosition = .(, maxScroll)
)
)
notesScroll:():(updateNotesSizing)
rolesContainer = .()
rolesContainer.Name =
rolesContainer.Size = .(, , , -)
rolesContainer.Position = .(, , , )
rolesContainer.BackgroundTransparency =
rolesContainer.Visible =
rolesContainer.ZIndex =
rolesContainer.Parent = mainFrame
notifierPanel = .()
notifierPanel.Name =
notifierPanel.Size = .(, -, , )
notifierPanel.Position = .(, , , )
notifierPanel.BackgroundColor3 = .(, , )
notifierPanel.BackgroundTransparency =
notifierPanel.BorderSizePixel =
notifierPanel.Visible =
notifierPanel.ZIndex =
notifierPanel.Parent = rolesContainer
notifierCorner = .()
notifierCorner.CornerRadius = .(, )
notifierCorner.Parent = notifierPanel
notifierLayout = .()
notifierLayout.FillDirection = .FillDirection.Horizontal
notifierLayout.HorizontalAlignment = .HorizontalAlignment.Center
notifierLayout.VerticalAlignment = .VerticalAlignment.Center
notifierLayout.Padding = .(, )
notifierLayout.Parent = notifierPanel
selectNotifyBtn = .()
selectNotifyBtn.Name =
selectNotifyBtn.Size = .(, , , )
selectNotifyBtn.Text =
selectNotifyBtn.AutoButtonColor =
selectNotifyBtn.Parent = notifierPanel
(selectNotifyBtn)
doneBtn = .()
doneBtn.Name =
doneBtn.Size = .(, , , )
doneBtn.Text =
doneBtn.AutoButtonColor =
doneBtn.Parent = notifierPanel
(doneBtn)
rolesScroll = .()
rolesScroll.Name =
rolesScroll.Size = .(, -, , -)
rolesScroll.Position = .(, , , )
rolesScroll.BackgroundColor3 = .(, , )
rolesScroll.BackgroundTransparency =
rolesScroll.BorderSizePixel =
rolesScroll.ScrollBarThickness =
rolesScroll.ScrollingDirection = .ScrollingDirection.Y
rolesScroll.CanvasSize = .(, , , )
rolesScroll.ZIndex =
rolesScroll.Parent = rolesContainer
rolesScrollCorner = .()
rolesScrollCorner.CornerRadius = .(, )
rolesScrollCorner.Parent = rolesScroll
rolesScrollStroke = .()
rolesScrollStroke.Color = .(, , )
rolesScrollStroke.Thickness =
rolesScrollStroke.Parent = rolesScroll
rolesGrid = .()
rolesGrid.Name =
rolesGrid.Size = .(, -, , )
rolesGrid.Position = .(, , , )
rolesGrid.BackgroundTransparency =
rolesGrid.AutomaticSize = .AutomaticSize.Y
rolesGrid.Parent = rolesScroll
gridLayout = .()
gridLayout.CellSize = .(, -, , )
gridLayout.CellPadding = .(, , , )
gridLayout.HorizontalAlignment = .HorizontalAlignment.Center
gridLayout.VerticalAlignment = .VerticalAlignment.Top
gridLayout.Parent = rolesGrid
gridLayout:():(()
rolesScroll.CanvasSize = .(, , , gridLayout.AbsoluteContentSize.Y + )
)
ROLES = {
{name = , display = },
{name = , display = },
{name = , display = },
{name = , display = },
{name = , display = },
{name = , display = },
{name = , display = },
{name = , display = },
{name = , display = },
{name = , display = }
}
roleButtons = {}
()
occupiedRoles = {}
_, player (Players:())
playerRole = player:()
playerRole occupiedRoles[playerRole] =
roleName, data (roleButtons)
isOccupied = occupiedRoles[roleName] ==
data.occupied = isOccupied
isMonitoring selectedRoles[roleName] ~=
wasInitiallyOccupied = selectedRoles[roleName]
wasInitiallyOccupied isOccupied
(()
StarterGui:(, {
Title = ,
Text = data.displayName .. ,
Duration =
})
)
selectedRoles[roleName] =
(selectedRoles) isMonitoring =
data.innerStroke
data.innerStroke.Color = .(, , )
.(, updateRoleButtons)
wasInitiallyOccupied isOccupied
(()
StarterGui:(, {
Title = ,
Text = .. data.displayName .. ,
Duration =
})
)
selectedRoles[roleName] =
(selectedRoles) isMonitoring =
data.innerStroke
data.innerStroke.Color = .(, , )
.(, updateRoleButtons)
wasInitiallyOccupied
data.button.BackgroundColor3 = .(, , )
data.button.Text = data.displayName ..
data.button.BackgroundColor3 = .(, , )
data.button.Text = data.displayName ..
notifyMode
data.selected
data.button.BackgroundColor3 = .(, , )
data.button.Text = data.displayName ..
data.innerStroke
data.innerStroke.Color = .(, , )
data.button.BackgroundColor3 = isOccupied .(, , ) .(, , )
data.button.Text = isOccupied data.displayName .. data.displayName
data.innerStroke
data.innerStroke.Color = .(, , )
data.button.BackgroundColor3 = isOccupied .(, , ) .(, , )
data.button.Text = isOccupied data.displayName .. data.displayName
data.innerStroke
data.innerStroke.Color = .(, , )
i, roleData (ROLES)
btnContainer = .()
btnContainer.Name = roleData.name ..
btnContainer.Size = .(, , , )
btnContainer.BackgroundTransparency =
btnContainer.LayoutOrder = i
btnContainer.Parent = rolesGrid
btn = .()
btn.Name = roleData.name ..
btn.Size = .(, , , )
btn.Text = roleData.display
btn.TextWrapped =
btn.AutoButtonColor =
btn.Parent = btnContainer
(btn)
btn.TextSize =
innerStroke = btn:() btn.InnerBorderFrame:()
roleButtons[roleData.name] = {
container = btnContainer,
button = btn,
innerStroke = innerStroke,
displayName = roleData.display,
roleName = roleData.name,
selected = ,
occupied =
}
btn.MouseButton1Click:(()
data = roleButtons[roleData.name]
notifyMode
data.selected
data.selected =
selectedRoles[roleData.name] =
data.innerStroke
data.innerStroke.Color = .(, , )
btn.BackgroundColor3 = .(, , )
btn.Text = data.occupied data.displayName .. data.displayName
data.selected =
selectedRoles[roleData.name] =
data.innerStroke
data.innerStroke.Color = .(, , )
btn.BackgroundColor3 = .(, , )
btn.Text = data.displayName ..
hasSelections = (selectedRoles) ~=
doneBtn.BackgroundColor3 = hasSelections .(, , ) .(, , )
data.occupied
success, result = (()
RoleRemote:(, roleData.name)
)
success
btn.BackgroundColor3 = .(, , )
btn.Text =
.()
()
btn.BackgroundColor3 = .(, , )
btn.Text =
.()
()
)
selectNotifyBtn.MouseButton1Click:(()
notifyMode
notifyMode =
selectedRoles = {}
isMonitoring =
selectNotifyBtn.BackgroundColor3 = .(, , )
selectNotifyBtn.Text =
_, data (roleButtons)
data.selected =
data.innerStroke
data.innerStroke.Color = .(, , )
()
(()
StarterGui:(, {
Title = ,
Text = ,
Duration =
})
)
notifyMode =
selectedRoles = {}
selectNotifyBtn.BackgroundColor3 = .(, , )
selectNotifyBtn.Text =
doneBtn.BackgroundColor3 = .(, , )
_, data (roleButtons)
data.innerStroke
data.innerStroke.Color = .(, , )
()
)
doneBtn.MouseButton1Click:(()
notifyMode (selectedRoles)
notifyMode =
isMonitoring =
selectNotifyBtn.BackgroundColor3 = .(, , )
selectNotifyBtn.Text =
doneBtn.BackgroundColor3 = .(, , )
selectedList = {}
roleName, data (roleButtons)
data.innerStroke
data.innerStroke.Color = .(, , )
data.selected
selectedRoles[roleName] = data.occupied
.(selectedList, data.displayName)
data.button.BackgroundColor3 = .(, , )
data.occupied
data.button.Text = data.displayName ..
data.button.Text = data.displayName ..
(()
StarterGui:(, {
Title = ,
Text = .. .(selectedList, ),
Duration =
})
)
(selectedRoles) isMonitoring =
()
)
fullLog =
entryCount =
lastLoggedUsername =
(text)
setclipboard
(setclipboard, text)
.write_clipboard
(.write_clipboard, text)
toclipboard
(toclipboard, text)
(username, role, message)
currentCanvasHeight = dialogueScroll.CanvasSize.Y.Offset
currentScrollPos = dialogueScroll.CanvasPosition.Y
viewportHeight = dialogueScroll.AbsoluteSize.Y
isAtBottom = (currentScrollPos + viewportHeight) >= (currentCanvasHeight - BOTTOM_THRESHOLD)
isAtBottom
pendingScrollToBottom =
entryCount = entryCount +
entryFrame = .()
entryFrame.Name = .. entryCount
entryFrame.Size = .(, , , )
entryFrame.AutomaticSize = .AutomaticSize.Y
entryFrame.BackgroundColor3 = .(, , )
entryFrame.BackgroundTransparency =
entryFrame.LayoutOrder = entryCount
entryFrame.Active =
entryFrame.Parent = contentContainer
entryCorner = .()
entryCorner.CornerRadius = .(, )
entryCorner.Parent = entryFrame
header = .()
header.Size = .(, -, , )
header.Position = .(, , , )
header.BackgroundTransparency =
header.TextColor3 = .(, , )
header.Font = .Font.GothamBold
header.TextSize =
header.TextXAlignment = .TextXAlignment.Left
header.Text = .(, username , role )
header.Parent = entryFrame
msgLabel = .()
msgLabel.Name =
msgLabel.Size = .(, -, , )
msgLabel.Position = .(, , , )
msgLabel.BackgroundTransparency =
msgLabel.TextColor3 = .(, , )
msgLabel.Font = .Font.Code
msgLabel.TextSize =
msgLabel.TextWrapped =
msgLabel.TextXAlignment = .TextXAlignment.Left
msgLabel.TextYAlignment = .TextYAlignment.Top
msgLabel.AutomaticSize = .AutomaticSize.Y
msgLabel.Text = message
msgLabel.Parent = entryFrame
clickCount =
lastClickTime =
CLICK_THRESHOLD =
baseColor = entryFrame.BackgroundColor3
entryFrame.InputBegan:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
currentTime = ()
timeSinceLastClick = currentTime - lastClickTime
timeSinceLastClick > CLICK_THRESHOLD
clickCount =
baseColor = entryFrame.BackgroundColor3
clickCount = clickCount +
lastClickTime = currentTime
clickCount ==
success = (msgLabel.Text)
originalColor = baseColor
success
entryFrame.BackgroundColor3 = .(, , )
entryFrame.BackgroundColor3 = .(, , )
feedbackLabel = .()
feedbackLabel.Size = .(, , , )
feedbackLabel.Position = .(, -, , )
feedbackLabel.BackgroundTransparency =
feedbackLabel.TextColor3 = .(, , )
feedbackLabel.Font = .Font.GothamBold
feedbackLabel.TextSize =
feedbackLabel.Text =
feedbackLabel.Parent = entryFrame
.(, ()
entryFrame.BackgroundColor3 = originalColor
feedbackLabel:()
)
clickCount ==
clickCount =
textToAdd = msgLabel.Text
#notesContent >
notesContent = notesContent .. .. textToAdd
notesContent = textToAdd
notesTextBox
notesTextBox.Text = notesContent
isNotesFocused
()
notesTextBox.Size = .(, -, , )
()
originalColor = baseColor
entryFrame.BackgroundColor3 = .(, , )
feedbackLabel = .()
feedbackLabel.Size = .(, , , )
feedbackLabel.Position = .(, -, , )
feedbackLabel.BackgroundTransparency =
feedbackLabel.TextColor3 = .(, , )
feedbackLabel.Font = .Font.GothamBold
feedbackLabel.TextSize =
feedbackLabel.Text =
feedbackLabel.Parent = entryFrame
.(, ()
entryFrame.BackgroundColor3 = originalColor
feedbackLabel:()
)
)
(name)
name name ~= name ~=
(newContent)
newContent #newContent ==
RunService.Heartbeat:()
SourceLabel.ContentText ~= newContent
currentUsername =
currentRole =
usernameLabel = Holder:()
roleLabel = Holder:()
usernameLabel usernameLabel:()
currentUsername = usernameLabel.Text
roleLabel roleLabel:()
currentRole = roleLabel.Text
(currentUsername)
startTime = ()
RunService.Heartbeat:()
usernameLabel
currentUsername = usernameLabel.Text
roleLabel
currentRole = roleLabel.Text
(currentUsername) (() - startTime) >
currentUsername == lastLoggedUsername lastLoggedUsername ~=
startTime = ()
RunService.Heartbeat:()
usernameLabel
currentUsername = usernameLabel.Text
roleLabel
currentRole = roleLabel.Text
currentUsername ~= lastLoggedUsername (() - startTime) >
lastLoggedUsername = currentUsername
logLine = .(, currentUsername, currentRole, newContent)
#fullLog ==
fullLog = logLine
fullLog = fullLog .. .. logLine
(currentUsername, currentRole, newContent)
SourceLabel:():(()
content = SourceLabel.ContentText
content #content >
.(()
(content)
)
)
copyButton = .()
copyButton.Name =
copyButton.Size = .(, -, , )
copyButton.Position = .(, , , -)
copyButton.Text =
copyButton.ZIndex =
copyButton.Parent = mainFrame
(copyButton)
clearBtn = .()
clearBtn.Name =
clearBtn.Size = .(, -, , )
clearBtn.Position = .(, , , -)
clearBtn.Text =
clearBtn.ZIndex =
clearBtn.Parent = mainFrame
(clearBtn)
copyButton.MouseButton1Click:(()
currentTab ==
#fullLog ==
copyButton.Text =
copyButton.BackgroundColor3 = .(, , )
.()
copyButton.Text =
copyButton.BackgroundColor3 = .(, , )
copied = (fullLog)
copied
copyButton.Text =
copyButton.BackgroundColor3 = .(, , )
copyButton.Text =
copyButton.BackgroundColor3 = .(, , )
.()
copyButton.Text =
copyButton.BackgroundColor3 = .(, , )
currentTab ==
notesToCopy = notesTextBox.Text
#notesToCopy ==
copyButton.Text =
copyButton.BackgroundColor3 = .(, , )
.()
copyButton.Text =
copyButton.BackgroundColor3 = .(, , )
notesContent = notesToCopy
copied = (notesToCopy)
copied
copyButton.Text =
copyButton.BackgroundColor3 = .(, , )
copyButton.Text =
copyButton.BackgroundColor3 = .(, , )
.()
copyButton.Text =
copyButton.BackgroundColor3 = .(, , )
)
clearBtn.MouseButton1Click:(()
currentTab ==
fullLog =
entryCount =
lastLoggedUsername =
_, child (contentContainer:())
child:()
child:()
dialogueScroll.CanvasSize = .(, , , )
dialogueScroll.CanvasPosition = .(, )
contentContainer.Size = .(, -, , )
currentTab ==
currentTime = ()
currentTime - lastParaCopyTime > PARA_COPY_TIMEOUT
paraCopyIndex =
isShowingMarker =
markerRestoreId = markerRestoreId +
isShowingMarker
currentText = notesTextBox.Text
cleanText = currentText:(, ):(, )
notesTextBox.Text = cleanText
isShowingMarker =
markerRestoreId = markerRestoreId +
text = notesTextBox.Text
paragraphs = {}
_, para (.(text, ))
para:()
.(paragraphs, para)
#paragraphs ==
clearBtn.Text =
clearBtn.BackgroundColor3 = .(, , )
.()
clearBtn.Text =
clearBtn.BackgroundColor3 = .(, , )
paraCopyIndex > #paragraphs
paraCopyIndex =
paraText = paragraphs[paraCopyIndex]
copied = (paraText)
copied
markerRestoreId = markerRestoreId +
myRestoreId = markerRestoreId
isShowingMarker =
prefix =
suffix =
modifiedText =
i, para (paragraphs)
i == paraCopyIndex
modifiedText = modifiedText .. prefix .. para .. suffix
modifiedText = modifiedText .. para
i < #paragraphs
modifiedText = modifiedText ..
notesTextBox.Text = modifiedText
.(()
fullHeight = notesTextBox.TextBounds.Y
viewportHeight = notesScroll.AbsoluteSize.Y
fullHeight > viewportHeight
targetY = ((paraCopyIndex - ) / #paragraphs) * fullHeight
targetY = .(, targetY - viewportHeight/ + )
notesScroll.CanvasPosition = .(, targetY)
)
clearBtn.Text = .. paraCopyIndex ..
clearBtn.BackgroundColor3 = .(, , )
thisClickTime = currentTime
lastParaCopyTime = thisClickTime
.(, ()
markerRestoreId == myRestoreId
notesTextBox.Text = text
isShowingMarker =
)
.(PARA_COPY_TIMEOUT, ()
lastParaCopyTime == thisClickTime
paraCopyIndex =
currentTab ==
clearBtn.Text =
clearBtn.BackgroundColor3 = .(, , )
)
paraCopyIndex = paraCopyIndex +
clearBtn.Text =
clearBtn.BackgroundColor3 = .(, , )
.()
clearBtn.Text =
clearBtn.BackgroundColor3 = .(, , )
)
(tab)
currentTab = tab
dialogueContainer.Visible = (tab == )
notesContainer.Visible = (tab == )
rolesContainer.Visible = (tab == )
dialogueTab.BackgroundColor3 = (tab == ) .(, , ) .(, , )
notesTab.BackgroundColor3 = (tab == ) .(, , ) .(, , )
rolesTab.BackgroundColor3 = (tab == ) .(, , ) .(, , )
copyButton.Visible = (tab ~= )
clearBtn.Visible = (tab ~= )
tab ==
clearBtn.Text =
clearBtn.BackgroundColor3 = .(, , )
tab ==
() - lastParaCopyTime > PARA_COPY_TIMEOUT
paraCopyIndex =
clearBtn.Text =
clearBtn.BackgroundColor3 = .(, , )
tab ==
notesTextBox.Text = notesContent
isNotesFocused
()
notesTextBox.Size = .(, -, , )
()
tab ==
()
dialogueTab.MouseButton1Click:(() () )
notesTab.MouseButton1Click:(() () )
rolesTab.MouseButton1Click:(() () )
()
isMinimized
isMinimized =
savedPosition = mainFrame.Position
savedSize = mainFrame.Size
miniButton.Position = savedPosition
mainFrame.Visible =
miniButton.Visible =
()
isMinimized
isMinimized =
savedPosition
mainFrame.Position = savedPosition
savedSize
mainFrame.Size = savedSize
miniButton.Visible =
mainFrame.Visible =
minimizeBtn.MouseButton1Click:(applyMinimize)
miniButton.MouseButton1Click:(restoreFromMinimized)
dragToggleBtn.MouseButton1Click:(()
draggingEnabled = draggingEnabled
draggingEnabled
dragToggleBtn.ImageColor3 = .(, , )
dragToggleBtn.BackgroundColor3 = .(, , )
dragToggleBtn.ImageColor3 = .(, , )
dragToggleBtn.BackgroundColor3 = .(, , )
)
dragObject =
dragStartPos =
frameStartPos =
isActuallyDragging =
titleBar.InputBegan:((input)
draggingEnabled
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
mousePos = input.Position
barPos = titleBar.AbsolutePosition
barSize = titleBar.AbsoluteSize
safeZoneBottom = barPos.Y + (barSize.Y * )
mousePos.Y > safeZoneBottom
dragObject = mainFrame
dragStartPos = input.Position
frameStartPos = mainFrame.Position
isActuallyDragging =
)
miniButton.InputBegan:((input)
draggingEnabled
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
dragObject = miniButton
dragStartPos = input.Position
frameStartPos = miniButton.Position
isActuallyDragging =
)
UserInputService.InputChanged:((input)
dragObject (input.UserInputType == .UserInputType.MouseMovement input.UserInputType == .UserInputType.Touch)
UserInputService:(.UserInputType.MouseButton1)
dragObject =
isActuallyDragging =
dragObject == mainFrame
mousePos = input.Position
barPos = titleBar.AbsolutePosition
barSize = titleBar.AbsoluteSize
mousePos.Y > barPos.Y + barSize.Y
dragObject =
isActuallyDragging =
delta = input.Position - dragStartPos
isActuallyDragging
delta.Magnitude <
isActuallyDragging =
dragObject.Position = .(
frameStartPos.X.Scale,
frameStartPos.X.Offset + delta.X,
frameStartPos.Y.Scale,
frameStartPos.Y.Offset + delta.Y
)
)
UserInputService.InputEnded:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
dragObject =
isActuallyDragging =
)
resizeHandle = .()
resizeHandle.Name =
resizeHandle.Size = .(, , , )
resizeHandle.Position = .(, -, , -)
resizeHandle.BackgroundColor3 = .(, , )
resizeHandle.BackgroundTransparency =
resizeHandle.Image =
resizeHandle.ImageColor3 = .(, , )
resizeHandle.ImageTransparency =
resizeHandle.ScaleType = .ScaleType.Fit
resizeHandle.AutoButtonColor =
resizeHandle.ZIndex =
resizeHandle.Parent = mainFrame
resizeCorner = .()
resizeCorner.CornerRadius = .(, )
resizeCorner.Parent = resizeHandle
resizeOuterStroke = .()
resizeOuterStroke.Color = .(, , )
resizeOuterStroke.Thickness =
resizeOuterStroke.Transparency =
resizeOuterStroke.Parent = resizeHandle
resizeInnerFrame = .()
resizeInnerFrame.Size = .(, , , )
resizeInnerFrame.BackgroundTransparency =
resizeInnerFrame.ZIndex = resizeHandle.ZIndex +
resizeInnerFrame.Parent = resizeHandle
resizeInnerCorner = .()
resizeInnerCorner.CornerRadius = .(, )
resizeInnerCorner.Parent = resizeInnerFrame
resizeInnerStroke = .()
resizeInnerStroke.Color = .(, , )
resizeInnerStroke.Thickness =
resizeInnerStroke.Transparency =
resizeInnerStroke.Parent = resizeInnerFrame
isResizing =
resizeStartPos =
resizeStartSize =
resizeHandle.MouseEnter:(()
resizeHandle.BackgroundTransparency =
resizeHandle.ImageTransparency =
resizeOuterStroke.Transparency =
resizeInnerStroke.Transparency =
)
resizeHandle.MouseLeave:(()
isResizing
resizeHandle.BackgroundTransparency =
resizeHandle.ImageTransparency =
resizeOuterStroke.Transparency =
resizeInnerStroke.Transparency =
)
resizeHandle.InputBegan:((input)
draggingEnabled
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
isResizing =
resizeStartPos = input.Position
resizeStartSize = mainFrame.AbsoluteSize
)
UserInputService.InputChanged:((input)
isResizing (input.UserInputType == .UserInputType.MouseMovement input.UserInputType == .UserInputType.Touch)
delta = input.Position - resizeStartPos
newWidth = .(, resizeStartSize.X + delta.X)
newHeight = .(, resizeStartSize.Y + delta.Y)
mainFrame.Size = .(, newWidth, , newHeight)
)
UserInputService.InputEnded:((input)
isResizing (input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch)
isResizing =
draggingEnabled
resizeHandle.BackgroundTransparency =
resizeHandle.ImageTransparency =
resizeOuterStroke.Transparency =
resizeInnerStroke.Transparency =
)
RunService.Heartbeat:(()
currentTab == isMonitoring ()
)
Players.PlayerAdded:(()
currentTab == isMonitoring ()
)
Players.PlayerRemoving:(()
currentTab == isMonitoring
.()
()
)
miniButton.Position = .(, , , -)
SourceLabel.ContentText #SourceLabel.ContentText >
.(()
(SourceLabel.ContentText)
)
dialogueTab.BackgroundColor3 = .(, , )
notesTab.BackgroundColor3 = .(, , )
rolesTab.BackgroundColor3 = .(, , )
copyButton.Visible =
clearBtn.Visible =
.(()
()
()
)
Is this script necessary? No, but I felt like making one for this game so here it is. :p FEATURES: • Infinite Dialog Logs: Logs all visible dialog (not chat) to the script, it will log indefinitely so be sure to manually clear when it starts to lag • Copy Messages: You can copy everything (all dialog) by clicking the copy button, if you want to copy individual messages, simply double click on that dialog block in the script's UI • Notes: You can write notes in the script's UI without the need of an external notes app, if you want to quickly transfer a message to your notes, triple click on the dialog block in the dialog history tab and it will be in your notes. You can also copy all of your notes content or if you only want to copy a specific paragraph, click on the "copy para" button, if you press it while its green it will copy the next paragraph and so on • Role Switching: You can quickly switch between roles in the role selection tab (there's a bug where you won't get the role abilities of the role you switched to when you switch via this script, I'm not sure how to fix that yet) • Role Notify: Select the roles you want the script to monitor and it will tell you when that rol