Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    4,006
  • Joined

  • Last visited

  • Days Won

    184

Everything posted by Lord Henry

  1. Não use GMs. Ou então use a GM nativa do MTA. O gamemode "play"
  2. Amigo, isso aqui é fórum de Multi Theft Auto e não de TeamSpeak.
  3. Lembrando que o resource Freeroam cancela as animações quando vc tenta pular.
  4. Este exemplo apenas vai desabilitar os controles de pular, atirar e mirar do jogador. Não há relação com animação.
  5. Vc já deve ter resolvido. Mas caso alguém queira saber a resposta: Remover o chat não dá. MAS tem como desabilitar ele no momento em que o jogador entra no servidor. addEventHandler ("onPlayerJoin", root, function () showChat (source, false) end) Isso impede o chat de aparecer e a tecla T também deixa de funcionar. Vale lembrar que o jogador ainda pode reativar o chat usando showchat no Client Console do F8. Por ser um comando de cliente nativo do MTA, não há como bloquear esse comando.
  6. Olhando no código-fonte, parece que também funciona com trens, quadricíclo e Monster Trucks.
  7. Cara, as janelas são criadas client-side. Você deve usar guiSetVisible (janela, false) logo depois de criar a janela, assim ela não vai aparecer pra ninguém. Depois vc mostra ela novamente somente pros jogadores específicos usando triggers. Mas pra isso vc vai precisar mandar pro server, pra ele então mandar pros outros clientes. client-side: local x,y = guiGetScreenSize() -- Padrão de qualquer painel. guiPanel = {} -- Faz todos os elementos GUI dentro de 1 table pra economizar espaço na memória. function createPanel () -- ======(PAINEL FEITO DE QUALQUER JEITO SÓ DE EXEMPLO)====== guiPanel["window"] = guiCreateWindow (x/2 - 150, y/2 - 150, 300, 300, "Default Window", false) -- Janela qualquer. guiPanel["edit"] = guiCreateEdit (10, 20, 280, 30, "(Nick exato do outro player)", false, guiPanel["window"]) -- Campo de input pra botar o nick do outro jogador. (tem que incluir os códigos de cores, se tiver. No seu caso é uma gridList que funciona diferente disso) guiPanel["button1"] = guiCreateButton (300/2 - 50, 300 - 40, 100, 30, "CHAT", false, guiPanel["window"]) -- Botão qualquer, que serve pra ativar o trigger. guiSetVisible (guiPanel["window"], false) -- Oculta de cara a janela, pra ela não aparecer pra ninguém. -- O painel vai estar criado em todos os clientes, mas não estará visível em nenhum deles. end addEventHandler ("onClientResourceStart", resourceRoot, createPanel) addCommandHandler ("testar", function (cmd) -- Comando qualquer pra fazer o painel aparecer só no cliente que executar o comando. guiSetVisible (guiPanel["window"], true) showCursor (true) -- Mostra o cursor para poder interagir com o painel. end) function interactionPanel (button, state) if (button == "left" and state == "up") then -- Verificação de segurança padrão. if (source == guiPanel["button1"]) then -- Verificação de botão clicado padrão. local theOther = getPlayerFromName(guiGetText(guiPanel["edit"])) -- Recebe o jogador usando o nick informado no campo de input. if theOther then -- Se existe um jogador com o nick informado, então: guiSetVisible (guiPanel["window"], false) -- Oculta a janela principal. guiPanel[guiGetText(guiPanel["edit"])] = guiCreateWindow (x - 400, y/2 - 200, 400, 400, guiGetText(guiPanel["edit"]), false) -- Cria a janela com o nick do outro cara como título. triggerServerEvent ("ClientServerChat", theOther) -- Ativa este evento no servidor, usando o outro jogador como source. Isso vai criar a janela no outro cara também, com o nosso nick. else outputChatBox ("Player não encontrado, informe o nick exato junto com os códigos de cores.") end end end end addEventHandler ("onClientGUIClick", guiRoot, interactionPanel) -- (Aprendi esses dias aqui no fórum) guiRoot ativa para todos os elementos GUI deste resource. É mais leve do que root. function getUpdate (otherPlayer) -- Isso aqui executa no outro jogador. Nós somos o otherPlayer. guiPanel[getPlayerName(otherPlayer)] = guiCreateWindow (x - 400, y/2 - 200, 400, 400, getPlayerName(otherPlayer), false) -- Cria a janela com o nick do otherPlayer. end addEvent ("ServerClientChat", true) -- Recebe o painel do servidor. Normalmente junto com a mensagem e o jogador que está mandando a mensagem. addEventHandler ("ServerClientChat", resourceRoot, getUpdate) server-side: function transferData () -- Imagine isso apenas como uma ponte entre os clientes. Pode ser usado para tranferência das mensagens. triggerClientEvent (source, "ServerClientChat", client) -- source = o outro player | client = o localPlayer de onde veio este evento (nós) -- Ativa o evento "ServerClientChat" no cliente do source (outro cara) usando client (nós) como parâmetro de função. end addEvent ("ClientServerChat", true) -- Este evento é ativado no servidor pelo nosso cliente. addEventHandler ("ClientServerChat", resourceRoot, transferData)
  8. Postou na seção errada. Da próxima vez poste na seção Geral. Se sua host trocou de IP, vc deverá comprar novamente toplist para o IP novo.
  9. Bom saber. Não sabia que não funcionava em motos. Quais os tipos de veículo que funciona? Só carros?
  10. Tabelas pra colocar o quê nelas? Jogadores? Daria pra construir a tabela no server e dar triggerClientEvent só pros jogadores desta tabela: triggerClientEvent (playersTable, "openChatWindow", resourceRoot)
  11. Acho que não. Visto que já se passaram 2 dias, ele já viu e curtiu a resposta do @MaligNos e não voltou a perguntar.
  12. setPedAnimation O fato dos jogadores conseguirem andar com a animação rendido é um bug, onde no cliente do jogador rendido a animação não está executando mas pros outros jogadores ainda está.
  13. Não. Serve pra evitar de ativar a função novamente por clicar no parente junto.
  14. Já foi avisado para você que dúvidas referentes a scripts devem ser feitas na seção Programação em Lua. Você está criando tópicos na seção de Tutoriais em Geral, aqui você posta Tutoriais pra ajudar os demais membros. Por favor, respeite as regras do fórum.
  15. Quando usar o source, quando declarar o botão no evento e quando usar o parâmetro getPropagated (o false): addEventHandler ("onClientGUIClick", button01, functionQualquer) -- Sem o false e declarando o botão que deve chamar essa função. Esse caso acima é recomendado para botões únicos e que não tenham parentes. Quando vc só tem um único botão, é mais fácil declará-lo direto no evento ativador. Por não existir um parente desse botão, não precisa do false. Se existisse um parente (como uma janela) dai precisaria do false, caso contrário a função seria ativada novamente para esse parente. addEventHandler ("onClientGUIClick", button01, functionQualquer, false) -- Com o false e declarando o botão. Esse caso com o false é recomendado para casos de um botão único e que possui algum parente, como uma guiWindow. O false evita que a janela seja considerada ao clicar no botão. Ativando a função somente 1 vez por clique. addEventHandler ("onClientGUIClick", root, functionQualquer) -- Sem declarar o botão e sem o false. Nesse último caso é o mais comum e recomendado para a maioria dos casos onde uma janela possui vários botões. Você não declara um botão específico no evento, usa-se root para que a função ative em qualquer guiElement clicável. Dentro da função, vc usa source para saber qual elemento foi clicado e se ele é igual a tal botão, por exemplo: if (source == button01) then -- Faz algo. elseif (source == button02) then -- Faz outra coisa. end Em vez de usar vários addEventHandlers para cada botão, e uma função diferente para cada botão, usa-se a mesma função e o mesmo addEventHandler para todos, diferenciando o que cada um dos botões faz através das condições. Isso é questão de otimização. Vários eventos pequenos são mais pesados do que um único evento grande.
  16. O false é usado em funções onde você especifica o botão no eventHandler em vez de usar o source para verificar qual o guiElement que foi clicado. O false indica que a função não deve pegar os elementos parentes ao clicar nos elementos filhos. Por exemplo, se vc clica em um botão, na verdade está clicando na janela também. Se não tiver o false, ele vai ativar a função 2x (uma por clicar na janela e outra por clicar no botão). O false evita que ele considere a janela ao clicar no botão. Se vc não declarar o botão direto no addEventHandler e usar o source em vez disso, então não precisa do false, pois ele só vai passar caso a condição do source for verdadeira. Note: If the GUI Element attached to this event has a parent element, this event will be triggered once the parent element of the attached element is clicked too. You can set the parameter getPropagated to false in the call to addEventHandler to prevent this.
  17. Inicie o resource "voice". Fará com que somente jogadores próximos escutem.
  18. Vc criou um painel em DX, depois tentou criar botões em CEGUI e tentou deixá-los invisíveis com setElementAlpha quando na verdade deveria ter usado guiSetAlpha para isso. Faça o painel inteiro em CEGUI se vc não tem conhecimento suficiente pra fazer em DX. A função que cria os botões não foi chamada em nenhum momento.
  19. Primeiramente veja as regras do fórum aqui: Segundamente, poste o código na formatação correta. Use o botão <> para postar códigos.
  20. Ah, vc fez tudo em DX... é mais complicado. Os textos dos campos e tabela vc deve usar variáveis, então só passar essas variáveis pro server fazer a verificação.
  21. Modifique o painel Admin para ocultar a label do IP usando guiSetVisible. A label vai continuar lá, porém não estará visível. (Só mexa no painel admin se tiver certeza do que está fazendo)
  22. Não entendi direito. Mas acho que vc quis dizer isso: Supondo que seja isso, vc pode criar campos de input com guiCreateEdit.
  23. Pessoal acha que temos bola de cristal? Sem mais informações do erro não temos como adivinhar o que é.
×
×
  • Create New...