-
Posts
3,875 -
Joined
-
Days Won
67
Everything posted by DNL291
-
guiCreateWindow guiCreateLabel guiCreateEdit guiCreateButton Verifica no lado server se o jogador está logado. No client use o evento onClientGUIClick, chame uma função que verifica se a senha da conta está correta (getAccount) e use setAccountPassword pra definir a nova senha. Sobre as contas inativas, você pode fazer o seguinte: Verificar a data do último login e comparar com o dia atual. Você pode usar Timestamp pra isso; aqui um tutorial. Aí você pode escolher um intervalo de tempo para executar uma função que faria uma varredura em todas as contas, procurando por inativas. Ou senão: Quando o jogador sair da conta, aciona um tempo, que se atingido antes do jogador logar, marca essa conta como inativa e manda para o painel.
-
No site community.multitheftauto.com tem vários resources desse tipo. Basta você baixar algum e ver como ele funciona e editá-lo se quiser. Se preferir criar do zero, terá que aprender Lua ou pagar alguém pelo script.
-
Qual o problema exatamente? O calculo da largura pelo que vi está correto. Única coisa que me deixou confuso foi isto: if oxygen < 1000 or isElementInWater (player) then Não entendi o porque de não mostrar a barra se tiver cheia. E se tiver com a barra cheia verificar apenas se o jogador está na água. A lógica não seria apenas verificar se o jogador está na água ?
-
Replace it with: local textureString = getAccountData(account, "Clothessaver:Texture") or "" local modelString = getAccountData(account, "Clothessaver:Model") or "" At line 29 and 30.
-
I would say it's the 'bottom' argument in dxDrawText function which is wrong.
-
https://wiki.multitheftauto.com/wiki/SetDevelopmentMode setDevelopmentMode( false )
-
Try calling the exported function createEditBox after the dxDrawImage function.
-
function count() local ge = getPlayerTeam(getLocalPlayer()) if ge and getTeamName(ge) == "Criminals" then dxDrawText(countPlayersInTeam(ge), SX*1.295, SY*0.365, SX*0.38, SY*0.5, tocolor(255, 255, 255, 255), 2.00, "bankgothic", "center", "center", false, false, true) end end
-
Não tenho tanta experiência com SQL, mas seu código tem vários erros. Tente isto: function conectado () db = dbConnect( "sqlite","bancodedados.db" ) if db then dbExec(db, "CREATE TABLE IF NOT EXISTS dadoplayer ( id INT, nomejogador TEXT, dinheiro INT )" ) else outputChatBox("O banco de dados não pôde ser conectado!") end end addEventHandler( "onResourceStart", resourceRoot,conectado) function inserirdados (source,cmd) local name = getPlayerName(source) local dinheiro = getPlayerMoney(source) local id = math.random(1,9999) outputChatBox("PlayerName: "..name.."; Money: "..tostring(dinheiro).."; ID: "..tostring(id)) local g_id = dbPoll( dbQuery( db, "SELECT id FROM dadoplayer WHERE nomejogador=?", name )[1]["id"] ), - 1 ) if tonumber(g_id) then dbExec(db, "UPDATE dadoplayer SET id=?, dinheiro=? WHERE nomejogador=?", id,dinheiro,name ) else dbExec(db, "INSERT INTO `dadoplayer` (`id`, `nomejogador`, `dinheiro`) VALUES(?,?,?)", id,name,dinheiro ) end end addCommandHandler( "salvar", inserirdados) function carregar( nome ) local q = dbQuery(db, "SELECT * FROM dadoplayer WHERE nomejogador=?", tostring(nome))[1] givePlayerMoney(getPlayerFromName(nome), tonumber(q["dinheiro"])) outputChatBox("ID: ".. tostring(q["id"] or false).." Dinheiro: ".. tostring(q["dinheiro"] or false)) end function loaddata(p) carregar( getPlayerName(p) ) end addCommandHandler("carrega", loaddata) Veja o que mostra no chat. Note que o salvamento é baseado no nome do jogador, então, evite usar isso no servidor, em vez disso, você pode salvar usando a conta.
-
Eu fiz um que usa esse shader: https://community.multitheftauto.com/ind ... ls&id=8466 É mais realista porque não fica por cima de certas coisas da tela.
-
Pensei que tinha sido um equivoco, então foi eu que entendi errado . BeYourself: De nada.
-
Fiz um exemplo pra mover um retângulo com um texto nele, dá uma olhada no código abaixo pra ver como funciona. Pode ser que tenha pequenos erros, até porque escrevi direto, sem testar. local sw, sh = guiGetScreenSize() local g_dx = {} local offset = 0 -- Se não quiser encostado no canto direito só aumentar g_dx.width, g_dx.height = 250, 300 -- Largura e altura do retângulo-dx g_dx.from = { sw - (g_dx.width + offset), 0 } g_dx.to = { (sw - g_dx.width)/2, (sh - g_dx.height)/2 } -- mover para o centro da tela -- g_dx.left, g_dx.top = g_dx.from[1], g_dx.from[2] -- Mostrar o retângulo e o texto a cada frame addEventHandler("onClientRender", root, drawDX) addCommandHandler( "moverdx", function() if g_dx.startTime then return end; g_dx.startTime = getTickCount() g_dx.endTime = g_dx.startTime + 1000 -- Aqui você define o tempo pra animação addEventHandler("onClientRender", root, renderAnimation) end ) function renderAnimation() local now = getTickCount() local elapsedTime = now - g_dx.startTime local duration = g_dx.endTime - g_dx.startTime g_dx.left, g_dx.top = interpolateBetween(g_dx.from[1],g_dx.from[2],0, g_dx.to[1],g_dx.to[2],0, progress, "InQuad") -- Quando o tempo para a animação acabar, -- não será mais executada essa função if (now > g_dx.endTime) then removeEventHandler("onClientRender", root, renderAnimation) g_dx.startTime = nil end end function drawDX() dxDrawRectangle( g_dx.left, g_dx.top, g_dx.width, g_dx.height, tocolor(0,0,0, 180) ) dxDrawText( "Texto para animação DX", g_dx.left, g_dx.top, g_dx.left + g_dx.width, g_dx.top + dxGetFontHeight(2,"default-bold"), tocolor(230, 230, 230), 2, "default-bold", "center", "center" ) end Em g_dx.width e g_dx.height você vai definir as posições iniciais (que é a largura e altura) para o DX. Com o comando moverdx o código vai fazer o retângulo e o texto moverem-se para o centro da sua tela. Leia os comentários no código, que você vai entender mais. O argumento alpha só aceita números inteiros, mas acho que foi só um engano seu.
-
Faltou um parêntese no código do XeoN-, na função kickPlayer.
-
Acho estranho apenas não executar o código e não ter erros no debug, sendo que getElementInterior que não funcionou (já que você colocou um interior manualmente e funcionou). Imagino que seja realmente source que não é o jogador. Tem certeza que usou o comando debugscript 3? Sempre que se deparar com erros no script, use outputChatBox/outputDebugString até encontrar o que está errado.
-
Você recebe algum erro no debug? Certifique-se que getElementInterior(source) esteja retornando o valor correto.
-
Tente verificando se: thePlayer == localPlayer Assim: function markerhit6 (thePlayer, dim) -- 'dim' verifica com um valor booleano se a dimensão da marca é a mesma que a do jogador if thePlayer == localPlayer then guiSetVisible(ShopWindow6, true) showCursor(true) end end addEventHandler("onClientMarkerHit", weaponmarker6, markerhit6)
-
engineLoadTXD and engineImportTXD must be called before. Also, engineLoadTXD and engineLoadDFF has only the first argument. local state addEventHandler( "onClientResourceStart", resourceRoot, function() replaceTexture() state = true end ) function replaceTexture() engineImportTXD( engineLoadTXD("vgncarshade1.txd"), 3458 ) engineReplaceModel( engineLoadDFF("vgncarshade1.dff"), 3458 ) end bindKey( 'F3', 'down', function( ) if state then engineRestoreModel(3458) else replaceTexture() end outputChatBox( '#ffcc00[MSG]: #c0c0c0Road texture '..(state and 'disabled' or 'enabled')..'!', 255,255,255,true ) state = not state end ) Try it.
-
Try this: local state = false bindKey( 'F3', 'down', function( ) state = not state local value = _G[ "engine" .. (state and "RestoreModel" or "LoadTXD") ]( (state and 3458 or 'vgncarshade1.txd'), not state and 3458 ) if isElement(value) then engineImportTXD( value, 3458 ) end outputChatBox( '#ffcc00[MSG]: #c0c0c0Road texture '.. (state and "disabled" or "enabled")..'!', 255,255,255,true ) end )
-
Isso mesmo. Sobre a definição do parâmetro, preste atenção quando for nomeá-lo como source. Por que essa é uma variável oculta do MTA. O problema eventual seria um conflito entre esse parâmetro e a fonte do evento - o elemento no qual o evento foi originado. Só que aí no caso, não tem esse tipo de problema. Isso é só para eventos, não funções. E também, o parâmetro vai ser retornado como userdata. Mas não tem restrições, você vai definir o parâmetro com o que convém. Mas é sempre bom usar nomes adequados, como no caso: sourcePlayer, thePlayer, player...
-
If you mean to get the selected tab, use guiGetSelectedTab. But if you refer to the gridlist column, use guiGridListGetSelectedItem and guiGridListGetItemText to get the text.
-
Error: attempt to perform arithmetic on local 'z' (a boolean
DNL291 replied to MrBugsFive's topic in Programação em Lua
'z' deve estar retornando false. Troque: local x,y,z = getAccountData(account,"last_x"),getAccountData(account,"last_y"),getAccountData(account,"last_z") Por: local x,y,z = getAccountData(account,"last_x") or 0,getAccountData(account,"last_y") or 0,getAccountData(account,"last_z") or 0 -
Você não explicou esse ponto, sobre relativos, aqui. Só deixou o link do seu tutorial. Por isso que eu expliquei; e não acho que é a mesma coisa que você citou. De qualquer modo, como eu já disse, não vai funcionar com a função que ele tá tentando. Na própria página da função diz que é um argumento do tipo absoluto.
-
Você quer dizer posições relativas. Mas essa função não suporta esses valores, então respondendo sua pergunta, não tem como. Se quiser converter absolutos para relativos, faça o seguinte: Divida a posição X pela largura da tela (1º argumento de guiGetScreenSize()). E o mesmo com a posição Y dividindo pela altura da tela. Código: local screenW, screenH = guiGetScreenSize() local relX = X / screenW local relY = Y / screenH
-
Ótimo a iniciativa de estar liberando o seu trabalho, Stanley. Acho que todos podem tirar grande proveito, principalmente por ver todo o funcionamento e planejamento do gamemode. Vou dar uma olhada em tudo, assim que puder. Caso venha a ter uma necessidade de colaboração, estarei a disposição para ajudar sempre que puder .
-
If you never at least try to learn, you will never know how to use. See the XML functions and try: https://wiki.multitheftauto.com/wiki/Se ... _functions