MaligNos

Members
  • Content Count

    362
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by MaligNos

  1. MaligNos

    LUSORP (BETA)

    Sim, eu também não sabia o real significado, só consegui pegar a referência com base no time de futebol Portuguesa que também é conhecida como Lusa, e nas minha aulas de Língua Portuguesa, sobre países lusófonos.
  2. MaligNos

    LUSORP (BETA)

    Luso é uma referência à Portugal, só que no caso para relacionar PT/BR deveria ter colocado Luso-brasileiro. Mas como no nome consta "LusoRP PT/BR" acho que é ok a identificação. https://www.dicio.com.br/luso/ https://dicionario.priberam.org/luso-brasileiro
  3. MaligNos

    Script de arrastar

    Coloque um output teste antes de verificar se esta na ACL (linha 2). Notei também uma divergência do comando, antes era /arrastar agora está /puxar, está usando o /puxar né ?
  4. MaligNos

    Script de arrastar

    Na realidade seria: if not (alvo) then return outputChatBox("[Aviso] Jogador ' "..playerid.." ' não encontrado!", player,255,255,255) end Mas se o seu "alvo" existe, nem entraria nessa verificação. Então não é a causa de não funcionar.
  5. MaligNos

    Script de arrastar

    Certo, não apresenta mais erros, mas você está agindo de acordo com as verificações do script ? Está no grupo da ACL ComandosCorporacoes ? Essa função exportada de ID realmente funciona e retorna um player ? Está digitando um ID existente ? Ex: /arrastar 1 O player alvo possui o elementdata “Algemado” ? Você estava a uma distância menor ou igual a 6 unidades do player alvo ? Você estava em um veículo quando usou o comando ?
  6. MaligNos

    Script de arrastar

    Como chegou a tal conclusão ? certamente se tivesse usado o /debugscript 3 diversos erros apareceriam, você precisa executar o trecho para que os erros aparecessem: /arrastar Tem um trecho POO incorreto, troque por: if not (alvo) then return outputChatBox("[Aviso] Jogador ' "..alvo.name.." ' não encontrado!", player,255,255,255) end
  7. MaligNos

    Tempo de Prisão.

    @brunob22 É válido o pensamento, mas ele precisa executar um trecho de código em tal tempo, e como você varia isso sem o setTimer ? Creio eu que tais soluções seriam menos eficientes ainda quanto ao simples uso do setTimer.
  8. MaligNos

    Script de arrastar

    function seguirComando(player, commandName, playerid) if isObjectInACLGroup ("user."..getAccountName(getPlayerAccount (player)), aclGetGroup ("ComandosCorporacoes")) then if not (playerid) then return end local alvo = exports["ID_System"]:getPlayerID(tonumber(playerid)) if not (alvo) then return player:outputChatBox("[Aviso] Jogador ' "..alvo.name.." ' não encontrado!", player,255,255,255) end if getElementData(alvo,"Algemado") then alvox,alvoy,alvoz = getElementPosition (alvo) playerx,playery,playerz = getElementPosition (player) local dist = getDistanceBetweenPoints3D(alvox,alvoy,alvoz,playerx,playery,playerz) if (dist <=5) then local vehicle = getPedOccupiedVehicle(player) if vehicle then warpPedIntoVehicle (alvo , vehicle , 2) end end end end end addCommandHandler("arrastar", seguirComando)
  9. MaligNos

    Tudo sobre Banco de Dados do MTA (SQLite)

    Se eu fosse você, adaptaria o script para ao invés de utilizar MySQL usar o SQLite do MTA Troque sua primeira linha por isso: dbhandler = dbConnect ("sqlite", "whitelist.db") Em relação ao seu arquivo database.sql, provavelmente existe a criação da tabela do whitelist, copie o código dele e rode com dbExec Exemplo: dbExec (dbhandler, "CREATE TABLE IF NOT EXISTS WHITELIST …") @LeeaF você deveria ter criado um tópico novo com sua dúvida, pois o assunto não se relaciona com o tutorial deste tópico.
  10. Dá para fazer esse teste aqui: https://nightly.mtasa.com/ports/ ou digitando openports no console do servidor.
  11. MaligNos

    Consumo de CPU

    Então executará em outros horários além daquele 17:08 ? É possível também, mas creio que a codificação não será tão trivial quanto para apenas um horário definido. Pensando rapidamente aqui, eu criaria uma tabela com tais horários, percorreria e obteria o getTimestamp* para cada um deles, e com isso faria o cálculo dos milissegundos para criar os setTimers (cada um para um horário). *O trabalho seria verificar se o horário que você ativou o script já é maior, menor ou igual à tais horários definidos, e talvez até precisar verificar quantos dias possui no mês, se o ano é bissexto, para poder mandar valores válidos ao getTimestamp. Caso não queira trabalho, aumente o tempo do seu setTimer de 1000ms, para 60000ms, mas apenas se a verificação dos horários não envolver segundos.
  12. MaligNos

    InterpolateBetween

    Painéis devem ser criados no lado cliente, o interpolateBetween pode ser utilizado em ambos pois não é uma função exclusivamente para fazer efeitos em painéis, basicamente a função serve para variar um valor x até um valor y. Ou seja, não vai ter como criar sua barra de progresso no lado servidor.
  13. MaligNos

    Consumo de CPU

    Exato! Você quer executar uma ação quando for x horas ? Caso sim, mantenha o código no lado servidor, mas ao invés de ficar verificando a hora todo instante, basta calcular os milissegundos que possuem do momento que ativar o script até a hora/dia desejado, ai só criar o setTimer com tal valor. Talvez ajude: https://forum.mtasa.com/topic/76253-usando-timestamp/
  14. MaligNos

    protecao script

    Exato, se não a referência utilizada seria da função cancelEvent original... rodando o malicioso antes, eu garanto isso: https://i.imgur.com/x0FE5Xq.png
  15. MaligNos

    protecao script

    Como ficou a precedência de execução ? Declarou o script “malicioso” antes do outro no meta ? Cada resource fica em um “ambiente”, sendo assim, se tu usar o _G, ele não vai pegar funções/variáveis criadas por outros resources.
  16. MaligNos

    Ajuda com script

    Muito provavelmente getPlayerID recebe como argumento o player e retorna o ID, e ali você está passando a variável playerid, que inclusive nem foi declarada... era apenas trocar por thePlayer: local playerID = exports["[PRS]ID_System"]:getPlayerID(thePlayer) Mas como já mencionado pelo @Jonas^, como seu sistema de ID já armazena com setElementData, a chamada na função exportada pode ser evitada.
  17. MaligNos

    protecao script

    Sim, ele vai chamar o cancelEvent local, mas do que adianta se no corpo da função ele vai mandar ao cancelEvent externo ? Testando seu exemplo, eu consegui entrar no veículo e a função maliciosa foi executada. Testei aqui, ela some do _G também, mas apenas para o resource que efetuou a ação. Verdade, realmente pode ser utilizada! É que o uso do setfenv coincidiu com um trecho de fileRead+loadstring que acabou gerando: "Unsafe function was called".
  18. MaligNos

    protecao script

    Realmente quando trabalha com funções/variáveis locais, complica 100%, teria que usar setfenv (função desabilitada no MTA por questões de segurança). Mas tem que ser ambos locais, pois se uma função global utilizar uma variável local, daria para pegar com getupvalue. -- script A local teste = "oie" function testeFunc() if (teste) then end end -- script B local i = 1 while true do local nome, val = debug.getupvalue(testeFunc, i) if not nome then break end print(nome, val) -- teste oie i = i + 1 end
  19. MaligNos

    protecao script

    O principal mesmo é buscar manter sigilo total de como foi feito o sistema de proteção, ninguém burla nada sem antes saber como funciona. Você analisando o código, "facilmente" vê um jeito de burla-lo, agora um script criptografado, teria que ralar muito para descobrir um jeito.
  20. MaligNos

    protecao script

    Imagino eu, que um debug = nil funcione. Mas se o cara salvar em outra variável antes de você definir nil, acredito que conseguirá utilizar do mesmo modo kkk teste = debug debug = nil print(teste) -- lib ok
  21. MaligNos

    protecao script

    Interessante! Confesso que estava tentando pensar em algo do tipo... mas no final das contas não daria no mesmo https://i.imgur.com/x0FE5Xq.png ?
  22. MaligNos

    protecao script

    overwrite = sobrescrever… no nosso caso, funções. Você usa onResourceStart e cancelEvent() na proteção né ? É possível que alguém sobrescrever o addEventHandler e não faça nada quando for onResourceStart, ou seja, não vai rodar a função do evento, sendo assim, ele vai “pular” sua verificação+cancelEvent(): _addEventHandler = addEventHandler function addEventHandler(eventName, attachedTo, handlerFunction, getPropagated, priority) if (eventName ~= "onResourceStart") then getPropagated = getPropagated or true priority = priority or "normal" _addEventHandler(eventName, attachedTo, handlerFunction, getPropagated, priority) end end Falta de permissão = alguém conseguiu ilegalmente seus resources e esta tentando ativar. A proteção sua então vai considerar que ele não tem permissão e então cancelar o ativamento do resource... Realmente ficou confuso essa questão de permissão, mas se trata de terceiros tentando utilizar seus resources. O script pode estar compilado, porém no mesmo resource eu posso adicionar um script malicioso que de certa forma conseguiria “monitorar” a execução do compilado, visto que estariam em um mesmo “ambiente”. Dá para ver o nome das variáveis com: debug.getlocal / debug.getupvalue / _G Obs: Estou trazendo questões teóricas, nunca utilizei na prática, ou seja -> Certeza que vai funcionar ? R: Não. (mas deveria!)
  23. MaligNos

    protecao script

    Por questões de overwrite como já mencionado, você não tem garantia que o resource não será ativado (nos casos que não possua permissão). Uma proteção adicional é manter todo o seu código no escopo da validação: -- código inseguro addEventHandler("onResourceStart",resourceRoot, function() local ip,senha = exports.validar:autenticar() if (ip == "127.0.0.1" and descriptografar(senha) == "aljkdkhje") then -- código "seguro" else return cancelEvent() end end ) Dependendo de como foi feito e sabendo mais/menos o funcionamento do sistema de segurança, dá pra bolar algo utilizando algumas funções do debug para tentar espiar funções/variáveis e talvez até obter a chave da descriptografia. Enfim, nada é totalmente seguro... compilando e colocando em uma host confiável já dá pro gasto pra grande maioria, em casos mais extraordinários (scripts fodas) é que vale tal esforço.
  24. MaligNos

    protecao script

    Seria bom também uma validação das funções que utilizará (debug.getinfo), evitando chamar funções que foram sobrescritas... function fetchRemote(...) for _, param in ipairs(arg) do if (type(param) == "function") then return param("127.0.0.1") -- coloco o IP que a validação quer end end end
  25. MaligNos

    Qual melhor forma de fazer isso...

    Você não precisa interagir com o db todo instante, você pode fazer isso apenas no start/stop do resource: start: carrega os dados do banco em uma variável/tabela/elementdata …. stop: salva no banco Utilizando o banco de dados do MTA (SQLite) ao invés do MySQL, seria bem mais eficaz também! Particularmente não acho interessante criar uma tabela para armazenar pouquíssimas informações, vai ser apenas o campo cofre consumindo uma única linha na tabela ? Eu optaria por salvar em um arquivo, ou então em uma conta “cobaia” responsável apenas por salvar informações relacionadas ao servidor, exemplo: -- Vamos supor que eu tenha uma conta "serverData" local accData = getAccount("serverData") local bancoElem = createElement("banco") addEventHandler("onResourceStart", resourceRoot, function() local cofre = getAccountData(accData, "banco.cofre") or 0 setElementData(bancoElem, "cofre", cofre) end ) addEventHandler("onResourceStop", resourceRoot, function() local cofre = getElementData(bancoElem, "cofre") setAccountData(accData, "banco.cofre", cofre ) end ) -- Para manipular o elementData em outros scripts, pode ser usado algo do tipo: print(getElementData(getElementsByType("banco")[1], "cofre")) -- obter setElementData(getElementsByType("banco")[1], "cofre", 500) -- alterar