Jump to content

Tony Scripter

Members
  • Posts

    38
  • Joined

  • Last visited

Posts posted by Tony Scripter

  1. Spoiler
    
    function loginAccount(username, password)
    	local source = client
    	dbQuery(
    		function(qh)
    			local result = dbPoll(qh, 0)
    			if #result > 0 then
     				triggerClientEvent(source, "renderPanelUnity", source)
    			else
                    triggerClientEvent(source, "Notify", source, "Usuário ou senha incorretos.", "error")
    			end
    		end,
    	connection, "SELECT * FROM sm_accounts WHERE username = ? AND password = ?", username, password)
    end
    addEvent("loginAccount", true)
    addEventHandler("loginAccount", getRootElement(), loginAccount)

     

    Olá estou com alguns problemas na parte do triggerClientEvent(source, "Notify, source, "Usuário ou senha incorretos.", "error) quando executado ele aparece 2 notificações, obs: não é o script de notificação que está com o erro pois outras notificações estão normais, quem conseguir me ajudar agradeço :)

  2. function createAccount(thePlayer, commandName, username, password)
        if not (username) or not password then
            triggerClientEvent(thePlayer, "Notify", root, "/"..commandName.." [Login] [Password].", "info")
            return
        end
    
        local query = dbExec(connection, "INSERT INTO sm_accounts VALUES(?,?,?)", username, password, nil)
    
        if query then
            triggerClientEvent(thePlayer, "Notify", root, "Account created.", "success")
        else
            triggerClientEvent(thePlayer, "Notify", root, "Erro system database.", "error")
        end
    end
    addCommandHandler("createAccount", createAccount)

    Alguem poderia me ajudar estou tentando colocar uma verificação na database para ver se já possui o nome de login em uso porem não estou conseguindo fazer uma verificação para isso, já tentei de 2 maneira porem não obtive sucesso. 

    12 minutes ago, Tony Scripter said:
    function createAccount(thePlayer, commandName, username, password)
        if not (username) or not password then
            triggerClientEvent(thePlayer, "Notify", root, "/"..commandName.." [Login] [Password].", "info")
            return
        end
    
        local query = dbExec(connection, "INSERT INTO sm_accounts VALUES(?,?,?)", username, password, nil)
    
        if query then
            triggerClientEvent(thePlayer, "Notify", root, "Account created.", "success")
        else
            triggerClientEvent(thePlayer, "Notify", root, "Erro system database.", "error")
        end
    end
    addCommandHandler("createAccount", createAccount)

    Alguem poderia me ajudar estou tentando colocar uma verificação na database para ver se já possui o nome de login em uso porem não estou conseguindo fazer uma verificação para isso, já tentei de 2 maneira porem não obtive sucesso. 

    Consegui fazer pessoal, não preciso mais de ajudar :)

  3. 5 hours ago, Boechat said:

     

    Não era pra ter esse v[7], v[8] e v[9] no setElementRotation, sua tabela só tem 6 posições... Eu adicionei mais 3 posições aleatórias e mudei algumas coisinhas, veja se assim funciona. Qualquer coisa posta aí no fórum, eu não cheguei a testar o código.

    settings = {
        table = { -- Marker X | Marker Y | Marker Z | Ped X | Ped Y | Ped Z | Rotação Ped X | Rotação Ped Y | Rotação Ped Z
            {-3, 3.5, 4.5, 10, 10, 10, 0, 0, 180}, --Aqui eu adicionei 3 posições aleatórias pro Ped X, Ped Y e Ped Z que estavam faltando...
            {-5, 3.5, 4.5, 10, 10, 10, 0, 0, 180}
        },
    }
    
    local Table = {} 
    addEventHandler('onResourceStart', root, function()
    	for i, v in ipairs(settings.table) do
    		Table[i] = createMarker(v[1], v[2], v[3], "cylinder", 1.2, 0, 0, 0, 0)
    		addEventHandler("onMarkerHit", Table[i], teleportOnHit)
    	end 
    end)
    
    function teleportOnHit(hitElement)
    	if not isElement(hitElement) or getElementType(hitElement) ~= "player" then return end
    	local pos = getMarkerTeleport(source)
    	if not pos then return end
      	setElementPosition(localPlayer, pos[4], pos[5], pos[6])
    	setElementRotation(localPlayer, pos[7], pos[8], pos[9])
    end
    
    function getMarkerTeleport(marker)
    	for i, m in ipairs(Table) do
    		if marker == m then
    			return settings.table[i]
    		end
    	end
      return false
    end

     

    Funcionou exatamente do jeito que precisava, obrigado pela ajuda.

    • Like 1
  4. 15 hours ago, Blaack said:

    Rapaz como voce ta puxando isso?

    settings = {
        table = { -- Marker X | Marker Y | Marker Z | Ped X | Ped Y | Ped Z | Rotação Ped X | Rotação Ped Y | Rotação Ped Z
            {-3, 3.5, 4.5, 0, 0, 180},
            {-5, 3.5, 4.5, 0, 0, 180}
        },
    }
    
    local Table = {} 
    
    for i,v in ipairs(settings.table) do
        Table[i] = createMarker(v[1], v[2], v[3], "cylinder", 1.2, 0, 0, 0, 0)
    
        addEventHandler("onMarkerHit", Table[i], function(hitElement)
            if getElementType(hitElement) == "player" then
                setElementPosition(localPlayer, v[4], v[5], v[6])
                setElementRotation(localPlayer, v[7], v[8], v[9])
            end
        end)
    end 

    Dessa forma.

  5. settings = {
        table = { -- Ped X | Ped Y | Ped Z | Rotação Ped X | Rotação Ped Y | Rotação Ped Z
            {-3, 3.5, 4.5, 0, 0, 180},
            {-5, 3.5, 4.5, 0, 0, 180}
        },
    }

    Na tabela acima possuem as posições de um setElementPosition setElementRotation mas quando eles são executados eles vão aleatoriamente, a tabela 01 e uma posição e a tabela 02 e outra mas quando executada a posição eles acabam indo aleatoriamente eu posso executar a função no marker da tabela 01 e acabar sendo teleportado para a posição da tabela 02

  6. 8 hours ago, andr0xy said:

    Olá. Você pode gerar números de 0 a 9 usando math.random. Crie uma função pra facilitar. Algo deste tipo:

    
    function generatePhoneNumber(startsWith)
        local str = startsWith or math.random(0, 9)
        for i = 1, 7 do
            str = str .. math.random(0, 9)
        end
        return string.sub(str, 1, 4) .. "-" .. string.sub(str, 5, 8)
    end
    
    print(generatePhoneNumber()) -- Início aleatório
    print(generatePhoneNumber(5)) -- Início do número começando com 5 sempre

    Você pode testar o código acima aqui neste site.

    Entendi, eu poderia salvar esse numero em setElementData ?

  7. Olá pessoal estou criando um custom character porem eu não sei como eu posso salvar de uma maneira facil as roupas no ped quando ele entra e sai do servidor, alguem poderia me dar um exemplo ? nunca fiz um save system de roupas muito menos de custom character

  8. 4 hours ago, andr0xy said:

    Entendi. Você pode fazer desta forma:

    
    local animationAlpha = 0
    local animationDelta = 0.08
    local animationStep
    
    local function render()
        if animationStep == "in" then
            animationAlpha = math.min(animationAlpha + animationDelta, 1) -- Vai de 0 a 1. Basta multiplicar pelo valor máximo
            if animationAlpha == 1 then
                animationStep = "out"
            end
        elseif animationStep == "out" then
            animationAlpha = math.max(animationAlpha - animationDelta, 0) -- Vai de 1 a 0.
            if animationAlpha == 0 then
                animationStep = "in"
            end
        end
    
        dxDrawImage(0, 0, 200, 200, tocolor(255, 255, 0, animationAlpha * 255), false) -- Exemplo com o valor máximo sendo 255
        dxDrawImage(0, 205, 200, 200, tocolor(255, 0, 0, animationAlpha * 100), false) -- Exemplo com o valor máximo sendo 100
    end
    
    -- Supondo que esta seja a função de abrir o painel
    bindKey("u", "down", function()
        animationAlpha = 0
        animationStep = "in"
        addEventHandler("onClientRender", root, render)
    end)

     

    Perfeito era exatamente dessa forma, eu até tentei fazer com 2 variaveis mas nao tive sucesso mas agora eu sei por qual motivo, obrigado.?

  9. On 19/05/2021 at 08:55, andr0xy said:

    Como você está tentando fazer?

    Pois você precisaria de uma variável de estado (true/false). Assim que entrar naquela condição, ela ficaria true, caso esteja fora da condição, false. Aí bastaria checar em alguma bindKey ou da maneira que você tá fazendo, se essa variável é true.

    Tranquilo consegui fazer, estava com a mente um pouco trava ?

  10. 15 minutes ago, andr0xy said:

    Olá.

    
    local animationAlpha = 0
    
    local function render()
        animationAlpha = math.min(animationAlpha + 0.08, 1) -- Vai de 0 a 1. Basta multiplicar pelo valor máximo
    
        dxDrawImage(0, 0, 200, 200, tocolor(255, 255, 0, animationAlpha * 255), false) -- Exemplo com o valor máximo sendo 255
        dxDrawImage(0, 205, 200, 200, tocolor(255, 0, 0, animationAlpha * 100), false) -- Exemplo com o valor máximo sendo 100
    end
    
    -- Supondo que esta seja a função de abrir o painel
    bindKey("u", "down", function()
        animationAlpha = 0
        addEventHandler("onClientRender", root, render)
    end)

    Como dito no comentário dentro do código, a variável animationAlpha armazena o valor 0, que vai até o valor 1. Com esse valor, bastaria multiplicar pelo valor máximo, pois qualquer número multiplicado por 1, é ele mesmo.

    A biblioteca math possui um método chamado min, que pega o MENOR valor. No caso do exemplo, a variável está sendo incrementada com + 0.08, até chegar a 1. Então, se o valor for maior que 1, ele vai pegar o menor valor, que é 1, como eu defini.

    Entendi esse metodo porem, eu estou tentando fazer do seguinte modo quando a opacidade alcança 255 ela volta descendo para 0 quando ela alcança 0 ela volta subindo para 255, isso e possivel ?

  11. Olá pessoal eu não sou muito de fazer animações em dx então eu precisava de uma ajuda, estou fazendo um painel e queria saber como eu poderia fazer uma animação de opacidade, que nunca para para colocar na logo do painel, a animação seria aplicada na opacidade da logo indo de 0 a 255

  12. On 19/05/2021 at 08:55, andr0xy said:

    Como você está tentando fazer?

    Pois você precisaria de uma variável de estado (true/false). Assim que entrar naquela condição, ela ficaria true, caso esteja fora da condição, false. Aí bastaria checar em alguma bindKey ou da maneira que você tá fazendo, se essa variável é true.

    Bom esse e o problema não consegui ter uma para fazer essa bind key

  13. 6 hours ago, andr0xy said:

    Olá.

    Essa pergunta foi feita no Discord Oficial do MTA: SA. Irei responder da mesma maneira que lá, com o código de exemplo.

    
    local greenLineWidth = math.random(100, 300)
    local greenLineHeight = 30
    local greenLineX = 5
    local greenLineY = 300
    local greenLineOffset = 0
    
    local redLineWidth = math.random(10, 20)
    local redLineHeight = greenLineHeight
    local redLineX = greenLineX + math.random(greenLineWidth)
    local redLineY = greenLineY
    
    addEventHandler("onClientRender", root, function()
        -- Progresso
        greenLineOffset = math.min(greenLineOffset + 1, greenLineWidth)
    
        -- Linha verde
        dxDrawRectangle(greenLineX, greenLineY, greenLineWidth, greenLineHeight, tocolor(20, 21, 22, 255), false)
        dxDrawRectangle(greenLineX, greenLineY, greenLineOffset, greenLineHeight, tocolor(45, 255, 45, 220), false)
    
        -- Linha vermelha
        dxDrawRectangle(redLineX, redLineY, redLineWidth, redLineHeight, tocolor(255, 45, 45), false)
    
        -- Borda da linha vermelha
        dxDrawRectangle(redLineX, redLineY, 1, redLineHeight, tocolor(255, 255, 255, 220), false)
        dxDrawRectangle(redLineX + redLineWidth, redLineY, 1, redLineHeight, tocolor(255, 255, 255, 220), false)
    
        -- Checagem
        local greenLineEnd = greenLineX + greenLineOffset
        local redLineStart = redLineX
        local redLineEnd = redLineX + redLineWidth
    
        if greenLineEnd >= redLineStart and greenLineEnd <= redLineEnd then
            dxDrawText("APERTE O BOTÃO!", greenLineX, greenLineY, greenLineX + greenLineWidth, greenLineY + greenLineHeight, tocolor(255, 255, 255, 255), 1.2, "default-bold", "center", "center")
        end
    end)

     

    Bom consegui entender esse codigo, porem estou tentando realizar a parte de apertar o botão e não estou conseguindo fazer, você poderia me dar um exemplo de como fazer ?

  14. Olá queria saber se alguem poderia me ajudar dando um exemplo de como eu poderia fazer uma skill bar (Quando a barra verde chega ao quadrado vermelho se a pessoa apertar E em cima na hora ela consegue passar e destrancar o carro.) so quero saber a parte de skill bar e nao de trancar o carro para ser muito mais simples
    unknown.png

  15. Estou desenvolvendo um emprego, para aprimorar a minha programação e tenho dificuldades em tabela, queria saber como eu poderia fazer um emprego no seguinte modelo:

    TabelaMarkers = {
    	{1, 1, 1}, -- Primeiro Marker
    	{2, 2, 2}, -- Segundo Marker
    	{3, 3, 3}, -- Terceiro Marker
    	{4, 4, 4}, -- Quarto Marker
    }

    O jogador iria pegar um carro, e iria gerar o primeiro marker, quando o player passar por cima do marker o veiculo para e fica freezado durante 5 segundos, depois que foi liberado gera o 2 marker, depois o 3 marker e por ultimo o 4 marker.

  16. 29 minutes ago, Boechat said:

     E aonde está sendo chamado a função Progress? 

    Testa com esse comando aqui para ver se funciona:

    
    function Progress(playerSource, tempoms)
        triggerClientEvent(playerSource, "Progress:bar", playerSource, tempoms)
    end
    addEvent("Progress:bar", true)
    addEventHandler("Progress:bar", root, Progress)
    
    function teste(playerSource)
        Progress(playerSource, 5000)
    end
    addCommandHandler("teste", teste)

     

    Infelizmente ainda nao foi continua printando a mesma coisa no debug ERROR: 16: attempt to perform arithmetic on upvalue 'temp' (a nil value) 

     

    Consegui fazer ir, obrigado pela ajuda amigo ?

  17. 4 hours ago, Boechat said:

    Me mostra a parte que vc da um trigger no evento  "Progress:bar", talvez você esteja passando um valor nulo como parâmetro.

    function Progress(sourceElement, tempoms)
        triggerClientEvent(sourceElement, "Progress:bar", sourceElement, tempoms)
    end
    addEvent("Progress:bar", true)
    addEventHandler("Progress:bar", root, Progress)
    
    function teste(source)
        triggerClientEvent(source, "Progress:bar", root, 5000)
    end
    addCommandHandler("teste", teste)

     

  18.  

    15 minutes ago, Boechat said:

    A variável temp declarada no começo do código com o valor nulo é diferente da passada por argumento que só vale dentro da função, então o que está passando como parâmetro no interpolate between tem o valor nulo. 

    O temp é em ms né? 

    Veja se funciona dessa forma:

    
    
    local temp = nil
    
    function Hud()
        local progresso = interpolateBetween(0, 0, 0, x*100, 0, 0, (getTickCount()-tick) / temp, "Linear")
        if temp + tick <= getTickCount() then
            removeEventHandler("onClientRender", root, Hud)
        end
        dxDrawCircle(x*1317, y*862, 18, progresso/100, progresso/100*360, tocolor(128, 128, 128, 255))
    end
    
    function progress(tempoms)
        temp = tempoms
        tick = getTickCount()
        addEventHandler("onClientRender", root, Hud)
    end
    addEvent("Progress:bar", true)
    addEventHandler("Progress:bar", root, progress)

     

    Sim o codigo e em ms, testei aqui porem ainda continuou dando o mesmo error será que tem mais alguma coisa errada ?

  19. Estou com um problema com a tentar fazer uma progress bar

    Spoiler
    
    
    local tick = getTickCount()
    local temp = nil
    
    function Hud()
        local progresso = interpolateBetween(x*0, 0, 0, x*100, 0, 0, (getTickCount()-tick)/temp, "Linear")
    
        dxDrawCircle(x*1317, y*862, 18, progresso/100, progresso/100*360, tocolor(128, 128, 128, 255))
    end
    
    function progress(temp)
    
        tick = getTickCount()
        addEventHandler("onClientRender", root, Hud)
    
    	setTimer(function()
            removeEventHandler("onClientRender", root, Hud)
    	end, temp, 1)
    
    end
    addEvent("Progress:bar", true)
    addEventHandler("Progress:bar", root, progress)

     

    No debugscript esta dizendo 16: attempt to perform arithmetic on upvalue 'temp' (a nil value) 

    Queria fazer a exportação de time no triggerEvent para assim não precisar ficar recriando a progress bar

  20. 1 hour ago, andr0xy said:

    Olá.

    Você pode criar uma tabela e anexar o jogador, nela você iria atribuir o total de tarefas completadas. Com esse total, basta usá-lo como índice na sua tabela. Também, claro, se for maior que o total de markers possíveis, então nada iria executar.

     Bom eu queria fazer um trabalho de limpeza com um carrinho, assim ele iria passando sempre pelos mesmos markers você conseguiria me dar um exemplo ?

  21. Estou fazendo um script de trabalho e queria utilizar tabela para facilitar um pouco mais porem estou com algumas duvidas
     

    Markers_Trabalho = { -- x, y, z
      {2514, -1649, 14}, -- Marker[1]
      {2524, -1658, 15}, -- Marker[2]
      {2534, -1662, 14.5}, -- Marker[3]
    }

    Está e as tabela dos markers, eu queria que eles tivessem uma sequecia, apos o player passar pelo Marker[1] ele e encaminhado ao Marker[2] e assim por diante, como eu poderia fazer essa sequencia nos markers

  22. 7 hours ago, andr0xy said:

    Estou pegando todos os jogadores apenas, para não ter que passar o root no primeiro parâmetro do triggerClientEvent. Como você quer sincronizar para os outros jogadores, é necessário enviar para eles também. :) 

    Entendi, essa função então e muito util obrigado, irei começar a ver aqueles videos que você me passou quanto mais conteudo melhor :)

×
×
  • Create New...