Keven Campos Posted July 22, 2021 Share Posted July 22, 2021 (edited) 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 July 22, 2021 by Keven Campos Link to comment
Administrators Tut Posted August 14, 2021 Administrators Share Posted August 14, 2021 @#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
Boechat Posted August 16, 2021 Share Posted August 16, 2021 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... 1 Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now