Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,981
  • Joined

  • Last visited

  • Days Won

    181

Everything posted by Lord Henry

  1. Descobri um jeito de corrigir, mas parece gambiarra. Eu substituí todos os \n do XML por underline ( _ ). E então no script, eu substituo o underline pelo \n. Já que o \n foi criado no próprio script, dai ele funciona. xmlACLValues[i][2] = xmlNodeGetAttribute(xmlNodes[i][k], "title") xmlACLValues[i][2] = string.gsub (xmlACLValues[i][2], "_", "\n")
  2. É porque a TAG padrão (no caso do BOPE) é a ACL Group "BOPE". Os membros precisam ter sempre ela para usar as viaturas, acessar base, etc. Quando alguém entra na corporação, começa como recruta. A ACL é de membro mas oq aparece no chat é Recruta. Quando o membro é promovido para outra patente, ele continua nessa ACL Group. Mas esse não é o problema. Só preciso que a quebra de linha funcione a partir do XML. Pois existem outros botões de patentes que precisam dela também.
  3. Olá senhores. Estou fazendo um script cujo menu GUI é construído a partir de informações de um arquivo.xml No arquivo.xml, estão os textos que devem aparecer nos botões e texto do painel. O problema é que em alguns botões, preciso colocar quebra de linha. (\n) [contra-barra + N) Se eu criar um botão dentro do script.lua e colocar um texto com quebra de linha, funciona normal. Porém se eu obter esse mesmo texto com quebra de linha do arquivo.xml, ele carrega \n no lugar da quebra de linha, como se o \n deixasse de funcionar. buttons[i][k] = guiCreateButton (250, 50*(k-1)-30, 150, 40, xmlACLValues[i][2], false, PainelTAG) O valor xmlACLValues[2] é igual a "recruta\n(membro)" e foi obtido do arquivo.xml. O botão é criado corretamente, porém a quebra de linha não funciona e o botão fica assim: Se eu setar o texto de dentro do script.lua, dai a quebra de linha funciona normal usando a mesma string "recruta\n(membro)". xmlACLValues[i][2] = "recruta\n(membro)" buttons[i][k] = guiCreateButton (250, 50*(k-1)-30, 150, 40, xmlACLValues[i][2], false, PainelTAG) Alguém sabe por que ocorre isso e como resolver? Já tentei usar tostring, string.gsub (parece tolice substituir um \n por outro \n mas eu tava na esperança de ele criar um \n novo que funcione.) Obs: Eu sei que é possível evitar isso entupindo de espaços até a segunda parte ir pra baixo, mas eu não queria fazer gambiarras. Arquivo.xml:
  4. Faz a barra movimentar para a direita na mesma quantidade que ela está diminuindo, desta forma passa a impressão que ela está diminuindo da esquerda para a direita. Ex: A barra tem tamanho de 400 pixels de largura quando está em 100% e está na posição 750:500. Quando ela diminuir pra 75%, deverá estar com 300 pixels de largura, ou seja, 100 pixels a menos que o original. Dai só mover a barra 100 pixels pra direita. É claro que, se você estiver fazendo o progresso da barra por frame, dai é diferente pois vc precisa obter a diferença de tamanhos entre cada frame para saber quanto deve movimentar a barra.
  5. Achei que divulgação de scripts deveriam ser feitos no Geral. (Área de Português fora das categorias) Perdão pelo equívoco. Mas dai aquela área geral serve para quê?
  6. É que se vc quer fazer por botão, vc precisa primeiro criar um painel. Esse painel deverá aparecer na tela do jogador quando vc encostar no marker. Porém é mais complexo pois envolve troca de dados entre servidor e cliente. E como você não tem conhecimento avançado, fica difícil explicar essa parte.
  7. Bom, fiz este outro exemplo com animações mais parecidas com aquele vídeo que você mostrou. O resto é com você. local x,y = guiGetScreenSize() visible = {} function fadeInRight1 () -- Função que faz surgir a Aba 1 a partir da Direita. local start = getTickCount() -- Recebe o tempo atual antes de começar a animação. function renderIn1 () -- Inicia a animação. local now = getTickCount() -- Recebe o tempo atual a cada frame. local endTime = start + 1500 -- Define o momento final da animação. (tempo de início + duração em milisegundos) local elapsedTime = now - start -- Tempo que já passou desde o inicio da animação. local duration = endTime - start -- Duração total da animação em milisegundos. local progress = elapsedTime / duration -- Progresso atual da animação (valor float de 0 até 1) local posX = interpolateBetween (x, 0, 0, x-295, 0, 0, progress, "OutBack", nil, nil, 1.5) -- Interpolação da animação. -- posição X inicial, nada, nada, posição X final, nada, nada, progresso atual, tipo de interpolação, facilitação da interpolação, amplitude da interpolação, ultrapassagem da interpolação. (esses 3 últimos são parametros opcionais que dependem de qual tipo de interpolação vc vai usar, são valores float.) dxDrawRectangle (posX, y/2-100, 320, 50, tocolor(0, 0, 0, 180), false) -- Desenha um retângulo na tela com tamanho, cor e posição definidas. dxDrawText ("Texto 1", posX+10, y/2-87, posX+10, y/2-87, tocolor(255, 255, 255, 255), 1.5, "default") -- Desenha um texto com tamanho, e posição definidas, o resto está padrão. end addEventHandler ("onClientRender", getRootElement(), renderIn1) -- Faz tudo isso a cada frame. end function fadeOutRight1 () -- Função que faz sair a Aba 1 pra Direita. local start = getTickCount() -- Tudo igual na anterior porém o movimento é oposto. removeEventHandler ("onClientRender", getRootElement(), renderIn1) function renderOut1 () local now = getTickCount() local endTime = start + 1500 local elapsedTime = now - start local duration = endTime - start local progress = elapsedTime / duration local posX = interpolateBetween (x-295, 0, 0, x, 0, 0, progress, "InBack", nil, nil, 1.5) dxDrawRectangle (posX, y/2-100, 320, 50, tocolor(0, 0, 0, 180), false) dxDrawText ("Texto 1", posX+10, y/2-87, posX+10, y/2-87, tocolor(255, 255, 255, 255), 1.5, "default") end addEventHandler ("onClientRender", getRootElement(), renderOut1) setTimer (function() removeEventHandler ("onClientRender", getRootElement(), renderOut1) -- Depois da animação, para de renderizar isso na tela, pois o retângulo não será mais visível. end, 1600, 1) end function fadeInRight2 () -- Função que faz surgir a Aba 2 a partir da Direita. local start = getTickCount() function renderIn2 () local now = getTickCount() local endTime = start + 1500 local elapsedTime = now - start local duration = endTime - start local progress = elapsedTime / duration local posX = interpolateBetween (x, 0, 0, x-295, 0, 0, progress, "OutBack", nil, nil, 1.5) dxDrawRectangle (posX, y/2-45, 320, 50, tocolor(0, 0, 0, 180), false) dxDrawText ("Texto 2", posX+10, y/2-32, posX+10, y/2-32, tocolor(255, 255, 255, 255), 1.5, "default") end addEventHandler ("onClientRender", getRootElement(), renderIn2) end function fadeOutRight2 () -- Função que faz sair a Aba 2 pra Direita. local start = getTickCount() removeEventHandler ("onClientRender", getRootElement(), renderIn2) function renderOut2 () local now = getTickCount() local endTime = start + 1500 local elapsedTime = now - start local duration = endTime - start local progress = elapsedTime / duration local posX = interpolateBetween (x-295, 0, 0, x, 0, 0, progress, "InBack", nil, nil, 1.5) dxDrawRectangle (posX, y/2-45, 320, 50, tocolor(0, 0, 0, 180), false) dxDrawText ("Texto 2", posX+10, y/2-32, posX+10, y/2-32, tocolor(255, 255, 255, 255), 1.5, "default") end addEventHandler ("onClientRender", getRootElement(), renderOut2) setTimer (function() removeEventHandler ("onClientRender", getRootElement(), renderOut2) end, 1600, 1) end function fadeInRight3 () -- Função que faz surgir a Aba 3 a partir da Direita. local start = getTickCount() function renderIn3 () local now = getTickCount() local endTime = start + 1500 local elapsedTime = now - start local duration = endTime - start local progress = elapsedTime / duration local posX = interpolateBetween (x, 0, 0, x-295, 0, 0, progress, "OutBack", nil, nil, 1.5) dxDrawRectangle (posX, y/2+10, 320, 50, tocolor(0, 0, 0, 180), false) dxDrawText ("Texto 3", posX+10, y/2+23, posX+10, y/2+23, tocolor(255, 255, 255, 255), 1.5, "default") end addEventHandler ("onClientRender", getRootElement(), renderIn3) setTimer (function() visible[localPlayer] = true end, 1600, 1) end function fadeOutRight3 () -- Função que faz sair a Aba 3 pra Direita. local start = getTickCount() removeEventHandler ("onClientRender", getRootElement(), renderIn3) function renderOut3 () local now = getTickCount() local endTime = start + 1500 local elapsedTime = now - start local duration = endTime - start local progress = elapsedTime / duration local posX = interpolateBetween (x-295, 0, 0, x, 0, 0, progress, "InBack", nil, nil, 1.5) dxDrawRectangle (posX, y/2+10, 320, 50, tocolor(0, 0, 0, 180), false) dxDrawText ("Texto 3", posX+10, y/2+23, posX+110, y/2+23, tocolor(255, 255, 255, 255), 1.5, "default") end addEventHandler ("onClientRender", getRootElement(), renderOut3) setTimer (function() removeEventHandler ("onClientRender", getRootElement(), renderOut3) visible[localPlayer] = false end, 1600, 1) end function drawMenu () if not visible[localPlayer] then fadeInRight1 () setTimer (fadeInRight2, 100, 1) setTimer (fadeInRight3, 200, 1) visible[localPlayer] = "waiting" elseif visible[localPlayer] == true then fadeOutRight1 () setTimer (fadeOutRight2, 100, 1) setTimer (fadeOutRight3, 200, 1) visible[localPlayer] = "waiting" end end bindKey ("U", "down", drawMenu) -- Tecla que mostra/oculta o painel.
  8. Não. Isso é só um exemplo de animação. Vc ainda vai ter que construir seu próprio painel, colocar os textos, botões, funções, etc.
  9. local x,y = guiGetScreenSize() visible = {} function fadeInCenter (pX, pY, theWidth, theHeight, red, green, blue, theAlpha, postGUI, theDuration, theType, thePeriod, theAmplitude, theOvershoot) local start = getTickCount() function renderIn () local now = getTickCount() local endTime = start + theDuration local elapsedTime = now - start local duration = endTime - start local progress = elapsedTime / duration local alpha, posX, posY = interpolateBetween (0, x/2, y/2, theAlpha, pX, pY, progress, theType, thePeriod, theAmplitude, theOvershoot) local width, height = interpolateBetween (0, 0, 0, theWidth, theHeight, 0, progress, theType, thePeriod, theAmplitude, theOvershoot) dxDrawRectangle (posX, posY, width, height, tocolor (red, green, blue, alpha), postGUI) dxDrawText ("TEXTO", x/2-50, posY+30, x/2+50, posY+50, tocolor(255, 255, 255, alpha), 1.5, "default", "center") setTimer (dxDrawRectangle, 100, 1, posX+5, posY+5, width-10, height-10, tocolor (red, green, blue, alpha), postGUI) setTimer (dxDrawRectangle, 200, 1, posX+10, posY+10, width-20, height-20, tocolor (red, green, blue, alpha), postGUI) visible[localPlayer] = true end addEventHandler ("onClientRender", getRootElement(), renderIn) end function fadeOutCenter (pX, pY, theWidth, theHeight, red, green, blue, theAlpha, postGUI, theDuration, theType, thePeriod, theAmplitude, theOvershoot) local start = getTickCount() removeEventHandler ("onClientRender", getRootElement(), renderIn) function renderOut () local now = getTickCount() local endTime = start + theDuration local elapsedTime = now - start local duration = endTime - start local progress = elapsedTime / duration local alpha, posX, posY = interpolateBetween (theAlpha, pX, pY, 0, x/2, y/2, progress, theType, thePeriod, theAmplitude, theOvershoot) local width, height = interpolateBetween (theWidth, theHeight, 0, 0, 0, 0, progress, theType, thePeriod, theAmplitude, theOvershoot) dxDrawRectangle (posX, posY, width, height, tocolor (red, green, blue, alpha), postGUI) dxDrawText ("TEXTO", x/2-50, posY+30, x/2+50, posY+50, tocolor(255, 255, 255, alpha), 1.5, "default", "center") setTimer (dxDrawRectangle, 100, 1, posX+5, posY+5, width-10, height-10, tocolor (red, green, blue, alpha), postGUI) setTimer (dxDrawRectangle, 200, 1, posX+10, posY+10, width-20, height-20, tocolor (red, green, blue, alpha), postGUI) end addEventHandler ("onClientRender", getRootElement(), renderOut) setTimer (function() removeEventHandler ("onClientRender", getRootElement(), renderOut) visible[localPlayer] = false end, theDuration+100, 1) end function drawMenu () if not visible[localPlayer] then fadeInCenter (x/2-150, y/2-150, 300, 300, 0, 0, 0, 90, false, 2000, "OutElastic", 0.5, 0.1) else fadeOutCenter (x/2-150, y/2-150, 300, 300, 0, 0, 0, 90, false, 1000, "InBack", 0, 0, 1.5) end end bindKey ("U", "down", drawMenu) -- Tecla que mostra/oculta o painel. Nesse exemplo fiz animação no Alpha, posição e na escala. Mas você pode fazer somente na posição como no vídeo. E sim, fazer essas animações é complexo mesmo. Obs: No exemplo eu coloquei todos os elementos dentro da função da animação, mas o correto é fazer cada elemento separado.
  10. Se você quer que o jogador seja colocado no time ao encostar no marker, faça assim: function Lenhador () LenhadorTeam = createTeam ("Lenhador", 0, 255, 0) end addEventHandler ("onResourceStart", resourceRoot, Lenhador) lenhadorMarker = createMarker () -- Aqui vc vai criar o marker no lugar específico, caso ainda não tenha criado um. function entrarLenhador (hitElement, matchingDimension) if hitElement and getElementType (hitElement) == "Player" then -- Se o elemento que encostou no marker for um jogador, então: setPlayerTeam (hitElement, LenhadorTeam) -- Coloca o jogador no time dos Lenhadores. outputChatBox ("Você agora é um lenhador.", hitElement) -- Avisa o jogador que ele agora está no time de lenhadores. end end addEventHandler ("onMarkerHit", lenhadorMarker, entraLenhador) -- Ativa essa função quando algum elemento colidir no marker de lenhador. function sairLenhador (previousAccount, currentAccount) if isElement (source) then -- Se o jogador que deslogou ainda existe, então: if getPlayerTeam (source) == LenhadorTeam then -- Se o jogador que deslogou está no time de lenhadores, então: setPlayerTeam (source, nil) -- Remove o jogador do time de lenhadores. outputChatBox ("Você parou de ser lenhador.", source) -- Avisa o jogador que ele não está mais no time de lenhadores. end end end addEventHandler ("onPlayerLogout", getRootElement(), sairLenhador) -- Ativa essa função quando algum jogador deslogar.
  11. Você precisa definir a coordenada onde vc quer que o blip apareça ou então definir um elemento para anexar o blip. Info: Os blips são ícones que aparecem no GPS dos jogadores marcando locais específicos. Todos os blips estão disponíveis aqui. Você pode criar um blip anexado a um elemento que já existe ou você pode criar um blip numa coordenada específica. Exemplo: local theBlip = createBlip (2494.5, -1672.2, 13.5, 15, 2, 255, 255, 255, 255, 1, 9999) -- Cria um blip de CJ na Grove Street. -- Posição X, Posição Y, Posição Z, ID do ícone, tamanho, cor Red, cor Green, cor Blue, Alpha, Prioridade, Distância máxima que pode ser visto.
  12. SetElementFrozen é para congelar ou descongelar um elemento, no caso jogador. Fazendo com que ele fique paralisado.
  13. Por acaso esse seu script é pra dar sempre exatamente $1000? Ou vc quer informar o valor da grana junto com o comando? Se vc quer dar sempre $1000, tente isso: function darDinheiro (theStaff, cmd, thePlayer) local accName = getAccountName (getPlayerAccount (theStaff)) -- recebe o seu login. local theTarget = getPlayerFromName (thePlayer) -- recebe o jogador cujo nick vc informou no comando. (o nick precisa ser exato incluindo as cores) if isObjectInACLGroup ("user."..accName, aclGetGroup ("Admin")) or isObjectInACLGroup ("user."..accName, aclGetGroup ("Console")) then if theTarget then -- Se foi encontrado um jogador com o nick informado, então: givePlayerMoney (theTarget, 1000) -- da $1000 ao jogador. outputChatBox ("Você deu $1000 ao jogador "..thePlayer, theStaff, 255, 255, 255, true) else outputChatBox ("Jogador inválido.", theStaff, 255, 0, 0) end else outputChatBox ("Acesso negado a este comando.", theStaff, 255, 0, 0) end end addCommandHandler ("dinheiro", darDinheiro) -- /dinheiro meuNick123 Se vc quer informar o valor do dinheiro junto com o comando, tente isso: function darDinheiro (theStaff, cmd, thePlayer, valor) local accName = getAccountName (getPlayerAccount (theStaff)) -- recebe o seu login. local theTarget = getPlayerFromName (thePlayer) -- recebe o jogador cujo nick vc informou no comando. (o nick precisa ser exato incluindo as cores) if isObjectInACLGroup ("user."..accName, aclGetGroup ("Admin")) or isObjectInACLGroup ("user."..accName, aclGetGroup ("Console")) then if theTarget then -- Se foi encontrado um jogador com o nick informado, então: if valor then giveMoney (theTarget, tonumber(valor)) -- da o valor ao jogador convertido em número. outputChatBox ("Você deu $"..valor.." ao jogador "..thePlayer, theStaff, 255, 255, 255, true) else outputChatBox ("Valor inválido.", theStaff, 255, 0, 0) end else outputChatBox ("Jogador inválido.", theStaff, 255, 0, 0) end else outputChatBox ("Acesso negado a este comando.", theStaff, 255, 0, 0) end end addCommandHandler ("dinheiro", darDinheiro) -- /dinheiro meuNick123 1000
  14. Você deveria estudar mais a Wiki antes de sair perguntando sobre qualquer coisa. Congelar o jogador: SetElementFrozen Ativar função ao colidir no marker: onMarkerHit Colocar tempo: setTimer Criar um blip (marca) no GPS: createBlip
  15. Outra coisa que vc pode fazer é salvar a coordenada numa string com vírgulas, depois converter a string em 3 valores numéricos. (usando a vírgula como separador) É possível salvar dados ocultos nos itens da lista, para fazer isso use a função GuiGridListSetItemData e GuiGridListGetItemData. Dai vc salva uma coordenada como string, por exemplo: "10.234,51.514,10.2" Dai pra transformar essa string em 3 valores numéricos, você primeiro deve obter uma table com os 3 valores usando a função Split, nela vc informa a vírgula como caractere separador e ele irá retornar os 3 valores separados. 10.234 51.514 10.2 Dai é só converter para número (pois ainda serão strings) e pronto. (use tonumber para fazer isso)
  16. Favor postar o código com a ferramenta <> do fórum. Para obter o item selecionado na lista, use a função GuiGridListGetSelectedItem e para criar o blip use a função CreateBlip.
  17. Dúvidas quanto ao script vc deveria ter postado na área de Programação em Lua. Voltando ao seu problema, ele está dizendo que não foi possível encontrar o seu script gui.lua, verifique o seu meta.xml. Se estiver lá e continuar dando erro, poste aqui o meta.xml utilizando a ferramenta <> do fórum.
  18. Postou no lugar errado, colega. Esta sessão do fórum é destinada somente para dúvidas quanto a programação de scripts.
  19. O que vc já tentou fazer? Vc vai precisar das funções de onPlayerLogin, onPlayerWasted, setElementPosition, setElementModel, giveWeapon, setPedArmour. Além de guiCreateButton, onClientGUIClick, triggerServerEvent.
  20. Qual animação vc está tentando fazer?
  21. Não use acentos nos nomes, exceto se for uma string. A senha do portão fica no pass?
  22. Tente aumentar a prioridade de download do seu resource de área verde, colocando isso no meta.xml dele: <download_priority_group>1</download_priority_group>
  23. Hoje em dia ninguém faz painéis com animações, pois isso consome muito processamento do servidor. Mas caso você não se importe com lag e queira fazer mesmo assim, use isso: InterpolateBetween
  24. Por favor, não reviva os tópicos dos outros com assuntos sem relação com o tópico.
×
×
  • Create New...