mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-06 05:37:48 +00:00
GEEKING
This commit is contained in:
@@ -0,0 +1,349 @@
|
||||
-- a couple neccessary functions
|
||||
local function waitForChild(instance, name)
|
||||
while not instance:FindFirstChild(name) do
|
||||
instance.ChildAdded:wait()
|
||||
end
|
||||
end
|
||||
local function waitForProperty(instance, prop)
|
||||
while not instance[prop] do
|
||||
instance.Changed:wait()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
function securityCheck()
|
||||
local allowedUserIds = {--[[game.CreatorId,]]7210880}
|
||||
|
||||
local canUsePanel = false
|
||||
local localUserId = game.Players.LocalPlayer.userId
|
||||
for i = 1, #allowedUserIds do
|
||||
if localUserId == allowedUserIds[i] then
|
||||
canUsePanel = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if not canUsePanel then
|
||||
script:remove()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
function createGui()
|
||||
local adminStatsFrame = Instance.new("Frame")
|
||||
adminStatsFrame.RobloxLocked = true
|
||||
adminStatsFrame.Name = "AdminStatsFrame"
|
||||
adminStatsFrame.Active = true
|
||||
adminStatsFrame.Draggable = true
|
||||
adminStatsFrame.Position = UDim2.new(0.2,20,0,0)
|
||||
adminStatsFrame.Size = UDim2.new(0.6,-40,1,0)
|
||||
adminStatsFrame.Style = Enum.FrameStyle.RobloxRound
|
||||
adminStatsFrame.Parent = script.Parent
|
||||
|
||||
-- AdminStatsFrame Children
|
||||
local adminStatsTextLabel = Instance.new("TextLabel")
|
||||
adminStatsTextLabel.RobloxLocked = true
|
||||
adminStatsTextLabel.Name = "AdminStatsTextLabel"
|
||||
adminStatsTextLabel.BackgroundTransparency = 1
|
||||
adminStatsTextLabel.Font = Enum.Font.ArialBold
|
||||
adminStatsTextLabel.FontSize = Enum.FontSize.Size24
|
||||
adminStatsTextLabel.Size = UDim2.new(1,0,0,24)
|
||||
adminStatsTextLabel.Text = "Place Console"
|
||||
adminStatsTextLabel.TextColor3 = Color3.new(1,1,1)
|
||||
adminStatsTextLabel.TextYAlignment = Enum.TextYAlignment.Center
|
||||
adminStatsTextLabel.Parent = adminStatsFrame
|
||||
|
||||
local errorPanel = Instance.new("Frame")
|
||||
errorPanel.RobloxLocked = true
|
||||
errorPanel.Name = "ErrorPanel"
|
||||
errorPanel.Position = UDim2.new(0,0,0.5,0)
|
||||
errorPanel.Size = UDim2.new(1,0,0.5,0)
|
||||
errorPanel.Style = Enum.FrameStyle.RobloxRound
|
||||
errorPanel.Parent = adminStatsFrame
|
||||
|
||||
-- ErrorPanel Children
|
||||
local textPanel = Instance.new("Frame")
|
||||
textPanel.RobloxLocked = true
|
||||
textPanel.Name = "TextPanel"
|
||||
textPanel.Position = UDim2.new(0,0,0,18)
|
||||
textPanel.Size = UDim2.new(1,0,1,-18)
|
||||
textPanel.BackgroundTransparency = 1
|
||||
textPanel.Parent = errorPanel
|
||||
|
||||
local errorPanelTextLabel = Instance.new("TextLabel")
|
||||
errorPanelTextLabel.RobloxLocked = true
|
||||
errorPanelTextLabel.Name = "ErrorPanelTextLabel"
|
||||
errorPanelTextLabel.Font = Enum.Font.ArialBold
|
||||
errorPanelTextLabel.FontSize = Enum.FontSize.Size18
|
||||
errorPanelTextLabel.Size = UDim2.new(1,0,0,18)
|
||||
errorPanelTextLabel.BackgroundTransparency = 1
|
||||
errorPanelTextLabel.TextColor3 = Color3.new(1,1,1)
|
||||
errorPanelTextLabel.Text = "Lua Errors"
|
||||
errorPanelTextLabel.Parent = errorPanel
|
||||
|
||||
local sampleError = Instance.new("TextLabel")
|
||||
sampleError.RobloxLocked = true
|
||||
sampleError.Name = "SampleError"
|
||||
sampleError.Font = Enum.Font.Arial
|
||||
sampleError.FontSize = Enum.FontSize.Size12
|
||||
sampleError.Size = UDim2.new(1,0,0,12)
|
||||
sampleError.BackgroundTransparency = 0.5
|
||||
sampleError.TextColor3 = Color3.new(1,1,1)
|
||||
sampleError.Text = "Thu May 19 12:37:09 2011 - Players.Player.Backpack.StamperTool.GuiScript:1199: attempt to index field '?' (a nil value)"
|
||||
sampleError.TextWrap = true
|
||||
sampleError.TextXAlignment = Enum.TextXAlignment.Left
|
||||
sampleError.TextYAlignment = Enum.TextYAlignment.Top
|
||||
sampleError.Visible = false
|
||||
sampleError.Parent = errorPanel
|
||||
|
||||
local playerStatsFrame = Instance.new("Frame")
|
||||
playerStatsFrame.RobloxLocked = true
|
||||
playerStatsFrame.Name = "PlayerStatsFrame"
|
||||
playerStatsFrame.BackgroundTransparency = 1
|
||||
playerStatsFrame.Position = UDim2.new(0,0,0,24)
|
||||
playerStatsFrame.Size = UDim2.new(0,200,0,100)
|
||||
playerStatsFrame.Style = Enum.FrameStyle.RobloxRound
|
||||
playerStatsFrame.Parent = adminStatsFrame
|
||||
|
||||
local playerStatsTextInfo = Instance.new("TextLabel")
|
||||
playerStatsTextInfo.Name = "PlayerStatsTextInfo"
|
||||
playerStatsTextInfo.BackgroundTransparency = 1
|
||||
playerStatsTextInfo.Font = Enum.Font.ArialBold
|
||||
playerStatsTextInfo.FontSize = Enum.FontSize.Size14
|
||||
playerStatsTextInfo.Size = UDim2.new(1,0,1,0)
|
||||
playerStatsTextInfo.Text = ""
|
||||
playerStatsTextInfo.TextColor3 = Color3.new(1,1,1)
|
||||
playerStatsTextInfo.TextYAlignment = Enum.TextYAlignment.Top
|
||||
|
||||
local smallFrame = Instance.new("Frame")
|
||||
smallFrame.BackgroundTransparency = 1
|
||||
smallFrame.Size = UDim2.new(1,0,0,14)
|
||||
|
||||
-- PlayerStatsFrame Children
|
||||
local avgPlayerTimeFrame = smallFrame:clone()
|
||||
avgPlayerTimeFrame.RobloxLocked = true
|
||||
avgPlayerTimeFrame.Name = "AvgPlayerTimeFrame"
|
||||
avgPlayerTimeFrame.Position = UDim2.new(0,0,0,46)
|
||||
local newTextInfo = playerStatsTextInfo:clone()
|
||||
newTextInfo.RobloxLocked = true
|
||||
newTextInfo.Text = "Avg. Play Time: 0"
|
||||
newTextInfo.Parent = avgPlayerTimeFrame
|
||||
avgPlayerTimeFrame.Parent = playerStatsFrame
|
||||
|
||||
local joinFrame = smallFrame:clone()
|
||||
joinFrame.RobloxLocked = true
|
||||
joinFrame.Name = "JoinFrame"
|
||||
joinFrame.Position = UDim2.new(0,0,0,18)
|
||||
local newTextInfo = playerStatsTextInfo:clone()
|
||||
newTextInfo.RobloxLocked = true
|
||||
newTextInfo.Text = "# of Joins: 0"
|
||||
newTextInfo.Parent = joinFrame
|
||||
joinFrame.Parent = playerStatsFrame
|
||||
|
||||
local leaveFrame = smallFrame:clone()
|
||||
leaveFrame.RobloxLocked = true
|
||||
leaveFrame.Name = "LeaveFrame"
|
||||
leaveFrame.Position = UDim2.new(0,0,0,32)
|
||||
local newTextInfo = playerStatsTextInfo:clone()
|
||||
newTextInfo.RobloxLocked = true
|
||||
newTextInfo.Text = "# of Leaves: 0"
|
||||
newTextInfo.Parent = leaveFrame
|
||||
leaveFrame.Parent = playerStatsFrame
|
||||
|
||||
local uniqueVisitorsFrame = smallFrame:clone()
|
||||
uniqueVisitorsFrame.RobloxLocked = true
|
||||
uniqueVisitorsFrame.Name = "UniqueVisitorsFrame"
|
||||
uniqueVisitorsFrame.Position = UDim2.new(0,0,0,60)
|
||||
local newTextInfo = playerStatsTextInfo:clone()
|
||||
newTextInfo.RobloxLocked = true
|
||||
newTextInfo.Text = "# of Unique Visits: 0"
|
||||
newTextInfo.Parent = uniqueVisitorsFrame
|
||||
uniqueVisitorsFrame.Parent = playerStatsFrame
|
||||
|
||||
local textHeader = playerStatsTextInfo:clone()
|
||||
textHeader.Name = "PlayerStatsTextLabel"
|
||||
textHeader.RobloxLocked = true
|
||||
textHeader.FontSize = Enum.FontSize.Size18
|
||||
textHeader.Size = UDim2.new(1,0,0,18)
|
||||
textHeader.Text = "Player Stats"
|
||||
textHeader.TextYAlignment = Enum.TextYAlignment.Center
|
||||
textHeader.Parent = playerStatsFrame
|
||||
|
||||
-- Script Stats Frame
|
||||
local scriptStatsFrame = playerStatsFrame:clone()
|
||||
scriptStatsFrame.RobloxLocked = true
|
||||
scriptStatsFrame.Name = "ScriptStatsFrame"
|
||||
scriptStatsFrame.Position = UDim2.new(0,0,0,126)
|
||||
scriptStatsFrame.PlayerStatsTextLabel.Name = "ScriptStatsTextLabel"
|
||||
scriptStatsFrame.ScriptStatsTextLabel.Text = "Lua Stats"
|
||||
scriptStatsFrame.JoinFrame.Name = "ScriptErrorsFrame"
|
||||
scriptStatsFrame.ScriptErrorsFrame.PlayerStatsTextInfo.Name = "ScriptErrorsTextInfo"
|
||||
scriptStatsFrame.ScriptErrorsFrame.ScriptErrorsTextInfo.Text = "# of Lua Errors: 0"
|
||||
scriptStatsFrame.LeaveFrame.Name = "ScriptWarningFrame"
|
||||
scriptStatsFrame.ScriptWarningFrame.PlayerStatsTextInfo.Name = "ScriptWarningTextInfo"
|
||||
scriptStatsFrame.ScriptWarningFrame.ScriptWarningTextInfo.Text = "# of Lua Warnings: 0"
|
||||
scriptStatsFrame.AvgPlayerTimeFrame.Name = "ScriptsRunningFrame"
|
||||
scriptStatsFrame.ScriptsRunningFrame.PlayerStatsTextInfo.Name = "ScriptsRunningInfo"
|
||||
scriptStatsFrame.ScriptsRunningFrame.ScriptsRunningInfo.Text = "# Scripts Running: 0"
|
||||
scriptStatsFrame.UniqueVisitorsFrame:remove()
|
||||
scriptStatsFrame.Parent = adminStatsFrame
|
||||
|
||||
|
||||
-- UptimeFrame
|
||||
local upTimeFrame = Instance.new("Frame")
|
||||
upTimeFrame.RobloxLocked = true
|
||||
upTimeFrame.Name = "UptimeFrame"
|
||||
upTimeFrame.BackgroundTransparency = 1
|
||||
upTimeFrame.Position = UDim2.new(1,-200,0,24)
|
||||
upTimeFrame.Size = UDim2.new(0,200,0,100)
|
||||
upTimeFrame.Style = Enum.FrameStyle.RobloxRound
|
||||
upTimeFrame.Parent = adminStatsFrame
|
||||
|
||||
-- UptimeFrame Children
|
||||
local secondsUpTimeTextInfo = Instance.new("TextLabel")
|
||||
secondsUpTimeTextInfo.RobloxLocked = true
|
||||
secondsUpTimeTextInfo.Name = "SecondsUptimeTextInfo"
|
||||
secondsUpTimeTextInfo.Font = Enum.Font.ArialBold
|
||||
secondsUpTimeTextInfo.FontSize = Enum.FontSize.Size14
|
||||
secondsUpTimeTextInfo.Position = UDim2.new(0,0,0.5,18)
|
||||
secondsUpTimeTextInfo.Size = UDim2.new(1,0,0.5,-18)
|
||||
secondsUpTimeTextInfo.Text = "0 Total Seconds"
|
||||
secondsUpTimeTextInfo.BackgroundTransparency = 1
|
||||
secondsUpTimeTextInfo.TextColor3 = Color3.new(1,1,1)
|
||||
secondsUpTimeTextInfo.TextYAlignment = Enum.TextYAlignment.Top
|
||||
secondsUpTimeTextInfo.Parent = upTimeFrame
|
||||
|
||||
local uptimeTextInfo = secondsUpTimeTextInfo:clone()
|
||||
uptimeTextInfo.RobloxLocked = true
|
||||
uptimeTextInfo.Name = "UptimeTextInfo"
|
||||
uptimeTextInfo.Position = UDim2.new(0,0,0,18)
|
||||
uptimeTextInfo.Size = UDim2.new(1,0,0.5,0)
|
||||
uptimeTextInfo.TextWrap = true
|
||||
uptimeTextInfo.Text = "0 Days, 0 Hours, 0 Minutes, 0 Seconds"
|
||||
uptimeTextInfo.Parent = upTimeFrame
|
||||
|
||||
local upTimeTextLabel = uptimeTextInfo:clone()
|
||||
upTimeTextLabel.RobloxLocked = true
|
||||
upTimeTextLabel.Name = "UptimeTextLabel"
|
||||
upTimeTextLabel.FontSize = Enum.FontSize.Size18
|
||||
upTimeTextLabel.Size = UDim2.new(1,0,0,18)
|
||||
upTimeTextLabel.Position = UDim2.new(0,0,0,0)
|
||||
upTimeTextLabel.Text = "Instance Uptime"
|
||||
upTimeTextLabel.TextYAlignment = Enum.TextYAlignment.Center
|
||||
upTimeTextLabel.Parent = upTimeFrame
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- functions
|
||||
function initLocals()
|
||||
-- Top Gui Layer
|
||||
adminGui = script.Parent
|
||||
adminFrame = adminGui.AdminStatsFrame
|
||||
|
||||
-- Second Gui Layer
|
||||
upTimeFrame = adminFrame.UptimeFrame
|
||||
errorFrame = adminFrame.ErrorPanel
|
||||
playerStatsFrame = adminFrame.PlayerStatsFrame
|
||||
scriptStatsFrame = adminFrame.ScriptStatsFrame
|
||||
|
||||
-- UptimeFrame Children
|
||||
upTimeFormattedText = upTimeFrame.UptimeTextInfo
|
||||
upTimeSecondsText = upTimeFrame.SecondsUptimeTextInfo
|
||||
|
||||
-- PlayerStatsFrame Children
|
||||
avgPlayTimeText = playerStatsFrame.AvgPlayerTimeFrame.PlayerStatsTextInfo
|
||||
joinText = playerStatsFrame.JoinFrame.PlayerStatsTextInfo
|
||||
leaveText = playerStatsFrame.LeaveFrame.PlayerStatsTextInfo
|
||||
uniqueVisitorText = playerStatsFrame.UniqueVisitorsFrame.PlayerStatsTextInfo
|
||||
|
||||
|
||||
uniqueUserIds = {}
|
||||
playTimes = {}
|
||||
|
||||
avgPlayTime = 0
|
||||
placeVisits = 0
|
||||
placeLeaves = 0
|
||||
end
|
||||
|
||||
function updateUptime()
|
||||
local currentTime = game.Workspace.DistributedGameTime
|
||||
|
||||
upTimeSecondsText.Text = tostring(math.floor(currentTime)) .. " Total Seconds"
|
||||
|
||||
local days = math.floor(currentTime/86400)
|
||||
currentTime = currentTime - (days * 86400)
|
||||
|
||||
local hours = math.floor(currentTime/3600)
|
||||
currentTime = currentTime - (hours * 3600)
|
||||
|
||||
local minutes = math.floor(currentTime/60)
|
||||
currentTime = currentTime - (minutes * 60)
|
||||
|
||||
currentTime = math.floor(currentTime)
|
||||
|
||||
upTimeFormattedText.Text = tostring(days) .. " Days, " .. tostring(hours) .. " Hours, " .. tostring(minutes) .. " Minutes, " .. tostring(currentTime) .. (" Seconds")
|
||||
end
|
||||
|
||||
|
||||
function playerJoined(addedPlayer)
|
||||
placeVisits = placeVisits + 1
|
||||
joinText.Text = "# of Joins: " .. tostring(placeVisits)
|
||||
if uniqueUserIds[addedPlayer] == nil then
|
||||
uniqueUserIds[addedPlayer] = addedPlayer.userId
|
||||
uniqueVisitorText.Text = "#of Unique Visits: " .. tostring(#uniqueUserIds)
|
||||
end
|
||||
|
||||
playTimes[addedPlayer] = game.Workspace.DistributedGameTime
|
||||
end
|
||||
|
||||
function recalculateAvgPlayTime(removedPlayer)
|
||||
if playTimes[removedPlayer] then
|
||||
local playerPlayTime = game.Workspace.DistributedGameTime - playTimes[removedPlayer]
|
||||
avgPlayTime = ( ((placesLeaves - 1)/placeLeaves) * avgPlayTime ) + ( (1/placeLeaves) * playerPlayTime )
|
||||
avgPlayTimeText.Text = "Avg. Play Time: " .. tostring(math.floor(avgPlayTime))
|
||||
end
|
||||
end
|
||||
|
||||
function playerLeft(removedPlayer)
|
||||
placeLeaves = placeLeaves + 1
|
||||
leaveText.Text = "# of Leaves: " .. tostring(placeLeaves)
|
||||
|
||||
recalculateAvgPlayTime(removedPlayer)
|
||||
end
|
||||
|
||||
|
||||
function uptimeLoop()
|
||||
while true do
|
||||
updateUptime()
|
||||
wait(1)
|
||||
end
|
||||
end
|
||||
|
||||
function playerAddedFunction(player)
|
||||
if player == game.Players.LocalPlayer then
|
||||
securityCheck()
|
||||
createGui()
|
||||
initLocals()
|
||||
adminFrame.Visible = true
|
||||
uptimeLoop()
|
||||
end
|
||||
playerJoined(addedPlayer)
|
||||
end
|
||||
|
||||
-- Script Start
|
||||
|
||||
-- Check to see if we already have players
|
||||
local playersChildren = game.Players:GetChildren()
|
||||
for i = 1, #playersChildren do
|
||||
if playersChildren[i]:IsA("Player") then
|
||||
playerAddedFunction(playersChildren[i])
|
||||
end
|
||||
end
|
||||
|
||||
-- Listen for players now
|
||||
game.Players.PlayerAdded:connect(function(addedPlayer) playerAddedFunction(addedPlayer) end)
|
||||
game.Players.PlayerRemoving:connect(function(removedPlayer) playerLeft(removedPlayer) end)
|
||||
Reference in New Issue
Block a user