DNL291

Other Languages Moderators
  • Content count

    1,795
  • Joined

  • Last visited

Community Reputation

50 Popular

About DNL291

  • Rank
    Portuguese Section Moderator
  • Birthday 06/05/94

Details

  • Gang
    SAF
  • Location
    Brazil
  • Interests
    Programming/Scripting

Recent Profile Visitors

1,969 profile views
  1. Bug ao duplicar resource(painel DX)

    Acho que a melhor solução na verdade não é criar outro resource, você pode fazer funcionar com um só script pra mais de uma gang fazer o uso. Quanto ao evento, você pode usar em vários scripts, mas precisa se certificar que nenhum evento irá afetar outro script desnecessariamente. Você pode usar localmente colocando resourceRoot como disse Banex ou com localPlayer.
  2. Help! add Função piscar farois

    Você pode usar createMarker com o tipo "corona" ou um shader que não é recomendável pra PC's fracos. Edit: Acho que você quis dizer pra piscar os faróis apenas, então use esta função: setVehicleOverrideLights
  3. HUD REPETINDO

    Você precisa ocultar o padrão. Use esta função pra isso: https://wiki.multitheftauto.com/wiki/SetPlayerHudComponentVisible Coloque na HUD nova se não tiver essa função; se já tiver, deve ser outro script reativando a original.
  4. Apagar string após caractere

    Só usar a função string.sub e string.find ( pra encontrar os índices dos caracteres ). Off: Me lembro de ter 'quebrado a cabeça' usando funções de string e executando com o programa Lua pra separar certos números de um arquivo de texto, enfim, acabei nem finalizando isso, mas funcionou e deu pra aprender algumas coisas já que eu também explorei umas funções Lua que não faz parte do MTA.
  5. Apagar string após caractere

    local s = "[aabbcc]12345" print( s:sub( 1, s:find("]")) ) -- > [aabbcc]
  6. Projeto RPG - Bem desenvolvido

    @Ninguém Já tem esse mesmo post aqui no fórum, por favor evite postar em outros tópicos. Caso contrário, tenha em mente que o post poderá ser removido sem nenhum aviso por infringir as regras.
  7. Ajuda XML

    Fiz um teste com o meu código e mudei algumas coisas; e funcionou: db = dbConnect( "sqlite", "testdb.db" ) addEventHandler( "onResourceStart", resourceRoot, function( ) dbExec( db, "CREATE TABLE IF NOT EXISTS players ( account TEXT, Level INT, Exp INT )" ) for _,p in pairs( getElementsByType"player" ) do local acc = getPlayerAccount(p) if not isGuestAccount(acc) then local d = db_query( "SELECT * FROM players WHERE account=? LIMIT 1", getAccountName(acc) ) if d and #d > 0 then setElementData( p, "level", d[1]["Level"] or 0 ) setElementData( p, "experience", d[1]["Exp"] or 0 ) else setElementData( p, "level", 0 ) setElementData( p, "experience", 0 ) end end end end ) addEventHandler( "onPlayerLogin", root, function ( _, acc ) local d = db_query( "SELECT * FROM players WHERE account=? LIMIT 1", getAccountName(acc) ) if d and #d > 0 then setElementData( source, "level", d[1]["Level"] or 0 ) setElementData( source, "experience", d[1]["Exp"] or 0 ) else setElementData( source, "level", 0 ) setElementData( source, "experience", 0 ) end end ) addEventHandler( "onPlayerQuit", root, function() savePlayerData( source ) end ) addEventHandler( "onPlayerLogout", root, function() savePlayerData( source ) end ) addEventHandler( "onResourceStop", resourceRoot, function() for _,p in pairs( getElementsByType"player" ) do savePlayerData( p ) end end ) function savePlayerData( p ) local acc = getPlayerAccount(p) if not isGuestAccount(acc) then local lvl = getElementData( p, "level" ) local exp = getElementData( p, "experience" ) local d = db_query( "SELECT * FROM players WHERE account=? LIMIT 1", getAccountName(acc) ) if d and #d > 0 then dbExec( db, "DELETE FROM players WHERE account=?", getAccountName(acc) ) end dbExec( db, "INSERT INTO `players` ( `account`, `Level`, `Exp` ) VALUES ( ?, ?, ? );", getAccountName(acc), lvl or 0, exp or 0 ) end end function db_query( ... ) return dbPoll( dbQuery ( db, ... ), - 1 ) end INSERT INTO vai inserir sempre um valor, ele só faz a função de atualizar se você excluir o valor antigo primeiro. Você pode substituir pelo UPDATE na linha 64 e colocar else para adicionar na tabela usando INSERT INTO caso os dados não constem na DB.
  8. [ ME AJUDA AQUI POR FAVOR ] PATENTE

    Como você não mostrou aqui o script, não vai dar pra ter ajudar muito, mas acredito que o script esteja redefinindo a patente quando o jogador morre.
  9. Ajuda XML

    Bom saber que conseguiu fazer funcionar. O código parece ter alguns trechos incorretos, mas se você não recebe nenhum erro então tá ótimo. Ainda assim, acho que seria bom pra você mesmo tentar aprender o básico das funções de banco de dados, meu código já tá aí, se tiver algum problema só pedir ajuda aqui.
  10. Ajuda XML

    Aqui no fórum tem um tutorial sobre as funções de banco de dados do MTA: Eu fiz um código que usa um banco de dados local pra armazenar o LV e XP dos jogadores: db = dbConnect( "sqlite", "server_data.db" ) addEventHandler( "onResourceStart", resourceRoot, function( ) dbExec( db, "CREATE TABLE IF NOT EXISTS players ( account TEXT, Level INT, Exp INT )" ) for _,p in pairs( getElementsByType"player" ) do local acc = getPlayerAccount(p) if not isGuestAccount(acc) then local d = db_query( "SELECT * FROM players WHERE account=? LIMIT 1", getAccountName(acc) ) if d then setElementData( p, "level", d[1]["Level"] or "false" ) setElementData( p, "exp", d[1]["Exp"] or "false" ) end end end end ) addEventHandler( "onPlayerLogin", root, function ( _, acc ) local d = db_query( "SELECT * FROM players WHERE account=? LIMIT 1", getAccountName(acc) ) if d then setElementData( source, "level", d[1]["Level"] or "false" ) setElementData( source, "exp", d[1]["Exp"] or "false" ) end end ) addEventHandler( "onPlayerQuit", root, function() savePlayerData( source ) end ) addEventHandler( "onPlayerLogout", root, function() savePlayerData( source ) end ) addEventHandler( "onResourceStop", resourceRoot, function() for _,p in pairs( getElementsByType"player" ) do savePlayerData( p ) end end ) function savePlayerData( p ) local acc = getPlayerAccount(p) if not isGuestAccount(acc) then local lvl = getElementData( p, "level" ) local exp = getElementData( p, "exp" ) dbExec( db, "UPDATE players SET Level=?, Exp=? WHERE account=?", lvl or 0, exp or 0, getAccountName(acc) ) end end function db_query( ... ) return dbPoll( dbQuery ( db, ... ), - 1 ) end Você pode ler o tutorial e aproveitar o código pra entender como funciona. Pra criar o arquivo .db é só abrir o seu notepad e criar um novo arquivo com a extensão .db. Edit: O código não foi testado.
  11. [Question]Using getSoundLength for timer

    Glad it worked, you're welcome.
  12. Ajuda XML

    Depure o código pra encontrar os erros. Faça uma verificação com os valores 'xml', 'node' e xmlNodeGetAttribute usando outputChatBox. Use também o comando /debugscript 3 e veja se mostra algum erro com o script. A propósito, eu usaria um banco de dados local nesse caso. Mesmo que não queira salvar nos dados da conta, pode salvar numa database local que é muito melhor que XML.
  13. [Question]Using getSoundLength for timer

    I still can't understand why you need a timer for it. Can you explain better, please? Because reading your quote, I assume you want the next song to play after the previous one finished, and the code I wrote works that way. Anyway, If you want to access the timer variable globally, just do as I did with 'playingSound' variable in my code above.
  14. [Question]Using getSoundLength for timer

    I'm not sure if that's what you mean, but I made this code and I haven't tested it. Here it is: addEvent("stoploginsound", true) local songs = { "sounds/1.mp3", "sounds/2.mp3", "sounds/3.mp3", "sounds/4.mp3", "sounds/5.mp3", "sounds/6.mp3", "sounds/7.mp3", "sounds/8.mp3" } local playingSound function PlayLoginSound() playRandomSong_orStop() addEventHandler( "onClientSoundStopped", resourceRoot, onSoundStopped ) addEventHandler( "stoploginsound", root, playRandomSong_orStop ) end addEventHandler ( "onClientResourceStart", resourceRoot, PlayLoginSound) function onSoundStopped ( reason ) if ( reason == "finished" ) then --outputChatBox ( "end of sound" ) destroyElement( source ) playRandomSong_orStop() end end function playRandomSong_orStop( stop ) if stop then destroyElement( playingSound ) playingSound = nil return end local rndSong = math.random( #songs ) playingSound = playSound( tostring(songs[rndSong]) ) --Play the song setSoundVolume(sound, 0.5) --Set the sound volume to 20% end -- server-side function PlayLogin() triggerClientEvent(source, "stoploginsound", source, true) end addEventHandler("onPlayerLogin", root, PlayLogin)
  15. Ajuda XML

    Você pode usar setAccountData e guardar na conta do jogador o nível e XP. Da mesma forma que está fazendo com XML, quando logar na conta, define os dados da conta em setElementData e assim que deslogar/sair do servidor/parar o resource salva na conta usando getElementData. Além do que o Lord Henry disse, também é mais fácil de usar.