-
Posts
3,980 -
Joined
-
Last visited
-
Days Won
181
Everything posted by Lord Henry
-
Qual o resource em questão? Qual tecla será usada para abrir esse painel GUI? Isso deve funcionar em qualquer lugar? Ou somente em lugares específicos? (dentro de lanchonetes por exemplo) Você chegou a abrir o código do resource para estudar como ele funciona? (Se o resource estiver compilado, você não tem permissão para alterá-lo)
-
Favor não usar formatação de fonte em tamanhos muito grandes, ninguém aqui é cego e isso pode ser considerado como Spam. Voltando a sua dúvida, sugiro que leia a Wiki na parte de GuiCreateWindow, já que vc precisa primeiramente criar uma janela GUI, com os botões e textos nela, depois vc configura uma tecla para fazer essa janela aparecer na tela. Fiz este exemplo para mostrar algumas funções principais, como o guiCreateWindow, guiCreateLabel, guiCreateButton, guiSetVisible, showCursor e onClientGUIClick function criarPainel () ----------------- CRIA A JANELA ------------------------------------------------------------------ janelaPrincipal = guiCreateWindow (0.4, 0.4, 0.2, 0.2, "Janela Qualquer", true) -- Cria a janela. mensagem = guiCreateLabel (0.05, 0.2, 1, 0.2, "Texto de informação qualquer aqui.\nOutra linha de informação aqui.", true, janelaPrincipal) -- Cria o texto na janela. botaoFechar = guiCreateButton (0.4, 0.7, 0.2, 0.2, "FECHAR", true, janelaPrincipal) -- Cria o botão na janela. guiSetVisible (janelaPrincipal, false) -- Oculta a janela depois dela ser criada, para que ela não apareça ao iniciar o resource. ------------- MOSTRA A JANELA (pela tecla K) ----------------------------------------------------- function mostraPainel (key, keystate) guiSetVisible (janelaPrincipal, true) -- Torna o painel visivel. showCursor (true) -- Mostra o ponteiro do mouse na tela. end bindKey ("k", "down", mostraPainel) -- Executa a função mostraPainel ao apertar a tecla K. ----------- OCULTA A JANELA (clicando no botão da janela) ---------------------------------------- function ocultaPainel (button, state) if button == "left" then -- Se o botão do mouse que clicou for o botão esquerdo, então: guiSetVisible (janelaPrincipal, false) -- Torna o painel invisivel. showCursor (false) -- Oculta o ponteiro do mouse. end end addEventHandler ("onClientGUIClick", botaoFechar, ocultaPainel, false) -- Executa a função ocultaPainel ao clicar no botaoFechar. end addEventHandler ("onClientResourceStart", getRootElement(), criarPainel) -- Faz isso tudo ao iniciar o resource no jogador. Sugiro que leia cada link mencionado acima para saber como funciona cada um. Deixei comentários pelo código para ficar mais fácil de entender.
-
Já que vc está começando a estudar a linguagem Lua do MTA, sugiro que leia a Wiki: https://wiki.multitheftauto.com/wiki/PT-BR/Introdução_ao_Scripting Você precisa ser administrador do seu servidor para poder mexer nele. Ou então vc pode ir no Console (aquela espécie de Prompt de Comando que aparece quando vc liga seu servidor) e mandar o comando refresh nele. (não se usa a / ali) e depois usar start darGrana Mas de qualquer forma, você vai precisar ter acesso admin no seu servidor para fazer as coisas nele.
-
Não use a função givePlayerMoney no lado Client, pois vai setar uma "grana falsa" na sua tela, mas no servidor vc vai continuar tendo a grana de antes. E isso não vai funcionar <resource src="ModsEmDesenvolvimento" startup="1" protected="0" /> Pois você deve colocar o nome do resource e não o nome da pasta principal. Faça assim: Na sua pasta [ModsEmDesenvolvimento], crie outra pasta dentro dela com o nome darGrana. (pode ser outro, é um exemplo) O nome desta sub-pasta será o nome do seu resource. Dentro da pasta darGrana, crie 2 arquivos.txt vazios. Depois renomeie 1 deles para server.lua (pode ser qualquer coisa.lua) e o outro para meta.xml (tem q ser exatamente assim) Abra o meta.xml e cole isso: (oq importa é a linha do script, mas é importante vc já saber colocar as infos no seu resource.) <meta> <info author="Leonardo" version="1.0.0" name="Dar dinheiro" description="Dá $500 para si mesmo ao usar o comando /grana." type="script" ></info> <script src="server.lua" type="server" /> </meta> Salve e feche o meta.xml, depois abra o server.lua e cole isso: function receberGrana (thePlayer) givePlayerMoney (thePlayer, 500) end addCommandHandler ("grana", receberGrana) Salve e feche o server.lua. Vá no seu servidor, e use /refresh. Abra o painel admin, na aba resources, dê refresh na lista de resources e procure por darGrana. Selecione-o e clique em Start. Feche o painel admin, e use o comando /grana E receba os $500 que vc programou no script. Não se esqueça de colocar o seu resource para iniciar automaticamente ao ligar o server. Coloque isso no mtaserver.conf: <resource src="darGrana" startup="1" protected="0" /> Para verificar se há problemas em seu script, deixe o /debugscript 3 ativado. Qualquer dúvida, volte a perguntar aqui mesmo. Espero ter ajudado, boa sorte.
-
trocar para a versão atual do mta ou ver se ainda funciona
Lord Henry replied to Tiu_Trump's topic in Programação em Lua
Exato. Só ir no Console e digitar upgrade nomeDoResource -
trocar para a versão atual do mta ou ver se ainda funciona
Lord Henry replied to Tiu_Trump's topic in Programação em Lua
Boa sorte. -
De nada. Que bom que lhes ajudei.
-
Não tenho conhecimento com shaders. Já tentei aprender aqui mas o pessoal (pelo menos da área internacional) não quis me dar uma luz. Se tiver dúvidas quanto a programação Lua, dai posso te ajudar.
-
Pesquise mais na Wiki antes de perguntar. Está tudo em onPlayerWasted. addEventHandler ("onPlayerWasted", getRootElement(), function (ammo, attacker, weapon, bodypart) if (attacker) and getElementType (attacker) == "player" then local wanted = getPlayerWantedLevel (attacker) if wanted < 6 then setPlayerWantedLevel (attacker, wanted + 1) end elseif (attacker) and getElementType (attacker) == "vehicle" then local driver = getVehicleController (attacker) if driver and getElementType (driver) == "player" then local wanted = getPlayerWantedLevel (driver) if wanted < 6 then setPlayerWantedLevel (driver, wanted + 1) end end end end) De nada.
- 1 reply
-
- 1
-
Resumindo todas as suas perguntas: Salvar dados entre as sessões dos jogadores, evitando que percam tudo ao deslogar. Depende do script, e da quantidade de acessos simultâneos que é feito no banco de dados. Acessar um banco de dados não é tão leve assim. O uso de banco de dados se deve com o objetivo de salvar dados entre as sessões, não para poupar processamento. É claro que, é muito mais viável e mais leve você salvar em um banco de dados do que ficar criando mil variáveis no seu script. Imagine salvar cada coordenada dos jogadores em uma variável do seu script, cada jogador iria consumir a memória de 3 variáveis só para salvar sua posição. Sim. Um grande exemplo disso é o sistema de casas. A staff cria as casas no servidor e elas ficam lá mesmo se o servidor for reiniciado. Para salvar as posições e configurações de cada casa, o script salva tudo no banco de dados. Ao ser iniciado, o script carrega os dados novamente e já cria as casas nas posições e configurações salvas. Além é claro, de salvar os proprietários das casas, para não ser necessário comprar novamente a casa após reiniciar o resource.
-
Isso poderia ter sido perguntado na sessão de scripting. Um banco de dados é onde ficam salvos diversos tipos de dados que são usados entre as sessões dos jogadores e do servidor, isto significa que mesmo se o jogador relogar no servidor ou até mesmo o servidor reiniciar, os dados salvos no banco de dados não são perdidos. (se o script que salvou lá foi feito corretamente). O MTA já cria 2 bancos de dados padrão quando vc cria seu servidor, são eles: internal.db - Onde são salvos todos os dados das contas dos jogadores, login, senha, grana do bolso, posição do jogador quando deslogou, vida, colete, skin, armas, munição, etc. registry.db - Onde são salvos todos os dados que são utilizados pelos resources, como por exemplo melhores pontuações das corridas (race gamemode), proprietários das casas, dados bancários dos jogadores, saldo bancário dos jogadores, carros comprados pelos jogadores, roupas compradas pelos jogadores, empresas adquiridas pelos jogadores, etc. Estes dois banco de dados estão na pasta deathmatch do seu servidor, estão na linguagem SQLite. Você ainda pode criar outros bancos de dados, para serem usados pelos resources, mas na minha opinião isso não é recomendável, uma vez que vc usaria MySQL, que é mais complexo e exige certos cuidados de acesso e domínio, mas alguns servidores profissionais precisam fazer assim pois fizeram os bancos de dados ficarem fora do servidor em outro IP por segurança, dai é necessário ter bancos de dados externos. Para salvar alguma coisa na conta do jogador, isto é, no internal.db, você usa setAccountData, e para recuperar esses dados depois, use getAccountData. Para salvar alguma coisa no registry.db, é um pouco mais complicado, uma vez que vc vai precisar criar uma tabela nova para cada resource. Por exemplo, vc acabou de criar um resource de ranking por kills/deaths e você deseja salvar esse ranking no banco de dados para que ao reiniciar o resource ou o servidor, o ranking não seja perdido. Para isso vc vai precisar primeiramente criar uma tabela no banco de dados registry.db, essa tabela será acessada pelo resource, que irá salvar os dados dele lá. Para fazer qualquer coisa neste banco de dados (criar tabelas, inserir/alterar/remover valores em determinada tabela, deletar determinada tabela, inserir colunas em determinada tabela, etc) vc vai precisar usar isso: executeSQLQuery. (aqui, será necessário conhecimento em SQLite para fazer isso, mas é mais fácil do que aprender uma linguagem de programação nova, pois suas opções e sintaxes são menores do que uma linguagem inteira de programação, você não vai inventar nenhum sistema novo aqui, apenas criar e gerenciar tabelas e dados.) Criar tabela nova no banco de dados: (o Caps Lock não é uma regra, mas é melhor para entender oq é código e oq é nome) [Os seguintes códigos só funcionam server-side] executeSQLQuery ("CREATE TABLE IF NOT EXISTS nomedatabela (nomecoluna1 TEXT, nomecoluna2 REAL, nomecoluna3 INTEGER)") TEXT = Valores desta coluna serão textos. Podem ter símbolos, números e espaços. REAL = Valores desta coluna serão numéricos reais. (números com vírgula, positivos, negativos e 0.0) INTEGER = Valores desta coluna serão numéricos inteiros. (positivos, negativos e 0) (não existe tipo BOOLEAN, use TEXT e insira valor "false" ou "true") (existe valor NULL, é diferente de vazio, mas NULL não é um tipo de dado e sim um valor nulo. Você pode atribuir valor NULL a qualquer célula.) Deletar tabela do banco de dados: executeSQLQuery ("DROP TABLE nomedatabela") Todas as linhas, colunas, células e valores desta tabela são deletados junto. Deletar linhas da tabela: (as células não ficarão NULL) executeSQLQuery ("DELETE FROM nomedatabela WHERE colunaespecífica=?", valorDaCelulaEspecifica) O ? indica que o valor está após a declaração do SQL. Você poderia colocar o valor direto no lugar do ?. Mas por alguma razão, as vezes isso gera erro. Além disso, se o valor da célula estiver em uma variável no seu script, você não pode declarar a variável no lugar do ?. Ali só pode ser o valor direto, pois a declaração SQL inteira se trata de uma string. Por isso o uso do ?, que está recebendo o valor da variável que está depois da vírgula. Obs: Para verificar se uma célula tem valor nulo, não se usa os operadores lógicos de ==, <= >=. Para isso, usa-se IS NULL ou IS NOT NULL. Ex: executeSQLQuery ("DELETE nomecoluna1,nomecoluna2 FROM nomedatabela WHERE nomecoluna3 IS NULL") Isso vai deletar todas as células da linha onde a coluna 3 tem uma célula de valor NULL. Se a coluna 3 não tiver nenhuma célula de valor NULL, nada acontece. Inserir nova linha de valores: (ele vai criar automaticamente uma nova linha com novas células) executeSQLQuery ("INSERT INTO nomedatabela(nomecoluna1,nomecoluna2,nomecoluna3) VALUES(?,?,?)", valorCelulaColuna1, valorCelulaColuna2, valorCelulaColuna3) Neste caso, ele está inserindo 3 novos valores, cada valor em uma coluna. Se você não declarar os nomes das colunas, ele vai preencher na ordem das colunas automaticamente. Você pode deixar de declarar uma coluna se não quiser atribuir valor na célula daquela coluna. Se o tipo de valor da variável não for do tipo de dado daquela coluna, dará erro. Atualizar valores de células que já existem em uma tabela: (não é possível alterar os tipos de valores, é necessário editar o tipo da coluna se quiser fazer isso) executeSQLQuery ("UPDATE nomedatabela SET nomecoluna2=?,nomecoluna3=? WHERE nomecoluna1=?", valorCelulaColuna2, valorCelulaColuna3, valorCelulaColuna1) No caso acima, ele vai atualizar as células das colunas 2 e 3 onde o valor da célula da coluna 1 for igual ao valor de valorColunaCelula1. OBS: Nada impede que você coloque as primeiras variáveis junto à declaração SQL, mas para fazer isso você deve "cortar" a string, inserir as variáveis e depois continuar a string, Ex: executeSQLQuery ("UPDATE nomedatabela SET nomecoluna2= '".. valorCelulaColuna2 .."',nomecoluna3='".. valorCelulaColuna2 .."' WHERE nomecoluna1=?", valorCelulaColuna1) Lembrando que o valor destas variáveis também são strings na declaração, portanto use aspas simples antes e depois de cada corte para transformar os valores em string. Os dois pontos (..) significam que estes valores fazem parte do argumento SQL. Da mesma forma, se vc usar "1" .. "1", será igual a "11". (Por isso acho muito mais fácil deixar tudo ? na declaração SQL e colocar as variáveis todas após a string.) Selecionar determinadas células da tabela: (usado geralmente para obter os valores destas células para usar no script, você pode selecionar somente 1 célula ou várias) executeSQLQuery ("SELECT nomecoluna1,nomecoluna2 FROM nomedatabela WHERE nomecoluna3=?", valorCelulaColuna3) Neste exemplo, ele vai selecionar a célula da coluna 1 e a célula da coluna 2, na linha onde a célula da coluna 3 for igual a valorCelulaColuna3. Alterar a tabela (adicionar coluna nova) [SQLite não suporta deletar coluna nem editar tipo de coluna] executeSQLQuery ("ALTER TABLE nomedatabela ADD nomecoluna4 REAL") Devido a limitações do SQLite, ALTER TABLE não pode ser usado para deletar uma coluna nem para editar seu tipo. Para fazer isso é necessário recriar a tabela inteira com as novas alterações. No exemplo acima, ele vai adicionar uma nova coluna chamada "nomecoluna4". Fiz um código com vários testes de banco de dados. Cada comando faz alguma coisa. Espero ter ajudado. Boa sorte.
-
Acho que pelo menos 1 estação em cada uma das 3 cidades principais já basta. Mas se vc já é mapper, não sei qual a dificuldade que vc está tendo. Vc está querendo criar um objeto novo? No caso a estação?
-
Bom, vc postou isso na sessão Geral. Acho que está certo sim. A propósito, que tipo de mapa vc quer que o mapper faça? Base, condomínio, ruas, local específico? Outra coisa, dependendo do mapper, ele vai querer te cobrar por hora de serviço. Edit: Vi que vc mencionou o sistema BRT, poderia dar mais detalhes sobre como ele deve ser?
-
ME AJUDE COM O VOICE LOCAL
Lord Henry replied to ramon0012's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Raramente alguém usa esse recurso, pois ele causa lag absurdo no servidor. Geralmente o pessoal usa rede social externa para contato por voz, como Discord, RaidCall, TeamSpeak ou Skype. A princípio não sei se é possível aumentar o volume do sistema de voz nativa do MTA, tente aumentar o volume de captação do seu microfone. -
Aprendendo a como montar um gang war
Lord Henry replied to Dasareas's topic in Portuguese / Português
Por enquanto não estou vendendo meus resources. Mas quem sabe no futuro. -
Como remover a hud original e resolver bug chat?
Lord Henry replied to R1S1NG's topic in Programação em Lua
Use setPlayerHudComponentVisible para fazer isso. Os scripts de HUDs modificados geralmente vem com uma função que mostra/oculta quando vc aperta F10, pois quando o mapa está sendo mostrado, tanto a HUD original quando a HUD modificada devem ser ocultados, e quando apertar F10 novamente para desaparecer o mapa, a HUD original vai reaparecer, é nesse momento q vc deve ter uma função para ocultar a HUD original novamente e mostrar a HUD modificada. -
@BobGrik, favor não reviver os tópicos que são muito antigos.
- 5 replies
-
- apresentacao
- aprendendo-lua
-
(and 1 more)
Tagged with:
-
Parece ser erro de conexão, e não de servidor ou cliente. Verifique sua internet. Certifique-se de que o MTA possui permissão no firewall para acessar a rede.
-
Não é possível fazer isso. Você pode compilar o script que muda a textura, mas nada impede a pessoa de roubar seu arquivo.txd e colocar em outro script. Além disso, os arquivos .txd pertencem a RockStar, você não pode ter direitos autorais sobre este arquivo. O mesmo vale para os arquivos.dff
-
A única relação do Freeroam com as TAGs é que o Freeroam também gerencia as mensagens do chat, ou seja, tem influência nas TAGs que aparecem junto com os nomes do jogadores. É normal vc ter problemas com o Freeroam quando tenta mexer em algo relacionado ao chat.
-
Se os grupos vc se refere aos times que aparecem no TAB, dai faça assim: function playerNasceu (posX, posY, posZ, spawnRotation, theTeam) if (theTeam) then -- Se o jogador que spawnar estiver em um time, então: if getTeamName (theTeam) == "Nome da equipe" then -- Se o time em que o jogador está tiver este nome, então: setElementModel (source, 0) -- Nesse exemplo, vai colocar a skin do CJ. Troque o 0 pelo ID da skin que deseja colocar. elseif getTeamName (theTeam) == "Nome de outra equipe" then -- Senão se for este outro nome, então: setElementModel (source, 1) -- Coloca essa outra skin. end end end addEventHandler ("onPlayerSpawn", getRootElement(), playerNasceu) -- Executa isso em cada jogador que nascer. (depois de morrer) Espero ter ajudado. Da próxima vez, tente pesquisar na Wiki.
-
[Ajuda] Trocar o personagem CJ pra outro personagem
Lord Henry replied to Paantry's topic in Programação em Lua
Já tentou pelo F1 amiguinho? Só selecionar um personagem lá que dai vc consegue jogar com eles. Se o seu objetivo é substituir a skin do CJ por outro personalizado, dai use EngineImportTXD e engineLoadDFF com seu arquivo de skin personalizado. -
Amigo, creio que houve um equívoco. Você postou isso na sessão de Tutoriais. A não ser que você esteja ensinando algo, esta não é a área correta para este post. Se você quer ajuda com seu resource, favor postar em Programação em Lua e lá iremos lhe ajudar com quaisquer dúvidas que você tenha para melhorar seus resources. Agradeço a compreensão.