Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 01/12/18 in all areas

  1. Currently I'm working on a new map editor with more features and a more user friendly UI however a major thing I'd like to see is what you (The Community) want to see added in the editor. If you respond with a feature request please state the name of the feature or tool as well as a brief description; I'll be posting some screen shots of what the new tool will look like as soon as I have the basic functionality done.
    1 point
  2. Алло, мы ищем таланты! В сыгранную и скилловую команду требуется разработчик LUA, с опытом работы на MTA-проектах от 3 месяцев. Что мы готовы предложить? • Заработную плату от 70.000 рублей в месяц — выплата 2 раза в месяц; • Работу с новыми продуктовыми релизами — минимум задач по рефакторингу; • Комфортные рабочие условия; • Оперативную реакцию команды на все рабочие вопросы. Чего мы ожидаем от вас? • Опыт программирования на LUA; • Профильный опыт разработки MTA-проектов от 3 месяцев; • Понимание основных приципов ООП; • Работа с логическими блоками; • Базовые знания MySQL и XML. Отдельным плюсом будет: • Опыт работы с API и интеграцией внешних сервисов к игровому моду; • Знание методологии оценки нагрузки скриптов и модулей на сервера, а также принципов оптимизации кода; • Опыт программирования на C#. Мы используем Slack в качестве командного мессенджера. Разработчики используют Kanban с элементами Scrum. Мы предлагаем почасовую оплату с минимальной ставкой в 400 р/час, однако готовы учитывать ваши пожелания, при наличии интереса. Связаться можно в скайпе: russianretard или через электронную почту: [email protected]
    1 point
  3. Hello friends! We want to introduce you to the new gamemode in MTA. Would you like to visit Mars? Subscribe to the topic to get the latest news! Twitter: https://twitter.com/MTAMarsX VK: https://vk.com/mtamarsx
    1 point
  4. Interesting concept.
    1 point
  5. Video looks good. Maybe tell us more info about what is planned and done.
    1 point
  6. @ميدوح - exports ? - start "dgs" DGS = exports.dgs browser = DGS:dgsCreateMediaBrowser(600,600) --[[Create a media browser ( CEF browser with my api )]] img = DGS:dgsCreateImage(400,200,600,600,browser,false) --[[Create an image because media browser is a browser ( hmm... it is a kind of texture ) ]] DGS:dgsMediaLoadMedia(browser,"test.webm","VIDEO") -- [[Give a video file ( Local video and only support .webm file for video and .ogg file for audio)]] DGS:dgsMediaPlay(browser) --[[Now ! Let's get Higher!]]
    1 point
  7. Sim, a tabela 'veh' também estava armazenando o elemento player. Meu último código tem um 'end' extra na linha 8, remova ele.
    1 point
  8. o veh é uma tabela, você provavelmente não entendeu o que ele disse. Quando ele fala "parâmetro", quer dizer aquilo que fica dentro do () da função, que no caso seria thePlayer, não havia necessidade daquilo, e poderia trocar o elemento thePlayer por source nas funções. Pelo que notei, aparente está utilizando mods editados da net, no seu lugar, começaria a estudar mais, e tentar fazer meus próprios mods, do 0. A função que o @DNL291 chamou com o evento onPlayerQuit, destrói os elementos (caso eles existam, ou seja, utilizando isElement). Na sua primeira função, você utilizava o evento, com as funções de destroyElement e deixava as tabelas nulas, porém, não fazia uma verificação, causando erros desnecessário toda vez que um jogador saísse do servidor.
    1 point
  9. Você só trocou thePlayer por source, mas não é isso que tá no meu comentário acima.
    1 point
  10. Remova thePlayer do parâmetro (linha 1) e use source no lugar de thePlayer; O nome da função está diferente do nome chamado em addEventHandler e também inválido; O removeEventHandler não é necessário. Edit: também vai precisar fazer o mesmo com o valor veh[jogador].
    1 point
  11. Pensei em falar sobre as mensagens privadas, mas alguns iriam ficar muito chateados comigo, pois fazem isso direto.
    1 point
  12. @VazErn Posso até estar sendo chato em falar isso, mas te dando um bom conselho: sempre pesquise pelo fórum antes; Na seção Scripting tem muitos tópicos assim e até aqui no nosso sub-fórum. Aqui por exemplo, um bom tutorial: Se você não conseguir entender o tutorial, até porque está em inglês, então nesse caso sem problemas, só postar aqui. Mas de qualquer forma, espero que entenda isso como algo útil pra você, visto que para realmente avançar na programação é importante você ler tutoriais em inglês pois em PT tem pouquíssimos e você também mostra seu esforço em aprender por garimpar o fórum - eu digo isso por mim, só aprendi mesmo depois que busquei tudo por conta própria, eu nunca fui de pedir algo a alguém - estou falando de mim mesmo, não é nenhuma indireta pra você. Quanto ao nosso membro brunob22, realmente não vejo nenhum problema em fazer o código pro pessoal, na verdade, quem vai te impedir? Se eu quiser começo dar scripts pronto pra todo mundo aqui, e aí? Minha opinião é que criar códigos de forma didática aos outros pode até ser um pouco bom pra você mesmo evoluir, mas isso vai até certo ponto, desgasta mais a pessoa e sempre tem aqueles que se aproveitam da boa vontade e começam a te encher o saco via privado, ficam mal acostumados e ficam spamando tópicos com "dúvidas" sempre dependendo de scripters. Concordo em certa parte do que ele disse, cada um tem que correr atrás e fazer seu código. Enfim, se ele não usasse essa forma ofensiva pra se expressar e atacar outros de forma indireta todos aqui entenderia o ponto dele.
    1 point
  13. Não sei se é mais seguro. Mas precisa de mais comandos para fazer a troca de dados. No MySQL vc precisa de um comando para iniciar a conexão com o banco de dados, e depois um comando para fazer as alterações. Já no SQLite você só envia e recebe os dados direto, sem necessidade de solicitar conexão.
    1 point
  14. مقفل حاليا بس بيفتح ثاني ان شاء الله فكرتك طبقتها , وان شاء الله بتكون في السيرفر لما يفتح , تسلم لاقتراحك
    1 point
  15. ? السلام عليكم كما هو موضح في العنوان بختار اكثر من شخص او علي حسب الي اقدر عليه واسوي له تصميم لموقع ويب يعبر عن السيرفر الخاص به ف اللعبة الاهداف ؟ دعم اصحاب السيرفرات غير المشهورة - دعم قائمة اعمالي - قوانين للحصول هذه الفرصه سيرفرك غير مشهور - لديك افكار كثيرة تريد تنفيذها في الموقع - ضع اسم سيرفرك في تعليق هنا + الافكار او ارسلها خاص - قوانين بعد الحصول علي الفرصة عدم التدخل في اختيار الالوان ويمكنك التدخل في اختيار توزيع العناصر في الموقع - عدم المطالبة بحذف حقوقي من التصميم ومحاولة حذفها بنفسك او الاستعانه بشخص اخر خبير النتيجة هي انهيار التصميم بالكامل - اخرك ايه؟ HTML5, CSS3, Javascript, jQuery, PHP يعني لايمكن طلب فكرة تحتاج الي داتا بيز مثل نظام تسجيل الدخول والعضويات ..الخ اي فكرة الديناميكية في هذا الموضوع بتكون محدودة نوعا ما
    1 point
  16. Yea that is a possibility. @koragg Just keep in mind that: (if this issue is still around) 1. if you were listening serverside with the event onResourceStart. 2. Trigger the resourceRoot of that specific resource to clientside. 3. That after validating, the resourceRoot is not available yet. (Just run these 3 steps and you will understand what this means) Send over the resourceName instead and wait for onClientResourceStart(with high addEventHandler priority)
    1 point
  17. Olha... eu não iria comentar nada, mesmo sabendo que já é o terceiro post dele criticando sobre postar códigos prontos, mas como o próprio autor deste tópico entrou no assunto, acho válido deixar minha sincera opinião, bom vamos lá. Eu entendo a crítica dele e concordo em partes. Quando vc posta o código pronto, vc desestimula o cara a pesquisar por conta própria, pois é só o cara dar Ctrl+C e Ctrl+V e o problema está resolvido. No entanto eu observo os usuários do fórum para ver quem está tentando e quem só está copiando código. Posso contar nos dedos quantos usuários realmente estão tentando aprender. Eu posto o código comentado e estimulo os outros a comentarem seus códigos pois quando vc comenta seu próprio código em cada linha, vc sabe exatamente como ele funciona e você não se perde, pois é muito mais fácil de estudar um código funcionando diretamente com o que ele estava tentando fazer do que estudar uma sintaxe e sair chutando os valores. No caso de usuários novos, eu só posto código se ele já vem com uma parte feita, e que claramente não foi baixado da internet, caso contrário eu só indico links por onde ele pode começar, pois não vejo motivos pra começar por ele. Eu entendo que a maioria do pessoal aqui não é fluente no inglês (o que é um grande obstáculo, pois tudo na informática é em inglês) e por esse motivo possuem muita dificuldade com a Wiki. Mas isso não significa que ela seja descartável, aliás muito pelo contrário, pois ela explica o que cada função faz. Nas minhas respostas eu tento sempre manter as funções linkadas em suas páginas da Wiki, para estimular o usuário a clicar e descobrir por si mesmo como ela funciona. É claro que todos nós preferimos os autodidatas, que saem buscando na Wiki, testando as coisas, errando, consertando e aprendendo. Porém existem coisas que não se aprendem em documentações, como por exemplo as boas práticas de programação. Eu por exemplo fico incomodado quando vejo um parâmetro de função declarado como source, pois isso remove o source original da função. É uma coisa besta, mas me incomoda. Outra coisa que me irrita muito é código não indentado. Na maioria das vezes me recuso ativamente a ler o código enquanto ele não estiver indentado. Mas devo lembrá-los, que estamos em uma comunidade, e para isso devemos nos ajudar e não nos explorar e nem nos atacar. Se fosse pra mandar só links, seria mais fácil ir direto no google em vez de perder tempo criando um tópico. Já me estressei algumas vezes com varios usuários deste fórum, o que considero falha minha, pois eu deveria ser sempre neutro. Nem todos os novatos sabem lidar com as críticas, e nem todos os experts sabem criticar sem ser de maneira agressiva. A questão é: Qual será sua resposta quanto a isso? Ela será construtiva? Ela é necessária? Ela ajuda alguém? A discussão vale a pena? É tudo questão de bom senso e auto-controle. Aprender nem sempre é fácil, mas ensinar também não é. Eis meu desabafo.
    1 point
  18. Venho percebendo a tempo já que o Bruno vem criticando o @Lord Henryo tempo todo... acho isso bem infantil da parte dele, não estou aqui pra julgar ninguém porém cada um passa conhecimento do jeito que quiser para o próximo, vai da pessoa que esta recebendo ajuda correr atrás.
    1 point
  19. You could using string.match to ensure that from start to end, only letters (%a) and the underscore (_) symbol are allowed. E.g. return string.match(str, "^[%a_]+$") == str ^ matches beginning of string, [...] makes a set, %a includes all letters (uppercase and lowercase) into the set, _ adds underscore into the set, the + means it can match more than once, and $ matches the ending of the string. The function returns the matched string, which should be identical to the input string since we're matching from start to end. It returns a nil if nothing matched, that is, the input string wasn't from start to end only letters and underscores. It is very lenient and allows names even like Test__, or __john_sMiTh__, etc. No enforcement of where the underscore can be, how much can there be, and no enforcement of capitals. If you want it to be a little more rigid, for example, that the underscore must separate two different words made of letters, you could use the following return string.match(str, "^%a+_%a+$") == str and if you want to enforce capital letters at the beginning of these two words, return string.match(str, "^%u%l+_%u%l+$") == str -- must begin with capital letter and all subsequent must be lowercase return string.match(str, "^%u%a+_%u%a+$") == str -- must begin with capital letter and all subsequent can be either case
    1 point
  20. Para obter a lista de jogadores online, vc só precisa obter todos os elementos do tipo "player". Para isso você usa getElementsByType ("player") Se você quiser acessar cada jogador obtido por meio de um loop, por exemplo, pra dar um jetpack á cada um deles. Dai você faz assim: function jetPraGeral (thePlayer, cmd) local todoMundo = getElementsByType ("player") -- todoMundo é uma table com todos os jogadores conectados ao server. for i, jogador in ipairs (todoMundo) do -- Para cada elemento dessa table, faça o seguinte: setPedWearingJetpack (jogador, true) -- Dá um jetpack pra esse elemento. end end addCommandHandler ("todosJet", jetPraGeral) A table acima seria tipo assim: local todoMundo = {player1, player2, player3} -- player1 não é o nick do jogador, e sim um elemento do tipo "player". -- Supondo que só tenham 3 jogadores no server. Ali naquele loop do FOR: i se refere ao índice de cada elemento dessa table. No entanto ela não está indexada, então o MTA considera índices inteiros em ordem. Se você quer obter o player2, você pode acessá-lo com todoMundo[2], pois o 2 é o índice que o MTA deu pra ele. jogador se refere a cada elemento em si. ipairs indica que o loop percorre os elementos com índices inteiros numa tabela, em ordem. Obs: Se você quer que o i comece a partir do 0 em vez de 1, use pairs em vez de ipairs. Por exemplo em casos onde você quer contar quantos players estão dentro de um veículo. Porém você deve considerar o assento 0, que é do motorista. function meusOcupantes (thePlayer, cmd) local myVehicle = getPedOccupiedVehicle (thePlayer) -- myVehicle recebe o veículo que o jogador que executou o comando está. if not myVehicle then return end -- Se o jogador que executou o comando não está em um veículo, nada acontece. local counter = 0 -- Contador de ocupantes começa em 0. local ocupantes = getVehicleOccupants(myVehicle) -- ocupantes recebe uma table com todos os jogadores que estão dentro do veículo. Indexada com os assentos ocupados. for seat, player in pairs(ocupantes) do counter = counter + 1 outputChatBox ("Assento "..seat..": "..getPlayerName(player), thePlayer, 255, 255, 255, true) end outputChatBox ("Ocupantes: "..counter, thePlayer) end A table acima é tipo assim: local ocupantes = { [0] = motorista; [1] = player2; [3] = player3 } -- Supondo que não tenha jogador no assento 2. Note que ela está indexada com o assento em que cada jogador está. No entanto se usar ipairs, o motorista seria ignorado, pois o loop começaria a partir do 1, ignorando o índice 0. Então o loop deve ser feito com pairs, que considera todos os elementos independente de seu índice. Porém o loop pairs percorre a table de maneira aleatória, e não em ordem como o ipairs. Outra coisa a ser levada em consideração entre os dois tipos de loop, é que se você estiver usando uma table com índices não-inteiros, o ipairs não pegará nenhum dos elementos, pois ela só funciona com índices inteiros ou com tabelas que não estão indexadas. Faça o seguinte teste entre eles: client-side (recomendável) tabelaNaoIndexada = { -- O próprio MTA irá indexar isso automaticamente em ordem inteira. " ", "Um", 2, "ABC", 0.15 } tabelaIndexadaInt = { -- Funciona com ipairs, mas ignora o 0. [0] = " ", [1] = "Um", [2] = 2, [3] = "ABC", [4] = 0.15 } tabelaIndexadaQualquer = { -- Não funciona com ipairs, pois não é possível determinar a ordem dos índices, pois eles não são todos inteiros. [0] = " ", ["1"] = "Um", ["dois"] = 2, [3.3] = "ABC", [4] = 0.15 } tabelaIndexadaIntQualquer = { -- Só funciona com ipairs até onde existe o índice seguinte. Se não encontrar o índice seguinte, o resto será ignorado. [1] = " ", [2] = "Um", [4] = 2, [5] = "ABC", [6] = 0.15 -- Se substituir o 6 pelo 3 que está faltando, essa table funcionará perfeitamente no ipairs. Pois não terá índice faltando na sequência. } for index, valor in ipairs (tabelaNaoIndexada) do -- Substitua o tabelaNaoIndexada pelas outras tables para testar. Tente também usando o pairs. outputChatBox (index.." = "..valor) end outputChatBox ("Tamanho: "..#tabelaNaoIndexada) -- Tente verificar o tamanho das tables com isso e observe os bugs. A função #table serve para mostrar o tamanho de uma table. No entanto ela não conta os elementos e irá bugar em tables indexadas como os 2 últimos exemplos. Na verdade ela apenas mostra o maior índice inteiro da sequência. No caso do último exemplo, onde o maior índice é 6. Ele vai dizer que o tamanho dela é 6, quando na verdade é 5. Qualquer dúvida que você ainda tiver sobre as tables e os loops, estarei aqui pra ajudar.
    1 point
  21. هههههههههههههههههههههههههههههههههههههههههههه @+Source|>
    1 point
  22. ¿What? Si esa es la función que le da vida xd
    1 point
  23. function llenarAlCambiar(oldModel, newModel) if ( getElementType(source) == "player" ) then setElementHealth( source, 100 ) end end addEventHandler("onElementModelChange", getRootElement(), llenarAlCambiar) Esto debería funcionar. Recuerda que es lado server.
    1 point
  24. Work is going kind of slow at the moment due to lack of time; however the editor is still being actively worked on and I hope to have open alpha out on the 21st. (Open alpha marks it being a complete replacement for the old editor (Meaning it'll have all of the functionality) then future updates will massively expand on the concept, currently I'm working on ensuring everything that can be done in the old editor can be done here aswell as adding in a lot of extra tools that'll help map makers massively.)
    1 point
  25. Dev Show Case #1, still heavily WIP and lots to do but progress.
    1 point
  26. والله ي اخوان اني مره مره مره اكرهكم
    0 points
×
×
  • Create New...