Jump to content

Vazern

Members
  • Posts

    94
  • Joined

  • Last visited

Posts posted by Vazern

  1. On 27/02/2019 at 10:21, Teixeira said:

    Bom dia comunidade, estou começando um estudo de linguagem de programação e meio que algumas dúvidas estão surgindo. Sempre acompanho aqui a parte do fórum brasileiro, em que os senhores tiram as dúvidas daqueles que perguntam e realmente demonstram interesse no que estão perguntando.

    1 - Dúvida (Ligação de resource)

    Eu estava procurando alguns recursos na internet, e baixei um para ver como o mesmo funciona. Ao baixar o resource que no caso é um sistema de inventário, me deparei com uma situação bem diferente que gostaria de perguntar:

    98qlVRG.png 

    Como é possível ligar uma resource a outra? Por exemplo nessa foto a cima, tem vários resource diferentes que são ligados a um único resource, como é possível ligar esses resource? Qual a função deve ser utilizada, apenas eu queria uma base mesmo, após isso eu vou aprofundando pesquisando em outros lugares.

     

    2 - Dúvida (getElementPosition)

    Estou tentando criar um comando simples, que quando o "player" der o comando /entrar em uma determinada posição ele ser teletransportado para outra posição. Eu fiquei rodando e rodando e não conseguir chegar em lugar nenhum, penso que é possível fazer com "getElementPosition" da maneira que verifica se o player está na determinada posição e se for verdadeiro então, ao player dar o comando ele ser teletransportado. Infelizmente não estou conseguindo, poderiam tirar essa dúvida como posso fazer?

    Desculpem-me o anti-topic, mas é satisfatório ver que um dos primeiros mods que eu fiz são utilizados até hoje, rs.

    • Confused 1
  2. On 11/02/2019 at 23:26, Lord Henry said:

    Não precisa. Ela simplesmente será false na primeira execução e depois será true. (not false = true)

    Ela foi definida na linha 8 como sendo sempre o oposto de seu valor atual. Ou seja, a cada execução ela alterna entre false e true.

    Nem havia notado que ela estava ali fora da verificação. Obrigado!

  3. 2 hours ago, #DaNiLiN said:

    Essa hud ai não é a hud do mta então não funcionaria com setPlayerHudComponentVisible você irá ter que fazer o seguinte.

    
    function ocultarHud()
    	if isVisible then
    		addEventHandler("onClientRender", root, Hud)
    	else
    		removeEventHandler("onClientRender", root, Hud)
    	end
    	isVisible = not isVisible
    end
    bindKey ("o", "down", ocultarHud)
    

    Use addCommandHandler caso for por comando pra abrir o Painel.

    Deixe o Thanks caso foi útil meu comentário.

    Creio eu que está no tópico errado. Deveria ser em programação lua eu acho.

    A variável "isVisible" não está definida em lugar algum, ele poderia por um "isVisible = true" antes da função.

    • Thanks 1
  4. 1 hour ago, .Doctor said:

    Salve Guys blz? bom manos estou tento problemas com esse meu "sistema de tela de download" bom ele está funcionando mas quando um player termina o download o script continua rodando como posso remove-lo assim que o usuario terminar o download? 

    
    local sx, sy = guiGetScreenSize()
    local link = "http://mta/n_Download/html/index.html"
    local initBrowser = guiCreateBrowser(0, 0, sx, sy, true, false, false)
    local browser = guiGetBrowser(initBrowser)
    guiSetInputMode("no_binds_when_editing")
    
    addEventHandler("onClientBrowserCreated", browser)
    
    
    addEventHandler("onClientBrowserCreated", browser,
    function ()
    		fadeCamera(false,0)
    		showCursor(true)
    		loadBrowserURL(source, link)
    end
    )
    
    addEventHandler("onClientResourceStart", getResourceRootElement(), showPreload);
    
    
    
    function renderLoaldLogin()
    	if getElementData(getLocalPlayer(),"load_notLogin") then
    		if isTransferBoxActive() then return end
    		setElementData(getLocalPlayer(),"load_notLogin",false)
    	    destroyElement(initBrowser)
    		showCursor(false)
    		browser = nil;
    		initBrowser = nil;
    		removeEventHandler("onClientBrowserCreated", getResourceRootElement(), browser);
    		showChat(true)
    	end
    end
    addEventHandler("onClientRender", root, renderLoaldLogin)
    
    
    
    
    
    
    
    
    
    
    
    
    
    

     

    Só fazer uma função que remova esta "tela de carregamento", e exporta-la no script do painel de login.

    • Like 1
  5. Muito obrigado a ambos! ❤️

    Mas poderiam me explicar pequenos detalhes?

    É que não gosto de pegar o código pronto para entender.

    @DNL291 poderia me explicar como funciona o fromJSON/toJSON? Eu olhei na Wiki, mas não entendi direito, além do meu inglês ser péssimo.

    @MaligNos poderia me explicar sobre o uso e como funciona o unpack e o split?

    Caso não queiram/possam entendo perfeitamente, mesmo que seja o mínimo possível sobre ambos, eu tentarei o máximo possível entender.

    EDIT: Não sei o que é JSON .-.

  6. Olá pessoas deliciosamente bonitas!

    Bom, estou desenvolvendo um save-system por SQLite, porém, na parte de salvar as coordenadas do jogador, do contrário de salvar cada um dos tipos de coordenadas em uma coluna (X - Y - Z) eu queria salvar em uma única coluna (Coordenadas), mas como vocês devem saber, dados obtidos de um db são retornados como string, então utilizei Vector3 e tonumber, mas com o tonumber retorna um valor nulo, e sem ele retorna uma string, como eu poderia fazer para retornar o valor original de coordenadas?

    Código:

    local x2, y2, z2 = 675.99396,-1692.27075,8.70498 -- LUGAR QUE VAI SPAWNAR QUANDO CRIAR CONTA NOVA
    
    
    
    local db = exports.ds_sqlite
    db:exec("CREATE TABLE IF NOT EXISTS Usuarios (Nick TEXT, Usuario TEXT, Serial TEXT, Skin INT, Dinheiro INT, Coordenadas TEXT, Interior INT, Dimensao INT, Procurado INT)")
    
    
    function loadUsuarios(player, acc)
    	local accName = getAccountName(getPlayerAccount(player))
    	local datas = db:query("SELECT * FROM Usuarios WHERE Usuario=? LIMIT 1", accName)
    	if (datas and type(datas) == "table" and #datas > 0) then
            -- @Datas
            setElementData(player, "CRP:Skin", tonumber(datas[1]["Skin"]))
            setElementData(player, "CRP:Dinheiro", tonumber(datas[1]["Dinheiro"]))
            setElementData(player, "CRP:Coordenadas", datas[1]["Coordenadas"])
            setElementData(player, "CRP:Interior", tonumber(datas[1]["Interior"]))
            setElementData(player, "CRP:Dimensao", tonumber(datas[1]["Dimensao"]))
            setElementData(player, "CRP:Procurado", tonumber(datas[1]["Procurado"]))
            iprint(datas[1]["Coordenadas"])
            -- @Funções
            setCameraTarget(player, player)
            fadeCamera(player, true, 2.0)
            spawnPlayer(player, Vector3(datas[1]["Coordenadas"]))
            setElementPosition(player, Vector3(datas[1]["Coordenadas"]))
            setElementModel(player, tonumber(datas[1]["Skin"]))
            setPlayerMoney(player, tonumber(datas[1]["Dinheiro"]))
            setElementInterior(player, tonumber(datas[1]["Interior"]))
            setElementDimension(player, tonumber(datas[1]["Dimensao"]))
            setPlayerWantedLevel(player, tonumber(datas[1]["Procurado"]))
    	else
            setCameraTarget(player, player)
            fadeCamera(player, true, 2.0)
            spawnPlayer(player, x2, y2, z2)    
            setElementPosition(player, x2, y2, z2)
            local x, y, z = getElementPosition(player)
    		db:exec("INSERT INTO Usuarios VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", getPlayerName(player):gsub("#%x%x%x%x%x%x", ""), accName, getPlayerSerial(player), getElementModel(player), getPlayerMoney(player), x..","..y..","..z + 0.7, getElementInterior(player), getElementDimension(player), getPlayerWantedLevel(player))
    	end
    end
    
    function saveUsuarios(player, acc)
            local accName = getAccountName(getPlayerAccount(player))
            local datas = db:query("SELECT * FROM Usuarios WHERE Usuario=? LIMIT 1", accName)
            if (#datas > 0) then
                  local x, y, z = getElementPosition(player)
    		      db:query("UPDATE Usuarios SET Nick=?, Usuario=?, Serial=?, Skin=?, Dinheiro=?, Coordenadas=?, Interior=?, Dimensao=?, Procurado=?", getPlayerName(player):gsub("#%x%x%x%x%x%x", ""), accName, getPlayerSerial(player), getElementModel(player), getPlayerMoney(player), x..","..y..","..z + 0.7, getElementInterior(player), getElementDimension(player), getPlayerWantedLevel(player))
            end 
    end
    
    addEventHandler("onPlayerLogin", root,
        function()
            for index, players in ipairs(getElementsByType("player")) do
                if (players == source) then
                    local account = getPlayerAccount(players)
                    loadUsuarios(players, account)
                end
            end
        end
    )
    
    addEventHandler("onPlayerQuit", root,
        function()
            for index, players in ipairs(getElementsByType("player")) do
                if (players == source) then
                local account = getPlayerAccount(players)
                    if (account) then
                        saveUsuarios(players, account)
                    end
                end
            end
        end
    )

     

  7. Acho que seria mais simples fazer para quando passar em um marker gerar um valor de recompensa aleatório de 500 a 2000 (aí depende do script) e utilizar verificações através de tabelas, exemplo:

    if (entrega[source] == 1) then
      	setElementPosition(marker[source], x, y, z)
    	givePlayerMoney(source, math.random(1000, 2500))
    end

    E aí do contrário de criar vários markers, você criaria somente um, e o programaria para mudar de lugar quando passasse no mesmo. 

    • Thanks 1
  8. 12 minutes ago, DNL291 said:

    E vi a outra parte do post do @brunob22 depois que ele editou. Bem interessante a ideia, me pergunto de qual forma vai ser setada a velocidade nessa lombada eletrônica. Enfim, qualquer coisa só postar aqui em relação ao projeto.

    Tem uma função que permite anexar elementos DX assim em texturas não é? Não lembro o nome.

  9. 24 minutes ago, DNL291 said:

    Não entendi o propósito do loop aí, se for executar só pro source então mais fácil você tirar o resto que é desnecessário:

    
    addEventHandler("onPlayerLogin", root,
    	function()
    		loadDiamonds(source)
    	end
    )
    --quit
    addEventHandler("onPlayerQuit", root,
    	function()
        	if not (isGuestAccount(getPlayerAccount(source))) then
    			saveDiamonds(source)
    		end
    	end
    )
    

     

    Então, é que quando eu altero para source, simplesmente não funciona, por isso o loop.

    Em relação ao código do tópico, uma coisa que gostaria de ressaltar, e caso alguém veja isto, talvez sirva de ajuda.

    Eu utilizei datas[4] porque pensei que o o índice "4" era a 4° coluna do banco de dados, sendo que um amigo meu (@Blowid) me explicou que se refere a linha do banco de dados, por isso os dados não eram definidos, já que quando eu colocava [4] além do LIMIT 1 não permitir, não havia uma 4° linha de dados para aquele usuário.

  10. 10 minutes ago, DNL291 said:

    Eu tinha mandado o código com o [4], depois corrigi o erro kk.

    E aquele loop nos players no onPlayerLogin? o certo não seria chamar só pra quem logou? E o loop no evento onResourceStart.

    Boa observação. No caso eu faria:

    addEventHandler("onPlayerLogin", root,
        function()
            for index, players in ipairs(getElementsByType("player")) do
                if (players == source) then
                    local account = getPlayerAccount(players)
                    loadDiamonds(players, account)
                end
            end
        end
    )
    
    addEventHandler("onPlayerQuit", root,
        function()
            for index, players in ipairs(getElementsByType("player")) do
                if (players == source) then
                local account = getPlayerAccount(players)
                    if (account) then
                        saveDiamonds(players, account)
                    end
                end
            end
        end
    )

    Certo?

  11.  

    24 minutes ago, DNL291 said:

    Tenta isto:

    
    function loadDiamonds(player, acc)
    	local accName = getAccountName(getPlayerAccount(player))
    	local datas = db:query("SELECT * FROM Diamonds WHERE Usuario?=? LIMIT 1", accName)
    	if (datas and type(datas) == "table" and #datas > 0) then
    		datas = datas[1]
    		db:query("UPDATE Diamonds SET Nick=?, Usuario?=?, Serial=?, Diamantes=?", getPlayerName(player):gsub("#%x%x%x%x%x%x", ""), accName, getPlayerSerial(player), datas["Diamantes"])
    		setElementData(player, "CRP:Diamonds", tonumber(datas[4]["Diamantes"]))
    	else
    		setElementData(player, "CRP:Diamonds", 10)
    		db:exec("INSERT INTO Diamonds VALUES (?, ?, ?, ?)", getPlayerName(player):gsub("#%x%x%x%x%x%x", ""), accName, getPlayerSerial(player), getElementData(player, "CRP:Diamonds") or 10)
    	end
    end
    

     

    Obrigado!
    Mas ainda continua praticamente a mesma coisa, ele definiu o valor padrão (10), porém, eu alterei este valor, e após isto quando reconectei, ficou salvo no banco de dados, mas ao logar, não é definido valor nenhum, ao utilizar o execute no painel admin ele simplesmente retorna "false".

    NOTA: Eu removi o "tonumber" e continua a mesma coisa, o que poderia ser?

    11 minutes ago, VazErn said:

     

    Obrigado!
    Mas ainda continua praticamente a mesma coisa, ele definiu o valor padrão (10), porém, eu alterei este valor, e após isto quando reconectei, ficou salvo no banco de dados, mas ao logar, não é definido valor nenhum, ao utilizar o execute no painel admin ele simplesmente retorna "false".

    NOTA: Eu removi o "tonumber" e continua a mesma coisa, o que poderia ser?

    Consegui!

    Havia esqueci de mudar de datas[4]["Diamantes"] para datas["Diamantes"], rs.

    Muito obrigado.

     

  12. Olá pessoal! Tudo bem? Espero que sim.

    Então, estou fazendo um sistema de uma moeda diferente, que seriam "diamantes", fiz todo o código, ele armazena no banco de dados SQLite normalmente, mas na hora de carregar os dados (no evento onPlayerLogin que utiliza a função que eu fiz {loadDiamonds}) eles simplesmente não são carregados para o element-data.

    Poderiam me falar o que fiz de errado?

     

    bR1Tm9v.png

     

     

    local db = exports.ds_sqlite
    db:exec("CREATE TABLE IF NOT EXISTS Diamonds (Nick TEXT, Usuario TEXT, Serial TEXT, Diamantes INT)")
    
    
    function loadDiamonds(player, acc)
        local accName = getAccountName(getPlayerAccount(player))
        local datas = db:query("SELECT * FROM Diamonds WHERE Usuario=? LIMIT 1", accName)
        if (#datas == 0) then
            setElementData(player, "CRP:Diamonds", 10)
            db:exec("INSERT INTO Diamonds VALUES (?, ?, ?, ?)", getPlayerName(player):gsub("#%x%x%x%x%x%x", ""), accName, getPlayerSerial(player), getElementData(player, "CRP:Diamonds")) 
        else
            db:query("UPDATE Diamonds SET Nick=?, Usuario=?, Serial=?, Diamantes=?", getPlayerName(player):gsub("#%x%x%x%x%x%x", ""), accName, getPlayerSerial(player), datas[4]["Diamantes"])
            setElementData(player, "CRP:Diamonds", tonumber(datas[4]["Diamantes"]))
        end    
    end
    
    function saveDiamonds(player, acc)
        if (getElementData(player, "CRP:Diamonds")) then
            local accName = getAccountName(getPlayerAccount(player))
            local datas = db:query("SELECT * FROM Diamonds WHERE Usuario=? LIMIT 1", accName)
            if (#datas > 0) then
                db:query("UPDATE Diamonds SET Nick=?, Usuario=?, Serial=?, Diamantes=?", getPlayerName(player):gsub("#%x%x%x%x%x%x", ""), accName, getPlayerSerial(player), getElementData(player, "CRP:Diamonds"))
            end 
        end
    end
    
    addEventHandler("onPlayerLogin", root,
        function()
            for index, players in ipairs(getElementsByType("player")) do
                local account = getPlayerAccount(players)
                loadDiamonds(players, account)
            end
        end
    )
    
    addEventHandler("onPlayerQuit", root,
        function()
            for index, players in ipairs(getElementsByType("player")) do
                local account = getPlayerAccount(players)
                if (account) then
                    saveDiamonds(players, account)
                end
            end
        end
    )

     

  13. On 17/01/2019 at 08:24, Gaimo said:

    Que sacanagem kkkkkk, vlw mano, sabia que era algum erro bobo de 12.5 coloquei 12.6 foi.
    Essa eu não sabia que a marker contava em baixo dela.
    Eii... tu sabe como faz aquelas marker listrada?

    Sim, eu quando comecei sofri com isto, então logo bolei esta "tática" de um marker invisível, e outro visível mas somente para ficar mais bonito.

    Sobre o shader do marker o @asrzk já respondeu, então nem adianta kk

  14. Well, answering the question of both:
    I know I have to modify the client, even a while ago (right after I started with MTA and with Graphic Design) I created a (CLICK TO SEE), however, I'm referring to MTA updating your GUI, I know a lot well the part of the GUI made by image does not take even 30 minutes, I just need to update the gridlists, editbox and other elements for a more beautiful interface, new fonts would look good too.

  15. Hello!
    I noticed that the MTA for years uses the same GUI, you guys from the team, never felt like redoing it? I know very well that for the GUI to be all by image, there are not many complications.
    A 100% flat interface (as it were in DX) would be very attractive, and would make us scripters who worry about the interface we stop using DX to use the new interface Multi Theft Auto.

    (BAD ENGLISH BY: TRANSLATE GOOGLE)

  16. On 17/12/2018 at 15:48, Lord Henry said:

    Não funciona se for em outro resource. Os triggers só funcionam para scripts que estão no mesmo resource.

    Na verdade não, após adicionar o evento, se no addEventHandler for para root/getRootElement() o evento pode ser ligado por outro recurso, caso esteja como resourceRoot/getResourceRoot(), o evento só pode ser utilizado dentro do recurso. 

    • Like 1
×
×
  • Create New...