Jump to content

Stanley Sathler

MTA Contributors
  • Posts

    563
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by Stanley Sathler

  1. Oi Rafael, ficamos muito felizes por ter finalmente decidido traçar o seu próprio caminho do aprendizado. Como o RooTs falou, você pode editar um recurso já pronto da comunidade para este fim. Quando olhar o código deles, vai olhar para o seu e provavelmente perceber onde errou. Porém, vou apontar suas falhas brevemente, pode ser? Eu não sei se são todas, porque nunca posso testar os scripts da galera, já que no Linux o suporte para MTA não tá bacana ainda. 1) Reparei muitas falhas na lógica principal do seu código. Aparentemente, você ainda não tem uma noção clara do que são parâmetros, funções, talvez nem variáveis. Se eu estiver certo ao afirmar isso, posso te passar uma dica rapidão? Dá uma olhada no CodeCademy. Faz o curso de Python, que, de todas lá, é a mais parecida - na sintaxe - com o Lua. O objetivo nem é aprender o Python em si, mas o que são as definições que falei acima: variável, listas (tabelas em Lua, arrays em outras linguagens), funções, parâmetros, retornos... fora que, se fizer, Lua será um pequeno passo para sua imensidão no mundo do desenvolvimento. 2) No manual da biblioteca Math, existe o seguinte texto: math.random(upper) generates integer numbers between 1 and upper. Isso quer dizer que, quando você está usando math.random(0) no seu código, está tentando gerar um número aleatório cujo valor máximo é 0. E a definição diz que ele tenta gerar um número entre 1 e esse valor máximo que, no seu caso, é 0. Acho que aí existe um problema. 3) Na função setVehicleColor(), você está passando como segundo argumento um math.rand. Se conferir no manual da função, vai ver que ela recebe quatro parâmetros: o veículo (que no seu caso, você acertou), o r, o g e o b. Ou seja, as três variáveis que você definiu no começo do código quando usa o math.rand() de fato. 4) No setTimer(), provavelmente você deveria chamar sua função rainbow(), e não math.rand() como fez. Isso porque o primeiro argumento da setTimer() é uma função callback. No seu código, você está chamando math.rand, sem parâmetro nenhum. E tudo que math.rand() gera é um número aleatório. Me sentiria honrado se você seguisse a minha dica sobre o CodeCademy, rafael. Vai te ajudar muito a desenvolver qualquer coisa em Lua e em outras linguagens. O que te falta mesmo é esse conhecimento teórico sobre as definições básicas da programação.
  2. Tremidinha, devo dizer que seu conceito não é errado. Talvez fosse realmente mais eficaz apontar onde ele errou e o porquê de ter errado. Não discordo. Se um dia cursarem algum curso de nível superior (RooTs e você), aprenderão que, no início, códigos não se escrevem nos computadores, mas sim no papel. Se não souber debugar com a cabeça, meu amigo, não passa do primeiro semestre. Quero ajudar o garoto a começar a pensar como se deve. Se meus tutoriais têm incomodado vocês, façamos uma trégua: eu ensino do jeito que eu prefiro, e vocês ensinam do jeito que vocês preferem. E o autor do tópico lê o que ele preferir. Tão fácil, não é mesmo?
  3. eu aprendo lendo os scripts prontos e procuro entender o funcionamento deles E é por isso que é um péssimo desenvolvedor. tem alguma coisa disponível na comunidade? Se soubesse o que é Web Access, saberia que existe um recurso NATIVO, default na instalação, chamado Webadmin. quero aprender sim!, mais na prática e não lendo Manuais/Livros, para isto tem o Google e a Biblioteca Praticar é receber pronto e "procurar sobre"? Perdão, me enganei. Quer mais exemplos? O painelzinho em Java do seu amigo, que você ACHA que fez mágica por causa do Java e nem imagina que, tudo que aquilo faz, é devido às funcionalidades fornecidas pelos SDKs. Por fim, quer que eu faça algo por você? Mas a minha metodologia de ensino é diferente da sua, estapafúrdia por sinal, então vai precisar pagar para isso acontecer. O motivo da "introdução", meu caro, é porque percebi que seu amigo sequer sabe o que é HTML como deveria, a partir da pergunta sobre haver diferenças entre a aplicação desta. Se quer que eu simplesmente jogue um código aqui utilizando o PHP ou o JavaScript, o garoto precisa no mínimo me garantir que entende ambas as linguagens. O garoto também precisa me garantir que entende o conceito de Web Access, porque sem teoria básica, meu querido, forma-se scripters, e não programadores. E existe uma grande diferença entre esses dois conceitos.
  4. Hábito de programador, rs. Scripter não entende de performance e manuseio de processador. O famoso commit e já era. #extremeGoHorse Reggae, se você não tem intenção de ser programador um dia, realmente o que escrevi não é proveitoso para você. O que não é problema, afinal, querer desenvolver pra MTA não significa que você quer desenvolver outras aplicações. Agora, se for seu objetivo ser desenvolvedor, e não somente um scripter, leia com atenção o que eu disse. No começo, você não vai entender muito. Mas tudo que se lê de estranho todos os dias vão se encaixando dia após dia com muita teoria e, mais ainda: prática.
  5. Oi Viniih, Entre os HTMLs, não há diferença alguma. O HTML é HTML em qualquer aplicação. Para usá-lo em seus recursos, há o que é conhecido como "Web Access", um conjunto de interfaces que facilitam a comunicação de uma aplicação Web e as aplicações do Multi Theft Auto em si. Você pode dar uma olhada na introdução à Web Access e, no final da página, nos SDK's disponíveis. Em geral, trabalhar com Web Access nada mais é do que acessar, através de aplicações Web, funções que você atribui ao seu recurso como "externas". Você escreve "MTA Codes" no seu código (seja ele um .js, por exemplo) e o pre-processador do Multi Theft Auto percorre este arquivo substituindo todas as instâncias destes "MTA Codes". Mas lembre-se: HTML em si não é capaz desta interação. Você deve usar de fato uma linguagem: PHP ou JavaScript, por exemplo.
  6. Se existe insatisfação com a moderação atual, Towncivillian é a pessoa certa a se contatar. Sabe mensurar se fulano ou ciclano está ou não apto a assumir a moderação. Acho que novamente o tópico saiu do foco original (inclusive colaborei para tal desta vez).
  7. Viu só? Aos novos membros que lerem esta postagem: aprendam desde já que, para alguns membros deste fórum, ou você elogia, ou fica calado. Dizer a verdade é ser o "inimigo da nação". E ainda quer ser moderador... porque você não re-assume o cargo de moderador e fique mais presente aqui no fórum. Porque estudo e trabalho. E quando digo estudo, é de fato estudar. Sou programador numa empresa chamada Teknisa Softwares, além de manter minhas duas empresas privadas. Sou um dos pesquisadores da universidade, responsável pela publicação de três artigos em dois semestres. Um deles, publicado na mais importante revista universitária de Belo Horizonte. Considerado o melhor aluno calouro no primeiro semestre de 2015. Tudo isso com 19 anos. E com apenas um ano na faculdade. E essas coisas, Roots, não se consegue brigando em fóruns. Se consegue aceitando as diferenças e sabendo conviver com elas. Se consegue respeitando aos demais. Aceitando as críticas, observando-as e melhorando-as cada vez mais. Tudo isso me toma tempo. Seria uma honra voltar à moderação, e inclusive, no passado, entrei em contato com o TownCivillian. Só que vendo essas discussões, não tenho mais o porquê disso. Não estou afim de perder parte do meu dia tendo de resolver problemas que, teoricamente, vocês deveriam ter a capacidade de resolver entre si. eu posso até criar discussões. mais é para me defender como está ocorrendo neste exato momento.. Já fui atacado dezenas de vezes neste fórum. Diga-me: onde já me viu brigando em algum deles? Houve uma ÚNICA vez que estourei neste fórum com um membro, porque ele fazia as mesmas coisas que o Xeon faz com você. Só que quando isso aconteceu, eu ocupava uma posição diferente da que estou hoje. Hoje, simplesmente ignoro. "Se não soma, não merece minha atenção". forjado o que cara ? ta louco ? para de falar besteira. falar é fácil quero ver provar né cara...... É uma pena que não encontrei seu tópico. Mas eu me lembro muito bem de quando disseram que aquele seu tópico querendo se "eleger" foi postado em outro fórum, onde você saiu pedindo ajuda para que as pessoas vissem aqui comentar. Choveu membros que nunca haviam aparecido nesse fórum antes. E pior: você pediu que eles comentassem dizendo que queriam VOCÊ como moderador. Diga-me: isso não é forjar? Um monte de membros inativos que simplesmente não estavam a par de nenhum dos conflitos aqui existentes. Você ainda tem muito que aprender na vida, garoto. De verdade, sem querer ser grosseiro. É uma pena que aquele cara que conheci torna-se tão desumilde a cada dia que passa. Quando eu tinha os meus 16, agia de forma muito diferente da que você age hoje. Não precisei criar tópicos de discórdia, fui CHAMADO para ser moderador. Justamente porque eu respeitava as pessoas. Aprenda sobre o respeito e tudo na sua vida começará a caminhar de maneira correta. Obs.: há quase 24 horas tentando entender o porquê de ter roubado a foto do Cadu12.
  8. Já que o Tremidinha exige respostas mais diretas, eis as minhas: XeoN: Bom português, mas quer discutir com o Roots em absolutamente todos os tópicos. Inapto. Roots: Muito a melhorar na escrita, além de ter forjado um tópico para auto-promoção no passado. Também rende as tentativas de discussões do Xeon. Inapto. Banex: Boa escrita, ótimo scripter, parece boa pessoa, mas também rendeu discussão neste tópico. Inapto. Tremidinha: Boa escrita, mas rende discussões e acha que criar servidor faz dele um ser maduro. Também rende as discussões, inclusive neste tópico. Inapto. Todo o resto que citaram durante as postagens (Hornet e Fusion, por exemplo), não os conheço o suficiente para opinar (entende-se por conhecer, ver no fórum constantemente). Viu? Todos vocês brigam. O tempo INTEIRO. Em absolutamente TODOS os posts. Em especial Xeon e Roots. E ai de quem ousar contrariar vocês: recebe paulada. Se eu não tivesse nenhuma opção e tivesse que escolher um de vocês, seria o Banex. Se ele parasse de dar atenção pras discussões fúteis que vocês arrumam em todo santo tópico, ele seria a pessoa ideal. Se vocês não se comportassem como adolescentes de 14 anos, nem de moderador precisaríamos. Porque não precisaríamos de alguém vindo aqui apagar os tópicos porque em nenhum deles vocês conseguem manter o foco.
  9. Se não me engano, Cadu12 juntou-se à moderação quando o fiz também. E para ser bem sincero, nem mesmo eu o vi em atividade no fórum português. Inclusive já recebi mais de uma reclamação questionando o porquê de sua posição. Já discutiu-se esta pauta anteriormente neste mesmo fórum, mas como o alvo era a colocação do Roots como moderador, num tópico aparentemente forjado, fui totalmente contra. Mesmo considerando-o um amigo. Já disse anteriormente e volto a dizer: ser moderador não é simplesmente ser bom em Lua. É ser maduro de um modo geral. O primeiro ponto a ser ressaltado é: um moderador nunca briga. E, seguindo esse conceito, muitos de vocês aqui presentes já perdem meu conceito, afinal, brigam em TODOS os tópicos. Absolutamente todos os tópicos, inclusive nesse. Outro ponto é que um moderador não tem como função ser o primeiro a responder todos os tópicos de ajuda, ou fornecer as melhores respostas neles presentes. Um moderador, quando moderador, passa a assumir novas responsabilidades. A questão da ajuda mútua vem da comunidade como um todo, o que inclui mais os membros em si do que os moderadores. Sendo assim, a única reclamação válida para o DNL seria a constante remoção das postagens, sem uma maior advertência, já que na opinião do Banex, estas duas medidas não têm sido satisfatórias e eficazes. Já para o Cadu12, todas são, afinal, nem as responsabilidades de moderador este assumiu. A única coisa que digo para os que desejam tanto assumir a posição: seria muito, mas muito feio ver um moderador da seção discutindo com um membro sobre assuntos fúteis como vocês têm feito ultimamente. Parem com isso, pessoal. Pelo amor de Deus, em NENHUM tópico vocês conseguem se comportar como pessoas adultas. Em absolutamente TODOS os tópicos, existem sempre as mesmas pessoas discutindo ou, pelo menos, insultando e tentando iniciar uma discussão. Meu maior desejo durante minha estadia como moderador sempre foi construir uma comunidade pacífica, onde todos os membros fossem amigos de verdade. Onde todos os membros se construíssem em busca de um objetivo comum: aprender mais e mais. Respeitando a adversidade e a capacidade individual de cada um. Vamos construir isso. Gosto tanto de vocês, dói ver sempre isso em todos os tópicos por onde passo. Peace Editado Um adendo ao Spoc^, respondendo sua pergunta: você pode encontrar, nas regras de uso da seção portuguesa, a regra que proíbe o uso de línguas estrangeiras a menos que seja estritamente necessário. Outra dúvida: andam ensinando Java aqui? No post inicial, vi que "Fusion e Banex ajudam em Lua/Java". Se estiverem, já nem é assunto para o fórum, visto que a linguagem não é diretamente aplicada no desenvolvimento de scripts. Além do mais, Java é passado. (é brincadeira, por favor, não desviem o tópico para este comentário)
  10. Poste seu novo código aqui, Rafael. Fica mais fácil identificar o problema. Provavelmente é ou um erro de sintaxe ou um erro lógico básico.
  11. Apenas uma observação: não se aprende "lendo exemplos". Se aprende programando. Se não fizer o menor esforço em tentar codar por si só, não aprende não senhor. E é exatamente o que acontece com o Rafael: quer pronto. Ali, pronto para ser copiado e colado. Se não souber o que é um laço de repetição, um bloco condicional, operadores lógicos, matrizes e vetores.... esquece. Pode até rabiscar umas coisas, mas sem a base, meu querido, sua capacidade de pensar torna-se extremamente limitada.
  12. Reggae, apenas um comentário antes de mais nada: considere-se boa prática de programação dividir, em arquivos diferentes, as funções relacionadas à construção da interface e as funções que representem sua lógica de negócio, isto é, a lógica em si do programa (dar a experiência, transformar 1000 em 1 level, etc.). 1) Primeiro, vamos refatorar a sua função getPlayerRankName(): a) Você não precisa navegar por toooodos os elementos da lista, fazendo uma condição em cada um deles. Pode simplesmente usar: function getPlayerRankName() return ranksTable[getElementData(localPlayer, "level")][2] Obs.: a única coisa que não me lembro é se arrays em Lua são indexados a partir de 0 ou a partir de 1. Alguém por favor me tira essa dúvida? Não encontrei respostas concretas. 2) Refatore o getPlayerRankExperience() A lógica é a mesma da refatoração anterior. Elimine as n condições, retornando diretamente o que você quer. Exatamente o que fizemos acima. 3) Deixe somente as funções de DX no mainRanks() Sua função mainRanks() é chamada no evento onClientRender, evento que é chamado dezenas de vezes num único segundo, afinal, é chamado à cada renderização do seu computador. Fazer "condições" em eventos assim, quando não necessário, é perder performance sem necessidade. Reescreva uma nova função que faça somente essa checam de experiência e subida de level. E então chame essa função toda vez que um jogador ganhar experiência, ou seja, toda vez que você setar a experiência desse jogador em algum lugar do código. Dê importância para as refatorações que visam melhoria de performance. Muitos servidores investem dezenas de reais mensalmente em servidores cada vez mais potentes para evitar o "lag" quando, na verdade, poderiam investir na reconstrução do DayZ. Ele em si é lento e inimigo dos processadores. [OK] Código agora é performático. Vamos "debugar" seu código: Eu sou level 1, Cabo, cujo valor mínimo é 1000 pontos de experiência. Num dado momento, estou com 1001 pontos de experiência. Logo, quando a condição para me upar vier, ela vai ter como valores: 1001 > 1000? Se sim, aumente o level do jogador. 1001: retornado pelo getElementData() 1000: retornado pelo getPlayerRankName(), afinal, ele pega a experiência mínima do meu level ATUAL (o level é 1, então a experiência mínima é 1000) Logo, pela lógica, quando eu tiver 1001, ele me upa para o level 2. O certo é que, na função getPlayerRankName(), ele não chece o valor de experiência mínima do meu level atual, mas sim do meu level atual + 1 Tudo isso pode não resolver o seu problema de fato, embora solucione outros. Pelo que vi, fora o último problema citado acima, a lógica está correta. O que falta é um debug mais apurado, para saber exatamente onde algo está recebendo o que não devia.
  13. Na linha 50, você tem o início de um bloco condicional if/else. Ali está o que você quer de uma forma extremamente fácil. a) Para remover o "número", apenas remova-o da chamada de sendMsg. b)Para remover o kick, apenas remova o bloco de código de dentro do bloco condicional. Não vou te passar o código porque, à primeira vista, as pessoas têm entregado exatamente o que você precisa de mão beijada. Se está montando um servidor, vai precisar aprender a desenvolver.
  14. Stronger, Como dito, um host caseiro hoje é arriscado e custoso. Se este computador é mantido em sua rede de uso diário (internet que usa para navegar, jogar, etc), um ataque do tipo Denial of Service simplesmente comprometeria toda a sua navegação. Principalmente porque hoje, com as ferramentas fáceis, qualquer idiota consegue simular um ataque assim e se achar o máximo. Outro problema seria o fato de que, quando algo apresenta um problema, se a empresa que você contrata é séria, eles rapidamente corrigem. Agora, se hospeda por si só, vai precisar arrumar por si só. Isso vai levar tempo, tempo que você poderia investir em outras coisas. Por fim, se o servidor faz sucesso, os acessos à sua máquina hospedeira também causarão efeito na sua rede como um todo. A melhor opção, nesses casos, é desembolsar uma pequena quantia para deixar a tarefa na mão de terceiros. O que ocorre muito é que a popularização do termo "VPS" cresceu e, hoje, VPS é sinônimo de ostentação. Só que se você tiver a menor aptidão para analisar requisitos de um sistema (por isso amo Ciência da Computação :b), perceberá que, para vários servidores, uma hospedagem barata é suficiente.
  15. O negócio é ser Open Source e por tudo liberado. \ô/
  16. Pessoal, ainda não terminei porque andei estudando bastante desde que entrei no novo trabalho. Isso fez com que o Multi Theft Auto ficasse um pouquinho de lado. O projeto não foi descontinuado, mas está parado no momento. Pretendo voltar a trabalhar nele assim que entrar de férias.
  17. Por enquanto, reescrever o DayZ em si e alguns módulos que foram criados externamente ao longo dos anos: coletes, subir escadas.... porém, todos eles reescritos e readaptados ao novo código. Só quero mesmo é montar um código bem mais limpo e mais simples pras pessoas modificarem.
  18. Ronaldo, muitíssimo obrigado pelos elogios. Não imagina o quanto suas palavras me alegraram. Seria uma honra conhecer seu projeto quando este estiver finalizado.
  19. Adisson, a ideia é exatamente esta. Construir toda uma comunidade que ofereça suporte à esta versão Open Source.
  20. As our friends already said, you can use engine functions that can do this for you. There is four necessary functions: engineLoadTXD() engineImportTXD() engineLoadDFF() engineReplaceModel() You get the model of billboard and use these functions for change it.
  21. Eduardo, quando não souber, poste apenas um e o moderador responsável moverá-o para o local correto. Em hipótese alguma crie-o mais de uma vez. Quanto à pergunta, presumo que você não saiba programar. Então acho que esteja procurando por um script já pronto, e infelizmente não conheço nenhum. Tente usar a Community.
  22. Hey guys, I'm here today just to say that I'm working on a new version. (=
  23. Roots, .Pra mim, foi o que ele perguntou. E tal como o n3wage disse, expliquei a diferença.
  24. n3wage, funcionou! Não havia me tocado nessa "hierarquia de importâncias". Obrigado mesmo, cara! Valeu também, Walid.
  25. Pessoal, estou com uma função que deveria ser chamada após o jogador entrar em uma marca. A função whenVanIsDelivered(). Porém ela simplesmente não é chamada. local vanSpawnPoints = { --[[ {2485.7204, -1655.1574, 13.3279, 91.2174}, {666.8325, -546.3470, 16.3359, 88.0839}, {2866.3618, -898.2083, 10.9979, 358.1331}, {-1713.8564, 393.9782, 7.1796, 221.2050}, {-1537.4736, 1225.6967, 7.1875, 89.9169}, ]] {993.0109, 2088.0456, 10.7968, 178.2420}, } local vanDeliveryPoints = {{990.9379, 2051.0744, 10.8203}} local vanModel = 482 --Burrito local startCountdown = true local deliveryBlip = nil local deliveryMarker = createMarker(0,0,0) function createsVehicleOnMap() local n = math.random(#vanSpawnPoints) local vehicle = createVehicle(vanModel, vanSpawnPoints[n][1], vanSpawnPoints[n][2], vanSpawnPoints[n][3]+1, 0, 0, vanSpawnPoints[n][4]) if vehicle then outputChatBox("A van full of drugs has just spawned on the map. Go get it if you are looking for money.", getRootElement(), 255, 0, 0) createBlipAttachedTo(vehicle, 51) setElementData(vehicle, "deliveryVan", true) end end addEventHandler("onResourceStart", resourceRoot, createsVehicleOnMap) function whenPlayerEntersOnVan(whoEntered) if getElementData(source, "deliveryVan") == true then -- Now, we create the delivery point local n = math.random(#vanDeliveryPoints) -- Creating our delivery marker deliveryMarker = createMarker(vanDeliveryPoints[n][1], vanDeliveryPoints[n][2], vanDeliveryPoints[n][3]-1, "cylinder", 3, 255, 0, 0, 150, whoEntered) -- Creating our delivery blip deliveryBlip = createBlip(vanDeliveryPoints[n][1], vanDeliveryPoints[n][2], vanDeliveryPoints[n][3], 53) outputChatBox("The delivery point was marked with a flag on radar.", whoEntered, 255, 0, 0) end end addEventHandler("onVehicleEnter", resourceRoot, whenPlayerEntersOnVan) function whenPlayerExitFromVan(whoExit) if getElementData(source, "deliveryVan") == true then -- Destroy elements destroyElement(deliveryBlip) destroyElement(deliveryMarker) end end addEventHandler("onVehicleExit", resourceRoot, whenPlayerExitFromVan) function whenVanIsDelivered(hitElement) outputChatBox("Marcador atingido.") end addEventHandler("onMarkerHit", deliveryMarker, whenVanIsDelivered) Por que será, pessoal?
×
×
  • Create New...