Jump to content

Sistema staffs on


Recommended Posts

Alguém sabe como faço para mostrar o numero de staffs online por Acl. não o nome e sim quantos 

function MRX(localPlayer)
    if (not isPlayerMapVisible()) then
        local money = convertNumber(getPlayerMoney(getLocalPlayer()))
        local Emprego = getElementData(getLocalPlayer(), "Emprego") or "Desempregado"
        local fome = getElementData(getLocalPlayer(), "hunger")
        local sede = getElementData(getLocalPlayer(), "sede")
        local vida = math.floor(getElementHealth(getLocalPlayer()))
        local colete = math.floor(getPedArmor(getLocalPlayer()))
        local players = getElementsByType( "player" )
  
		dxDrawImage(x*700, y*300, x*555, y*460, "img/0.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
		dxDrawImage(x*720, y*362, x*30, y*30, "img/user.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
        

end
end

 

Link to comment
On 03/08/2021 at 10:36, MRXBBC said:

Alguém sabe como faço para mostrar o numero de staffs online por Acl. não o nome e sim quantos 

function MRX(localPlayer)
    if (not isPlayerMapVisible()) then
        local money = convertNumber(getPlayerMoney(getLocalPlayer()))
        local Emprego = getElementData(getLocalPlayer(), "Emprego") or "Desempregado"
        local fome = getElementData(getLocalPlayer(), "hunger")
        local sede = getElementData(getLocalPlayer(), "sede")
        local vida = math.floor(getElementHealth(getLocalPlayer()))
        local colete = math.floor(getPedArmor(getLocalPlayer()))
        local players = getElementsByType( "player" )
  
		dxDrawImage(x*700, y*300, x*555, y*460, "img/0.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
		dxDrawImage(x*720, y*362, x*30, y*30, "img/user.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
        

end
end

 

Rapaz, boa tarde. A função de verificar acl, só funciona em resource server-side... então não há como fazer essa verificação diretamente no client, a não ser que um staff seu esteja setado em algum tipo de data (elementData), ou que você envia a quantia via trigger quando for abrir o painel.

Edited by Lord Henry
server-side*
Link to comment
3 minutes ago, Blaack said:

Rapaz, boa tarde. A função de verificar acl, só funciona em resource script-side... então não há como fazer essa verificação diretamente no client, a não ser que um staff seu esteja setado em algum tipo de data (elementData), ou que você envia a quantia via trigger quando for abrir o painel.

estava vendo isso, já tive uma ideia aqui, se eu conseguir eu posto aqui de novo

 

Link to comment
9 minutes ago, Blaack said:

Caso não consiga, me chame por aqui ou por pm que te ajudo :)

eu tava pensando em fazer um if se o player for pertencente a acl ele adiciona mais um a uma variavel

function checkAccess(thePlayer)
   if isPlayerInACL(thePlayer, "Console") then
  
    p = p+1   

   end
end

 

Link to comment
8 minutes ago, MRXBBC said:

eu tava pensando em fazer um if se o player for pertencente a acl ele adiciona mais um a uma variavel

function checkAccess(thePlayer)
   if isPlayerInACL(thePlayer, "Console") then
  
    p = p+1   

   end
end

 

Me mande a funcao que aciona o painel (para abrir o dx)

Link to comment
1 minute ago, Blaack said:

Me mande a funcao que aciona o painel (para abrir o dx)

local screenW,screenH = guiGetScreenSize()
local resW, resH = 1920,1080
local x, y = (screenW/resW), (screenH/resH)
local font = dxCreateFont("font/font.ttf", 10)
local ping = getPlayerPing(getLocalPlayer())
local bind = "F2"

function MRX(localPlayer)
    if (not isPlayerMapVisible()) then
  		local PlayerLoc = (localPlayer)
        local money = convertNumber(getPlayerMoney(getLocalPlayer()))
        local Emprego = getElementData(getLocalPlayer(), "Emprego") or "Desempregado"
        local fome = getElementData(getLocalPlayer(), "hunger") or 100
        local ID = getElementData(getLocalPlayer(), "ID") or "N/A"
        local sede = getElementData(getLocalPlayer(), "sede") or 100
        local vida = math.floor(getElementHealth(getLocalPlayer()))
        local colete = math.floor(getPedArmor(getLocalPlayer()))
        local Nome = getPlayerName(getLocalPlayer())
		local players = getElementsByType( "player" )
		dxDrawImage(x*700, y*300, x*555, y*460, "img/0.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
		dxDrawImage(x*720, y*361, x*30, y*30, "img/user.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
		dxDrawImage(x*720, y*402, x*30, y*30, "img/emp.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
		dxDrawImage(x*865, y*402, x*30, y*30, "img/level.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
		dxDrawImage(x*720, y*443, x*30, y*30, "img/mala.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
        dxDrawText(Nome, x*755, y*408, x*578, y*344, tocolor(255, 255, 255, 255), 1.00, font, "left", "center", false, false, false, false, false)
        dxDrawText(ID, x*755, y*495, x*578, y*344, tocolor(255, 255, 255, 255), 1.00, font, "left", "center", false, false, false, false, false)
        dxDrawText(ping, x*900, y*495, x*578, y*344, tocolor(255, 255, 255, 255), 1.00, font, "left", "center", false, false, false, false, false)
        dxDrawText(Emprego, x*780, y*576, x*578, y*344, tocolor(255, 255, 255, 255), 1.00, font, "left", "center", false, false, false, false, false)
        dxDrawImage(x*730, y*520, x*50, y*200, "img/rec.png", 0, 0, 0, tocolor(105, 105, 105, 255), false)
        dxDrawImage(x*790, y*520, x*50, y*200, "img/rec.png", 0, 0, 0, tocolor(105, 105, 105, 255), false)
        dxDrawImage(x*850, y*520, x*50, y*200, "img/rec.png", 0, 0, 0, tocolor(105, 105, 105, 255), false)
        dxDrawImage(x*910, y*520, x*50, y*200, "img/rec.png", 0, 0, 0, tocolor(105, 105, 105, 255), false)
        dxDrawImage(x*730, y*720, x*50, y*200/-100*vida, "img/rec.png", 0, 0, 0, tocolor(168, 54, 54, 255), false)
        dxDrawImage(x*790, y*720, x*50, y*200/-100*colete, "img/rec.png", 0, 0, 0, tocolor(199,21,133, 255), false)
        dxDrawImage(x*850, y*720, x*50, y*200/-100*fome, "img/rec.png", 0, 0, 0, tocolor(187, 93, 65, 255), false)
        dxDrawImage(x*910, y*720, x*50, y*200/-100*sede, "img/rec.png", 0, 0, 0, tocolor(65, 141, 158, 255), false)
        dxDrawImage(x*740, y*690, x*25, y*25, "img/hp.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
        dxDrawImage(x*802, y*690, x*25, y*25, "img/shield.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
        dxDrawImage(x*862, y*690, x*25, y*25, "img/fome.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
        dxDrawImage(x*922, y*690, x*25, y*25, "img/gota.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)

end
end



bindKey (bind, "both", function()
    if isDXVisible then
        removeEventHandler( "onClientRender", root, MRX )
    else
        addEventHandler( "onClientRender", root, MRX )
    end
    isDXVisible = not isDXVisible
end)
function convertNumber ( number )
    local formatted = number
    while true do
        formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1.%2')
        if ( k==0 ) then
            break
        end
    end
    return formatted
end

 

Link to comment
1 hour ago, Blaack said:

Me mande a funcao que aciona o painel (para abrir o dx)


addEventHandler ( 'onPlayerLogin', getRootElement ( ),
function(source)
local conta = getAccountName(getPlayerAccount(source))
if isObjectInACLGroup ("user."..conta, aclGetGroup ( "Admin") ) then  
local Nome = getPlayerName(source) 
local Pontstaff = getElementData(root, "Expediente_Staff1") or 0
setElementData(source, "Expediente_Staff1", "Sim")
setElementData(root, "Qtd_Admin", Pontstaff + 1)
elseif isObjectInACLGroup ("user."..conta, aclGetGroup ( "Policia") ) then 
local PontPM = getElementData(root, "Expediente_Policia1") or 0
setElementData(source, "Expediente_Policia1", "Sim")
setElementData(root, "Qtd_Policia", PontPM + 1)
elseif isObjectInACLGroup ("user."..conta, aclGetGroup ( "Samu") ) then 
local PontSoco = getElementData(root, "Expediente_Socorrista1") or 0
setElementData(source, "Expediente_Socorrista", "Sim")
setElementData(root, "Qtd_Socorrista", PontSoco + 1)
elseif isObjectInACLGroup ("user."..conta, aclGetGroup ( "Gang") ) then 
local PontGang = getElementData(root, "Expediente_Gang1") or 0
setElementData(source, "Expediente_Gang1", "Sim")
setElementData(root, "Qtd_Gang", PontGang + 1)
elseif isObjectInACLGroup ("user."..conta, aclGetGroup ( "Mecanico") ) then 
local PontMecanico = getElementData(root, "Expediente_Mecanico") or 0
setElementData(source, "Expediente_Mecanico1", "Sim")
setElementData(root, "Qtd_Mecanico", PontMecanico + 1)
end
end
)

function loggedOut(source)
local conta = getAccountName(getPlayerAccount(source))
if isObjectInACLGroup ("user."..conta, aclGetGroup ( "Admin") ) then  
local Nome = getPlayerName(source) 
local Pontstaff = getElementData(root, "Expediente_Staff1") or 0
setElementData(source, "Expediente_Staff1", "Não")
setElementData(root, "Qtd_Admin", Pontstaff - 1)
elseif isObjectInACLGroup ("user."..conta, aclGetGroup ( "Policia") ) then 
local PontPM = getElementData(root, "Expediente_Policia1") or 0
setElementData(source, "Expediente_Policia1", "Não")
setElementData(root, "Qtd_Policia", PontPM - 1)
elseif isObjectInACLGroup ("user."..conta, aclGetGroup ( "Samu") ) then 
local PontSoco = getElementData(root, "Expediente_Socorrista1") or 0
setElementData(source, "Expediente_Socorrista", "Não")
setElementData(root, "Qtd_Socorrista", PontSoco - 1)
elseif isObjectInACLGroup ("user."..conta, aclGetGroup ( "Gang") ) then 
local PontGang = getElementData(root, "Expediente_Gang1") or 0
setElementData(source, "Expediente_Gang1", "Não")
setElementData(root, "Qtd_Gang", PontGang - 1)
elseif isObjectInACLGroup ("user."..conta, aclGetGroup ( "Mecanico") ) then 
local PontMecanico = getElementData(root, "Expediente_Mecanico") or 0
setElementData(source, "Expediente_Mecanico1", "Não")
setElementData(root, "Qtd_Mecanico", PontMecanico - 1)
end
end
addEventHandler("onPlayerLogout",getRootElement(),loggedOut)

fiz desse jeito so que ta dando uns erros 

 

Link to comment

poderia criar uma Tabela para armazenar os valores, Exemplo:

 

-- Lado servidor

staffOnline = {} -- Uma tabela vazia, poderia ser qualquer nome 

--[[ QUANDO O JOGADOR ENTRAR ]]
addEventHandler("onPlayerLogin", root,
  function()
    local conta = getAccountName ( getPlayerAccount ( source ) )  -- Pega
    if isObjectInACLGroup ("user."..tostring(conta), aclGetGroup ( "Staff" ) ) then -- Se o jogador estiver no Grupo staff
    table.insert(staffOnline, 1) -- Aqui adiciona um item na tabela, aumentando o tamanho dela toda vez que alguem do Grupo Staff entre
  end
)
  
--[[ QUANDO O JOGADOR DESCONECTAR ]]
function JogadorQuit ( quitType )
    local conta = getAccountName ( getPlayerAccount ( source ) )  -- Pega
    if isObjectInACLGroup ("user."..tostring(conta), aclGetGroup ( "Staff" ) ) then -- Se o jogador estiver no Grupo staff 
        table.remove(staffOnline) -- Remove o "usuario" da tabela
    end
end
addEventHandler ( "onPlayerQuit", getRootElement ( ), JogadorQuit )

 

Se usado "#staffOnline" Você consegue obter o tamanho desta tabela. realmente não sei se funcionaria, mais talvez seja algo que vale apena pensar 

Não testei o codigo acima 

Link to comment
2 hours ago, Keven Campos said:

poderia criar uma Tabela para armazenar os valores, Exemplo:

 

-- Lado servidor

staffOnline = {} -- Uma tabela vazia, poderia ser qualquer nome 

--[[ QUANDO O JOGADOR ENTRAR ]]
addEventHandler("onPlayerLogin", root,
  function()
    local conta = getAccountName ( getPlayerAccount ( source ) )  -- Pega
    if isObjectInACLGroup ("user."..tostring(conta), aclGetGroup ( "Staff" ) ) then -- Se o jogador estiver no Grupo staff
    table.insert(staffOnline, 1) -- Aqui adiciona um item na tabela, aumentando o tamanho dela toda vez que alguem do Grupo Staff entre
  end
)
  
--[[ QUANDO O JOGADOR DESCONECTAR ]]
function JogadorQuit ( quitType )
    local conta = getAccountName ( getPlayerAccount ( source ) )  -- Pega
    if isObjectInACLGroup ("user."..tostring(conta), aclGetGroup ( "Staff" ) ) then -- Se o jogador estiver no Grupo staff 
        table.remove(staffOnline) -- Remove o "usuario" da tabela
    end
end
addEventHandler ( "onPlayerQuit", getRootElement ( ), JogadorQuit )

 

Se usado "#staffOnline" Você consegue obter o tamanho desta tabela. realmente não sei se funcionaria, mais talvez seja algo que vale apena pensar 

Não testei o codigo acima 

Pensando desta maneira, e se o staff fosse removido do grupo? 

ele tem que transferir o bindKey pro lado server e quando acionado la. Mandar por trigger a quantia

Link to comment
19 hours ago, Blaack said:

Pensando desta maneira, e se o staff fosse removido do grupo? 

ele tem que transferir o bindKey pro lado server e quando acionado la. Mandar por trigger a quantia

Realmente, nesta situação acho que não seria possível um sistema eficiente com os métodos que eu coloquei como exemplo ?

 

Link to comment
  • Other Languages Moderators

Um jeito mais fácil e otimizado é você apenas contar quantos jogadores tem permissão de mutar players. Você usa a função hasObjectPermissionTo.

Edited by Lord Henry
Enviado via mobile.
Link to comment

Talvez seja melhor fazer desta forma:

addCommandHandler ("staffs", function (player, cmd)
	local admins = getOnlinePlayersFromGroup ("Admin")
	local superMods = getOnlinePlayersFromGroup ("SuperModerator")
	if admins == "" then
		outputChatBox ("Nenhum administrador online no momento!", player, 255, 0, 0)
	else
		outputChatBox ("Admins: #FFFFFF"..tostring(admins), player, 255, 0, 0, true)
	end
	if superMods == "" then
		outputChatBox ("Nenhum SuperModerador online no momento!", player, 255, 0, 0)
	else
		outputChatBox ("SuperModeradores: #FFFFFF"..tostring(superMods), player, 51, 170, 255, true)
	end
end)

function getOnlinePlayersFromGroup (group)
	local t = {}
	local players = ""
	for k, v in ipairs (getElementsByType("player")) do
		local acc = getPlayerAccount(v)
		if acc and not isGuestAccount(acc) then
			local accName = getAccountName(acc)
			if group and aclGetGroup(tostring(group)) then
				local g = aclGetGroup(tostring(group))
				local isAdmin = isObjectInACLGroup ("user."..accName, g)
				if isAdmin then
					if players ~= "" then 
						players = players..", " 
					end;
					players = players..getPlayerName(v):gsub("#%x%x%x%x%x%x", "")
				end
			end
		end
	end
	return players
end

 

  • Confused 1
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...