Client
GUIEditor = {
gridlist = {},
window = {}
}
addEventHandler("onClientResourceStart", resourceRoot,
function()
GUIEditor.window[1] = guiCreateWindow(255, 157, 356, 291, "Time", false)
guiWindowSetSizable(GUIEditor.window[1], false)
GUIEditor.gridlist[1] = guiCreateGridList(18, 29, 171, 246, false, GUIEditor.window[1])
guiGridListAddColumn(GUIEditor.gridlist[1], "Player Name", 0.9)
for i = 1, 6 do
guiGridListAddRow(GUIEditor.gridlist[1])
end
guiGridListSetItemText(GUIEditor.gridlist[1], 0, 1, "-", false, false)
GUIEditor.gridlist[2] = guiCreateGridList(188, 32, 158, 243, false, GUIEditor.window[1])
guiGridListAddColumn(GUIEditor.gridlist[2], "Time Server", 0.9)
for i = 1, 3 do
guiGridListAddRow(GUIEditor.gridlist[2])
end
guiGridListSetItemText(GUIEditor.gridlist[2], 0, 1, "-", false, false)
end
)
function SetPlayersInGD( GridList )
if GridList then
if getElementType ( GridList ) == "gui-gridlist" then
if guiGridListClear ( GridList ) then
for i, v in next, getElementsByType ( "player" ) do
local Row = guiGridListAddRow ( GridList )
guiGridListSetItemText ( GridList, Row, 1, getPlayerName ( v ), false, false )
guiGridListSetItemText ( GridList, Row, 2, getPlayerTime( v ), false, false )
end
end
end
end
end
function searchgd(GridList,name)
if guiGridListClear ( GridList ) then
for i, v in next, getElementsByType ( "player" ) do
if not string.find(getPlayerName(v),name) then return end
local Row = guiGridListAddRow ( GridList )
guiGridListSetItemText ( GridList, Row, 1, getPlayerName ( v ), false, false )
guiGridListSetItemText ( GridList, Row, 2, getPlayerTime( v ), false, false )
end
end
end
function OpenWin()
if guiGetVisible ( GUIEditor.window[1] ) then
guiSetVisible ( GUIEditor.window[1], false )
showCursor(false)
guiSetInputEnabled(false)
else
guiSetVisible ( GUIEditor.window[1], true )
showCursor(true)
guiSetInputEnabled(true)
end
end
bindKey("F7", "down", OpenWin)
Server
exports.scoreboard:addScoreboardColumn('PlayTime')
addEvent("addTime",true)
addEvent("removeTime",true)
addEvent("ToServer",true)
local t = { }
local w = {}
addEventHandler("ToServer",root,
function (word,get,time)
if word and tonumber(get) and tonumber(time) then
table.insert(w,{word,get})
setTimer(function ()
for _,v in ipairs(w) do
if v[1] == word and v[2] == get then
table.remove(w,i)
end
end
end,time*60*60*1000,1)
end
end
)
addEventHandler("onConsole",root,
function (msg)
for _,v in ipairs(w) do
if msg == v[1] then
local playeraccount = getPlayerAccount ( source )
if ( playeraccount ) and not isGuestAccount ( playeraccount ) then
if not getAccountData ( playeraccount, "time-"..msg) then
addPlayerTime(source,v[2])
setAccountData( playeraccount, "time-"..msg,true)
end
end
end
end
end
)
addEventHandler("addTime",root,
function (to,time)
if to == "all" then
for _,v in ipairs(getElementsByType("player")) do
addPlayerTime(v,time)
end
else
plr = getPlayerFromName(to)
if plr then
addPlayerTime(plr,time)
end
end
end
)
addEventHandler("removeTime",root,
function (to,time)
if to == "all" then
for _,v in ipairs(getElementsByType("player")) do
removePlayerTime(v,time)
end
else
plr = getPlayerFromName(to)
if plr then
removePlayerTime(plr,time)
end
end
end
)
function addPlayerTime(plr,time)
time = math.floor(time)
t[plr]['hour'] = tonumber(t[plr]['hour'] or 0) + time
end
function removePlayerTime(plr,time)
time = math.floor(time)
t[plr]['hour'] = tonumber(t[plr]['hour'] or 0) - time
end
function checkValues( source,arg1,arg2)
if (arg2 >= 60) then
t[ source ][ 'min' ] = tonumber( t[ source ][ 'min' ] or 0 ) + 1
t[ source ][ 'sec' ] = 0
end
if (arg1 >= 60) then
t[ source ][ 'min' ] = 0
t[ source ][ 'hour' ] = tonumber( t[ source ][ 'hour' ] or 0 ) + 1
end
return arg1, arg2
end
setTimer(
function( )
for _, v in pairs( getElementsByType( "player" ) ) do
if (not t[ v ]) then
t[ v ] = {
["hour"] = 0,
["min"] = 0,
["sec"] = 0
}
end
t[ v ][ 'sec' ] = tonumber( t[ v ][ 'sec' ] or 0 ) + 1
local min,sec = checkValues (
v,
t[ v ][ 'min' ] or 0,
t[ v ][ 'sec' ] or 0
)
local hour = tonumber( t[ v ][ 'hour' ] or 0 )
setElementData(
v,
"PlayTime",
tostring( hour )..':'..tostring( min )..':'..tostring( sec )
)
end
end,
1000, 0
)
function onPlayerQuit ( )
local playeraccount = getPlayerAccount ( source )
if ( playeraccount ) and not isGuestAccount ( playeraccount ) then
local sValue = getElementData( source,'PlayTime' )
local hour = tonumber( t[ source ][ 'hour' ] or 0 )
local min = tonumber( t[ source ][ 'min' ] or 0 )
local sec = tonumber( t[ source ][ 'sec' ] or 0 )
setAccountData ( playeraccount, "PlayTime-hour", tostring(hour) )
setAccountData ( playeraccount, "PlayTime-min", tostring(min) )
setAccountData ( playeraccount, "PlayTime-sec", tostring(sec) )
setAccountData ( playeraccount, "PlayTime", tostring(sValue) )
end
t[ source ] = nil
end
function onPlayerLogin (_, playeraccount )
if ( playeraccount ) then
local time = getAccountData ( playeraccount, "PlayTime" )
local hou = getAccountData ( playeraccount, "PlayTime-hour")
local min = getAccountData ( playeraccount, "PlayTime-min")
local sec = getAccountData ( playeraccount, "PlayTime-sec")
if ( time ) then
setElementData ( source, "PlayTime", time )
t[ source ]["hour"] = tonumber(hou)
t[ source ]["min"] = tonumber(min)
t[ source ]["sec"] = tonumber(sec)
else
setElementData ( source, "PlayTime",0 )
setAccountData ( playeraccount, "PlayTime",0 )
end
end
end
addEventHandler ( "onPlayerQuit", root, onPlayerQuit )
addEventHandler ( "onPlayerLogin", root, onPlayerLogin )