Jump to content

Analise de script


Recommended Posts

Eu estou começando na programação e fiz um script que me parece um pouco "sujo", me da a impressão que ele pode acabar dando lag, vou deixar uma parte dele abaixo

-- Lado Server:
-----------------------------------------------   DAR PERMISSÕES --------------------------------
function SkinAdmin (thePlayer) -- Nome da função aleatoria, quando começei pensava em outro sistema
    local nomeConta = getPlayerName (thePlayer)
    local ID = getElementData ( thePlayer, "ID" ) or "N/C"
    local time = getRealTime()
    local hours = time.hour
    local minutes = time.minute
    local acc = getAccountName (getPlayerAccount (thePlayer))
	if isObjectInACLGroup ("user."..acc, aclGetGroup("Fundador")) then -- O Grupo "Fundador" permanece no player, é o que faz com que ele possa usar o comando /atender
		aclGroupAddObject (aclGetGroup("FundadorP"), "user."..acc) -- Este grupo tem as permissões do painel P e comandos externos
        setElementData(thePlayer,"onProt",true) -- "onProt" é o sistema de ivulnerabilidade (/pro)
        setElementModel(thePlayer, 140) -- skin de staff
        exports.webhook:sendDiscordMessage("O Fundador: "..nomeConta.."["..ID.."] entrou em modo atendimento. Horario: "..hours..":"..minutes.."") -- Aqui está mandando um log pro discord
        outputChatBox("#1e90ff[Servidor] #ffffffVocê entrou em modo atendimento.", thePlayer, 255, 255, 255,true ) -- Para mostrar que o comando funcionou
        triggerClientEvent(thePlayer, "FM_SkinAdmin", thePlayer) -- Aparece um painel pequeno em DX pra lembrar que ele está em "Modo Atendimento", se causar um lag significativo pelo triggerClientEvent eu posso tirar.

            -----------------------------------------------
	elseif isObjectInACLGroup ("user."..acc, aclGetGroup("Organizador")) then
		aclGroupAddObject (aclGetGroup("OrganizadorP"), "user."..acc)
        setElementData(thePlayer,"onProt",true)
        setElementModel(thePlayer, 140)
        exports.webhook:sendDiscordMessage("O Organizador: "..nomeConta.."["..ID.."] entrou em modo atendimento. Horario: "..hours..":"..minutes.."")
        outputChatBox("#1e90ff[Servidor] #ffffffVocê entrou em modo atendimento.", thePlayer, 255, 255, 255,true )
        triggerClientEvent(thePlayer, "FM_SkinAdmin", thePlayer)
    end
  end
addCommandHandler ("atender", SkinAdmin)

-- Tirar permissoões --
function TirarP (thePlayer)
    --
    local nomeConta = getPlayerName (thePlayer)
    local ID = getElementData ( thePlayer, "ID" ) or "N/C"
    local time = getRealTime()
    local hours = time.hour
    local minutes = time.minute
    local acc = getAccountName (getPlayerAccount (thePlayer))
	if isObjectInACLGroup ("user."..acc, aclGetGroup("FundadorP")) then 
		aclGroupRemoveObject (aclGetGroup("FundadorP"), "user."..acc)
        setElementModel (thePlayer, 230)
        exports.webhook:sendDiscordMessage("O Fundador: "..nomeConta.."["..ID.."] Saiu do modo atendimento. Horario: "..hours..":"..minutes.."")
        triggerClientEvent(thePlayer, "TirarAdmin", thePlayer)
       -- if hasObjectPermissionTo(thePlayer,"general.adminpanel",false) then
           -- if getElementData(thePlayer,"onProt") then
                setElementData(thePlayer,"onProt",false)
                outputChatBox("#1e90ff[Servidor] #ffffffVocê saiu do modo atendimento.", thePlayer, 255, 255, 255,true )
             --   end
           -- end
     -------------------------------------------------       
	elseif isObjectInACLGroup ("user."..acc, aclGetGroup("OrganizadorP")) then
		aclGroupRemoveObject (aclGetGroup("OrganizadorP"), "user."..acc)
        setElementModel (thePlayer, 230)
        exports.webhook:sendDiscordMessage("O Organizador: "..nomeConta.."["..ID.."] Saiu do modo atendimento. Horario: "..hours..":"..minutes.."")
        triggerClientEvent(thePlayer, "TirarAdmin", thePlayer)
     --   if hasObjectPermissionTo(thePlayer,"general.adminpanel",false) then
         --   if getElementData(thePlayer,"onProt") then
                setElementData(thePlayer,"onProt",false)
                outputChatBox("#1e90ff[Servidor] #ffffffVocê saiu do modo atendimento.", thePlayer, 255, 255, 255,true )
            end
end
addCommandHandler ("sair", TirarP)

