جرب كذا :
--Client side #
GUIEditor = {
gridlist = {},
window = {},
label = {}
}
addEventHandler("onClientResourceStart", resourceRoot,
function()
GUIEditor.window[1] = guiCreateWindow(215, 117, 460, 403, "اعلى 30 تواجد في السـيـرفـر", false)
guiWindowSetSizable(GUIEditor.window[1], false)
guiSetAlpha(GUIEditor.window[1], 1.00)
guiSetVisible ( GUIEditor.window[1], false )
guiSetProperty(GUIEditor.window[1], "CaptionColour", "FF01FAB6")
Gridilist = guiCreateGridList(10, 54, 436, 324, false, GUIEditor.window[1])
guiGridListAddColumn(Gridilist, "playerName", 0.5)
guiGridListAddColumn(Gridilist, "PlayTime", 0.5)
GUIEditor.label[1] = guiCreateLabel(-7, -45, 453, 40, "", false, GUIEditor.gridlist[1])
end
)
function on(state)
if state and not tonumber ( state ) and type (state) == 'boolean' then
if state == true then
triggerServerEvent("onTopPlayerListRequest",localPlayer,"Play Time")
else
return
end
end
end
addEventHandler( 'onClientResourceStart', resourceRoot,function() on(true) end)
function UpdateTopList(t)
guiGridListClear(Gridilist)
for k,v in ipairs(t) do
local row = guiGridListAddRow(Gridilist)
guiGridListSetItemText(Gridilist,row,1,v["playerName"],false,false)
guiGridListSetItemText(Gridilist,row,2,v["PlayTime"],false,false)
end
end
addEvent("onClientReceiveTopListTable",true)
addEventHandler("onClientReceiveTopListTable",root,
function(t)
UpdateTopList(t)
end)
function TopGui()
local guiS = guiGetVisible(GUIEditor.window[1])
guiSetVisible(GUIEditor.window[1],not guiS)
showCursor(not guiS)
guiSetInputEnabled(not guiS)
on (guiS)
end
bindKey("F12","down",TopGui)
-- Server side #
local playTime = {}
function onLogin(old,current)
if(current and not isGuestAccount(current))then
local timeHour = tonumber(getAccountData(current,"hour"))or 0
local timeMinute = tonumber(getAccountData(current,"minute"))or 0
local timeSecond = tonumber(getAccountData(current,"second"))or 0
if(not playTime[source])then
playTime[source] = {
["hour"] = 0,
["min"] = 0,
["sec"] = 0
}
end
playTime[source]["hour"] = timeHour
playTime[source]["min"] = timeMinute
playTime[source]["sec"] = timeSecond
end
end
addEventHandler("onPlayerLogin",root,onLogin)
addEventHandler ( 'onResourceStop', resourceRoot, function()
for k,v in ipairs ( getElementsByType ('player') ) do
local acc = getPlayerAccount(v)
if(acc and not isGuestAccount(acc))then
local timeHour = playTime[v]["hour"] or 0
local timeMin = playTime[v]["min"] or 0
local timeSec = playTime[v]["sec"] or 0
local name = getPlayerName(v)
local nickAcc = string.gsub(name,"#%x%x%x%x%x%x","")
setAccountData(acc,"hour",timeHour)
setAccountData(acc,"minute",timeMin)
setAccountData(acc,"second",timeSec)
setAccountData(acc,"PlayerName",nickAcc)
playTime[v] = nil
end
end
end)
addEventHandler ( 'onResourceStart', resourceRoot, function()
for k,v in ipairs ( getElementsByType ('player') ) do
local acc = getPlayerAccount ( v )
if( acc and not isGuestAccount(acc))then
local timeHour = tonumber(getAccountData(acc,"hour"))or 0
local timeMinute = tonumber(getAccountData(acc,"minute"))or 0
local timeSecond = tonumber(getAccountData(acc,"second"))or 0
if(not playTime[v])then
playTime[v] = {
["hour"] = 0,
["min"] = 0,
["sec"] = 0
}
end
playTime[v]["hour"] = timeHour
playTime[v]["min"] = timeMinute
playTime[v]["sec"] = timeSecond
end
end
end)
function onQuit()
local acc = getPlayerAccount(source)
if(acc and not isGuestAccount(acc))then
local timeHour = playTime[source]["hour"] or 0
local timeMin = playTime[source]["min"] or 0
local timeSec = playTime[source]["sec"] or 0
local name = getPlayerName(source)
local nickAcc = string.gsub(name,"#%x%x%x%x%x%x","")
setAccountData(acc,"hour",timeHour)
setAccountData(acc,"minute",timeMin)
setAccountData(acc,"second",timeSec)
setAccountData(acc,"PlayerName",nickAcc)
playTime[source] = nil
end
end
addEventHandler("onPlayerQuit",root,onQuit)
addEvent("onTopPlayerListRequest",true)
addEventHandler("onTopPlayerListRequest",root,
function(text)
local allAccounts = getAccounts()
local sendTable = {}
local data = 0
for k,v in ipairs(allAccounts) do
local name = getAccountName(v)
local dataHour = tonumber(getAccountData(v,"hour")) or 0
local dataMin = tonumber(getAccountData(v,"minute")) or 0
local dataSec = tonumber(getAccountData(v,"second")) or 0
if(text == "Play Time")then
data = dataHour+DividiveIfMoreZero(dataMin,60)+DividiveIfMoreZero(dataSec,3600)
else
data = tonumber(getAccountData(v,text) or 0)or 0
end
if(data>0)then
table.insert(sendTable,{["playerName"] = name,["PlayTime"] = data})
end
end
table.sort(sendTable,function(a,b) return tonumber(a["PlayTime"] or 0)>tonumber(b["PlayTime"] or 0) end)
table.setMaxIndex(sendTable,10)
if(text == "Play Time")then
for i=1,#sendTable do
local timeString = ""
local nAcc = getAccount(sendTable[i]["playerName"])
local hourS = getAccountData(nAcc,"hour") or 0
local minS = getAccountData(nAcc,"minute") or 0
local secS = getAccountData(nAcc,"second") or 0
hourS = tostring(hourS)
minS = tostring(minS)
secS = tostring(secS)
timeString = hourS..":"..minS..":"..secS
sendTable[i]["PlayTime"] = timeString
end
end
for i=1,#sendTable do
local acc = getAccount(sendTable[i]["playerName"])
local accRealName = getAccountData(acc,"PlayerName")
if(accRealName and tostring(accRealName)~="false")then
sendTable[i]["playerName"] = accRealName
end
end
triggerClientEvent(client,"onClientReceiveTopListTable",client,sendTable)
end)
function table.setMaxIndex(t,n)
if(#t>n)then
while(#t>n)do
table.remove(t)
end
end
end
function DividiveIfMoreZero(v,d)
if(v>0)then return (v/d) end
return 0
end
function SavePlayTime()
local players = getElementsByType("player")
for k,v in ipairs(players) do
if(not playTime[v]) then
playTime[v] = {
["hour"] = 0,
["min"] = 0,
["sec"] = 0
}
end
playTime[v]["sec"] = tonumber(playTime[v]["sec"]+1)
convertTime(v,playTime[v]["min"],playTime[v]["sec"])
local hour = playTime[v]["hour"]
local min = playTime[v]["min"]
local sec = playTime[v]["sec"]
local acc = getPlayerAccount(v)
if(acc and isGuestAccount(acc)==false)then
setAccountData(acc,"hour",hour)
setAccountData(acc,"minute",min)
setAccountData(acc,"second",sec)
end
end
setTimer(SavePlayTime,1000,1)
end
setTimer(SavePlayTime,1000,1)
function ResetTopPlayers()
local allAccounts = getAccounts()
for k,v in ipairs(allAccounts) do
setAccountData(v,"hour",0)
setAccountData(v,"minute",0)
setAccountData(v,"second",0)
end
outputChatBox("تم تحديث اعلى تواجد")
end
function resetConsoleTop(p)
local accName = getAccountName(getPlayerAccount(p))
if(isObjectInACLGroup("user." .. accName, aclGetGroup("Console")))then
ResetTopPlayers()
else
outputChatBox("هذا الخاصيه فقط لـ الكونسل",p)
end
end
addCommandHandler("CL1",resetConsoleTop)
function convertTime(source,m,s)
if(s>=60)then
playTime[source]["min"] = tonumber(playTime[source]["min"]+1)
playTime[source]["sec"] = 0
end
if(m>=60)then
playTime[source]["hour"] = tonumber(playTime[source]["hour"]+1)
playTime[source]["min"] = 0
end
end
وللمعلوميه ما بيتحدث الوقت الا كل ما تفتح اللوحه اف12, تقدر تسوي تايمر او اي شي اذا تبيه يحدث على طول ..