Jump to content

DNL291

Moderators
  • Posts

    3,875
  • Joined

  • Days Won

    67

Posts posted by DNL291

  1. Não pode. Essa função é do lado server apenas.

    Diga-nos o que você está tentando fazer para que possamos dar a melhor alternativa - geralmente você faz um trigger (triggerClientEvent), verificando e validando o acesso pelo lado server.

    • Thanks 1
  2. 3 hours ago, shephard said:

    You should update the resource description or prove that it's yours, this is the recommended procedure - once this is done it will be removed.

  3. Olá e bem-vindo ao fórum. Para manter o local organizado temos os respectivos sub-fóruns, por isso, sempre que criar um tópico por favor crie-o dentro do sub-fórum Portuguese / Português 

    Você pode encontrá-lo pela página inicial do fórum da forma mostrada abaixo:  

    MJDsq2U.png

    Isso evitará o trabalho que os moderadores têm diariamente de mover posts para os locais certos.  

    Sempre que criar um novo tópico, certifique-se que esteja na devida categoria. No sub-fórum Português ficam todas postagens na linguagem portuguesa, enquanto que fora da categoria Other languages só é permitido posts em inglês, por isso, sempre que responder um tópico, preste atenção a isso. 


    Tópico movido @AGAKAZZYN

    • Like 1
  4. Acho que é uma pergunta interessante. Há muitos casos que exports pode ser trocado por um trigger. Um motivo para o exports ser bem mais utilizado deve ser porque alguns nem sabem que o trigger pode ser uma segunda opção.

    Pode ser também por evitar problemas com possíveis conflitos - mas nada que definir um nome diferente/longo não resolva, exemplo: NomeDoResource.Progressbar.SetProgress


    Função exportada talvez seja mais fácil já que o trigger pode dar problemas se não tiver de acordo com o elemento da árvore (se não tiver adicionada para root por exemplo e chamado por fora); Muitos não irão saber o que de fato significa vincular o evento ao localPlayer, ao resourceRoot, ou root.

    O que também difere ambas é que fazer uma chamada com exports é mais amigável do que fazer com trigger.

    Sobre exports, neste post tem um teste de benchmark com a função: https://forum.multitheftauto.com/topic/83715-question-cpu-usage/?do=findComment&comment=764086
    exports é bem mais lento do que uma função local (mesmo resource).
    Isso porque a função exportada precisa ser acessada em um ambiente diferente do local então existe uma perca de performance, que eu nunca cheguei a testar, mas se utilizada indevidamente acredito que reflita no uso de cpu.

    Alguns scripters optam por enviar o código pelo exports, então uma vez recebido, o código é "transferido" (e executado) para o novo ambiente (resource) com loadstring

    Acho que é uma questão de opção no fim das contas, mas como disse, muitos que são novos e não tem muito conhecimento acabam se limitando a isso por verem em toda parte, isso faz parecer ser a única opção, principalmente para quem não domina bem a linguagem.
    Pessoalmente eu também sempre optei por função exportada, fica como melhor opção se você for fazer documentação das funções ou gosta da prática mais lógica. Falei da questão da performance mas o mesmo existe para trigger event - não é bom passar root como elemento, nem ter muitos events handlers em execução.

    • Like 1
  5. Como já mencionado, deve ser no lado server. Outra coisa a se fazer é não apenas verificar quantos estão na colshape da marker, em vez disso verificar se alguém está com a janela aberta.
    Isso pode ser feito com setElementData na marker. E terá que ser atualizado quando jogador fechar o painel ou sair. Resetar essa elementData no onResourceStop também evitaria possíveis bugs.

  6. 
    local tPlayers = {} -- tabela global, esta irá armazenar os jogadores com o tempo que usou o comando
    local tempo = 5000 -- 5 segundos em milissegundos
    
    function repararveiculo ( source )
        local accName = getAccountName ( getPlayerAccount ( source ) )
        if isObjectInACLGroup("user." .. accName, aclGetGroup("Staff")) then
            if isPedInVehicle ( source ) then return end
            -- verificar se existe o tempo vinculado ao jogador; verificar quanto tempo passou desde que usou da última vez
            if tPlayers[source] and (getTickCount(source) - tPlayers[source]) < tempo then
                -- parar a execução aqui
                return outputChatBox( "Aguarde um tempo para usar este comando novamente", source, 230,0,0 )
            end
            tPlayers[source] = getTickCount(source) -- armazenar o tempo em que o jogador usou o comando
    
            local x, y, z = getElementPosition(source) 
            local colcarros = createColSphere ( x, y, z, 2)
            local vehicle = getElementsWithinColShape ( colcarros, "vehicle" )
            destroyElement(colcarros)
            setPedAnimation( source, "CAR", "Fixn_Car_Loop", 4500, true, false, false, false)
            for theKey, veh in ipairs(vehicle) do
                setTimer ( function()
                    fixVehicle(veh)
                end, 4500, 1 )	
            end
        end
     end
    addCommandHandler ( "fix", repararveiculo  )
    
    -- otimização
    addEventHandler("onPlayerQuit", root, function()
        -- remover da tabela global ao sair do servidor
        if tPlayers[source] then
            tPlayers[source] = nil
        end
    end)

    Leia os comentários do código.

    • Thanks 1
  7. Você tem um crash bem conhecido que é "Out of video memory." (sem memória gráfica livre).
    Além desse, consta outros diversos crashs que é bem provável que seja um resultado de um Sistema Operacional de 32bits.


    O seu sistema suporta uma versão de x64, por favor faça uma reinstalação com essa arquitetura para evitar novos crashs.
    Notei que também, o seu GTA:SA está num local diferente que o de seu sistema e do MTA, que é o disco C, recomendo deixar ambos no disco C.

×
×
  • Create New...