---- Quando sair do servidor 
function JogadorQuit (quitType)
    local time = getRealTime()
    local hours = time.hour
    local minutes = time.minute
    ----------
    local acc = getPlayerAccount ( thePlayer )
    local conta = getAccountName ( getPlayerAccount ( source ) )
    --------------------------------------------------------------------------------------------
	if isObjectInACLGroup ("user."..tostring(conta), aclGetGroup("FundadorP")) then 
		aclGroupRemoveObject (aclGetGroup("FundadorP"), "user."..tostring(conta))
        exports.webhook:sendDiscordMessage("O Fundador portador o Login '"..tostring(conta).."' desconectou-se as "..hours..":"..minutes.."")
                setElementData(thePlayer,"onProt",false)
 --       
	elseif isObjectInACLGroup ("user."..tostring(conta), aclGetGroup("OrganizadorP")) then
		aclGroupRemoveObject (aclGetGroup("OrganizadorP"), "user."..tostring(conta))
        exports.webhook:sendDiscordMessage("O Organizador portador o Login '"..tostring(conta).."' desconectou-se as "..hours..":"..minutes.."")
                setElementData(thePlayer,"onProt",false)
        end
end
addEventHandler ( "onPlayerQuit", getRootElement ( ), JogadorQuit )

 

O Código está funcionando como esperado pela logica, mais talvez um setElementData seria mais leve para dar as permissoes ? 

Eu tentei usar o setElementModel pra retirar a skin no onPlayerQuit mas não funcionou, talvez porque seja porque o Player desconecta primeiro do que o evento é acionado, isso não é importante, se eu estiver errado me corrige por favor.

São 8 cargos na staff, deixei apenas dois pra não ficar muito longo, tem 16 Grupos reservados para Staff, sendo que 8 deles vai ficar entrando e saindo player toda hora, isso que me preocupa.

Edited by Keven Campos
Link to comment
  • 4 weeks later...
  • Administrators

@#RooTs - It's true that it's unfortunate not to get replies for a few weeks, however please keep in mind that these forums are entirely voluntarily run by MTA staff and used in our free time. I've left your reply below with your uncalled for statement removed. Please stay on topic and thank you for helping :)

4 hours ago, #RooTs said:

voltando ao assunto.
bom, eu não vi nenhum "setElementModel" no seu codigo. e, não notei nada de errado no tal evento citado!

 

Link to comment
On 21/07/2021 at 21:41, Keven Campos said:

Eu estou começando na programação e fiz um script que me parece um pouco "sujo", me da a impressão que ele pode acabar dando lag, vou deixar uma parte dele abaixo

-- Lado Server:
-----------------------------------------------   DAR PERMISSÕES --------------------------------
function SkinAdmin (thePlayer) -- Nome da função aleatoria, quando começei pensava em outro sistema
    local nomeConta = getPlayerName (thePlayer)
    local ID = getElementData ( thePlayer, "ID" ) or "N/C"
    local time = getRealTime()
    local hours = time.hour
    local minutes = time.minute
    local acc = getAccountName (getPlayerAccount (thePlayer))
	if isObjectInACLGroup ("user."..acc, aclGetGroup("Fundador")) then -- O Grupo "Fundador" permanece no player, é o que faz com que ele possa usar o comando /atender
		aclGroupAddObject (aclGetGroup("FundadorP"), "user."..acc) -- Este grupo tem as permissões do painel P e comandos externos
        setElementData(thePlayer,"onProt",true) -- "onProt" é o sistema de ivulnerabilidade (/pro)
        setElementModel(thePlayer, 140) -- skin de staff
        exports.webhook:sendDiscordMessage("O Fundador: "..nomeConta.."["..ID.."] entrou em modo atendimento. Horario: "..hours..":"..minutes.."") -- Aqui está mandando um log pro discord
        outputChatBox("#1e90ff[Servidor] #ffffffVocê entrou em modo atendimento.", thePlayer, 255, 255, 255,true ) -- Para mostrar que o comando funcionou
        triggerClientEvent(thePlayer, "FM_SkinAdmin", thePlayer) -- Aparece um painel pequeno em DX pra lembrar que ele está em "Modo Atendimento", se causar um lag significativo pelo triggerClientEvent eu posso tirar.

            -----------------------------------------------
	elseif isObjectInACLGroup ("user."..acc, aclGetGroup("Organizador")) then
		aclGroupAddObject (aclGetGroup("OrganizadorP"), "user."..acc)
        setElementData(thePlayer,"onProt",true)
        setElementModel(thePlayer, 140)
        exports.webhook:sendDiscordMessage("O Organizador: "..nomeConta.."["..ID.."] entrou em modo atendimento. Horario: "..hours..":"..minutes.."")
        outputChatBox("#1e90ff[Servidor] #ffffffVocê entrou em modo atendimento.", thePlayer, 255, 255, 255,true )
        triggerClientEvent(thePlayer, "FM_SkinAdmin", thePlayer)
    end
  end
addCommandHandler ("atender", SkinAdmin)

-- Tirar permissoões --
function TirarP (thePlayer)
    --
    local nomeConta = getPlayerName (thePlayer)
    local ID = getElementData ( thePlayer, "ID" ) or "N/C"
    local time = getRealTime()
    local hours = time.hour
    local minutes = time.minute
    local acc = getAccountName (getPlayerAccount (thePlayer))
	if isObjectInACLGroup ("user."..acc, aclGetGroup("FundadorP")) then 
		aclGroupRemoveObject (aclGetGroup("FundadorP"), "user."..acc)
        setElementModel (thePlayer, 230)
        exports.webhook:sendDiscordMessage("O Fundador: "..nomeConta.."["..ID.."] Saiu do modo atendimento. Horario: "..hours..":"..minutes.."")
        triggerClientEvent(thePlayer, "TirarAdmin", thePlayer)
       -- if hasObjectPermissionTo(thePlayer,"general.adminpanel",false) then
           -- if getElementData(thePlayer,"onProt") then
                setElementData(thePlayer,"onProt",false)
                outputChatBox("#1e90ff[Servidor] #ffffffVocê saiu do modo atendimento.", thePlayer, 255, 255, 255,true )
             --   end
           -- end
     -------------------------------------------------       
	elseif isObjectInACLGroup ("user."..acc, aclGetGroup("OrganizadorP")) then
		aclGroupRemoveObject (aclGetGroup("OrganizadorP"), "user."..acc)
        setElementModel (thePlayer, 230)
        exports.webhook:sendDiscordMessage("O Organizador: "..nomeConta.."["..ID.."] Saiu do modo atendimento. Horario: "..hours..":"..minutes.."")
        triggerClientEvent(thePlayer, "TirarAdmin", thePlayer)
     --   if hasObjectPermissionTo(thePlayer,"general.adminpanel",false) then
         --   if getElementData(thePlayer,"onProt") then
                setElementData(thePlayer,"onProt",false)
                outputChatBox("#1e90ff[Servidor] #ffffffVocê saiu do modo atendimento.", thePlayer, 255, 255, 255,true )
            end
end
addCommandHandler ("sair", TirarP)

---- Quando sair do servidor 
function JogadorQuit (quitType)
    local time = getRealTime()
    local hours = time.hour
    local minutes = time.minute
    ----------
    local acc = getPlayerAccount ( thePlayer )
    local conta = getAccountName ( getPlayerAccount ( source ) )
    --------------------------------------------------------------------------------------------
	if isObjectInACLGroup ("user."..tostring(conta), aclGetGroup("FundadorP")) then 
		aclGroupRemoveObject (aclGetGroup("FundadorP"), "user."..tostring(conta))
        exports.webhook:sendDiscordMessage("O Fundador portador o Login '"..tostring(conta).."' desconectou-se as "..hours..":"..minutes.."")
                setElementData(thePlayer,"onProt",false)
 --       
	elseif isObjectInACLGroup ("user."..tostring(conta), aclGetGroup("OrganizadorP")) then
		aclGroupRemoveObject (aclGetGroup("OrganizadorP"), "user."..tostring(conta))
        exports.webhook:sendDiscordMessage("O Organizador portador o Login '"..tostring(conta).."' desconectou-se as "..hours..":"..minutes.."")
                setElementData(thePlayer,"onProt",false)
        end
end
addEventHandler ( "onPlayerQuit", getRootElement ( ), JogadorQuit )

 

O Código está funcionando como esperado pela logica, mais talvez um setElementData seria mais leve para dar as permissoes ? 

Eu tentei usar o setElementModel pra retirar a skin no onPlayerQuit mas não funcionou, talvez porque seja porque o Player desconecta primeiro do que o evento é acionado, isso não é importante, se eu estiver errado me corrige por favor.

São 8 cargos na staff, deixei apenas dois pra não ficar muito longo, tem 16 Grupos reservados para Staff, sendo que 8 deles vai ficar entrando e saindo player toda hora, isso que me preocupa.

Olha, alguns pontos que eu pude observar são:

1 - A função JogadorQuit nessa linha provavelmente está dando erro no console pois não existe o the player na função >> local acc = getAccountName (getPlayerAccount (thePlayer))

 

2 - Uso de setElementData >> prefira usar tabelas que são mais leves.

 

3 - Uso de ACL >> ACL pesa um pouco o servidor, eu prefiro optar por outros meios de verificação como setAccountData ou banco de dados SQLite + tabelas.

 

4 - Nomes de variáveis >> Isso não diminui o desempenho mas é uma boa prática de programação criar variáveis com nomes que definam o que elas representam. Por exemplo, você criou uma variável com o nome de nomeConta que tem o valor do nome do player, não da conta. Melhor seria se o nome dessa variável fosse algo como "nomePlayer", "playerName" etc...

  • Thanks 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...