Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,980
  • Joined

  • Last visited

  • Days Won

    181

Everything posted by Lord Henry

  1. Não é legal puxar todos os players sem autorização deles. Se seu objetivo é fazer algum sistema de evento pra puxar os jogadores até sua localização, é mais fácil você criar um comando /irevento que só funciona depois que um Staff habilita o comando e teleporta quem usar o comando até a posição onde está o Staff. Assim só os jogadores que quiserem participar serão teleportados. Sobre puxar todos os jogadores em loop, você até consegue fazer isso client-side. Mas por ser todos ao mesmo tempo, eles vão acabar ficando presos uns nos outros. Por isso é mais vantagem criar um comando para os jogadores irem se teleportando por vontade própria e no tempo de cada um.
  2. Se forem de resources diferentes, use a função call.
  3. Não é permitido compartilhar nem pedir links piratas aqui. Procure na internet por sua própria conta e risco.
  4. A coisa q mais importa é oq falta na sua divulgação: IP do servidor.
  5. Normalmente o pessoal associa o veículo a uma tabela. Ou colocam o "owner" como elementData no veículo.
  6. Tente reinstalar o resource do map editor. É o que está na pasta [editor] Link dos resources nativos.
  7. local markCoords = { {x, y, z}, -- Troque o x, y, z pela posição x, y, z do marker {x, y, z}, -- Faça o mesmo no segundo marker. {x, y, z}, -- E assim por diante. } local markers = {} -- Tabela vazia, onde os markers ficarão ao serem criados. for i, item in ipairs (markCoords) do -- Para cada item da tabela markCoords, faça: local x, y, z = unpack(item) -- x, y, z recebem a posição do item da tabela markCoords. markers[i] = createMarker(x, y, z, "cylinder", 1.1, 255, 255, 255, 50) -- Cria o marker nessa posição e coloca ele na tabela markers. end addEventHandler("onMarkerHit", resourceRoot, function(hitElement) -- Faz com que essa função só ative para markers criados neste resource. if getElementType(hitElement) == "player" then outputChatBox(" ", hitElement) -- Textos vazios não precisam de parâmetros de cor. outputChatBox("Para começar a trabalhar, digite #ffff00/trabalhar ", hitElement, 255, 255, 255, true) outputChatBox(" ", hitElement) end end) function salariopm(thePlayer) -- Policial. for i, marker in ipairs (markers) do -- Para cada marker da tabela markers, faça: if isElementWithinMarker(thePlayer, marker) then -- Se o jogador está dentro desse marker, então: if isObjectInACLGroup ("user."..getAccountName(getPlayerAccount(thePlayer)), aclGetGroup(Grupo1)) then -- Grupo1 dará erro se você não declarar essa variável antes em algum lugar. if getElementData(thePlayer, "TrabalhoPolicial") then setElementData(thePlayer, "TrabalhoPolicial", false) outputChatBox("Você #ff0000saiu #009affde serviço!", thePlayer, 0, 154, 255, true) setElementModel(thePlayer, 0) else setElementData(thePlayer, "TrabalhoPolicial", true) outputChatBox("Você #006effentrou #009affem serviço, bom trabalho!", thePlayer, 0, 154, 255, true) setElementModel(thePlayer, 283) end else outputChatBox("Você não tem permissão para isso.", thePlayer, 255, 0, 0, true) end break -- Sai do loop pois já encontrou o marker em que o jogador está. end end end addCommandHandler("trabalhar", salariopm)
  8. Já tentou usar onElementDestroy para guardar os veículos antes deles serem destruídos?
  9. Sim, some depois de um tempo pra evitar que os usuários deletem códigos prontos. Só faltou dar mais espaço ali nos dbExec, no exports e nos destroyElement.
  10. É uma função que ajuda no desenvolvimento, faz com que você habilite o modo desenvolvedor. Você consegue ativá-la usando setDevelopmentMode (true) só funciona client-side. Também dá pra você ativá-la no painel Admin, na aba Resources. Digite ali no campo de comando e clique em Client. Eu fiz meu painel de login ativar essa função automaticamente quando eu faço login. Para evitar o empenho de ir ali no painel Admin ativar o modo desenvolvedor toda vez q preciso dos comandos especiais. Depois que ela está ativada, você passa a ter acesso a esses 2 comandos especiais. /showcol - Mostra/oculta os colshapes só para você. (aqueles criados com createColCuboid, createColSphere, etc) /showsound - Mostra/para de mostrar os IDs dos sons do cenário no seu Debug Console. Precisa estar com /debugscript ativo para ver o Debug Console.
  11. Essa integração com Discord dai já não sei lhe responder. Teste o código com outputChatBox em vez de enviarMsg, se funcionar normalmente então é erro nessa sua integração do Discord.
  12. Troque o v por nome. Editei novamente o código.
  13. Código ilegível. Corrija a indentação.
  14. Toda função de dxDraw tem um parâmetro postGUI. Defina-o como true nas funções dxDraw da infobox para fazer com que ela apareça acima dos outros elementos. Isso vai funcionar se o painel de login for feito em CEGUI. Se não funcionar (o painel de login também for feito com DX), então será necessário você mexer na prioridade do onClientRender da infobox para "low" fazendo com que ela sempre seja desenhada DEPOIS dos outros onClientRenders. No caso da segunda opção, faça assim no resource da infobox: addEventHandler ("onClientRender", root, nomeDaFunction, true, "low") -- Troque nomeDaFunction pelo nome da função onde estão os dxDraw da infobox.
  15. Basicamente você cria uma condição com isCursorInPosition da mesma forma que você fez na condição de clicar no botão. Porém dessa vez você coloca diretamente na função onde está os dxDraw do painel. function render_DX() -- Função que é chamada por um onClientRender. -- Aqui em cima ficam os dxDrawRectangle da janela do painel. if isCursorInPosition(x, y, w, h) then -- Condição igual ao do clique do botão, com os mesmos parâmetros. dxDrawRectangle() -- botão com a cor do mouse em cima. else dxDrawRectangle() -- botão normal. end -- Faz o mesmo com os outros botões, com os parâmetros deles. -- Aqui ficam os dxDrawText que ficam em cima dos botões. end
  16. Talvez você esteja procurando por isso: GetAccountByID A função retornará a conta que tiver o ID que você especificar ou retornará false se não tiver nenhuma conta com este ID. Exemplo maroto: local id = 2 -- ID a ser verificado. if getAccountByID(id) then -- Se existe uma conta com o ID 2, então: local acc = getAccountByID(id) local accName = getAccountName(acc) print("Conta encontrada: "..accName) else print("Não existe nenhuma conta com o ID "..id) end
  17. Sim, onde você apontou só pode ser um elseif. O else só funciona se for a última condição de seu escopo, ele é usado como uma condição de escape sem condições. (se nenhum if nem elseif anterior for verdadeiro, ele entra no else) E tome cuidado coma indentação para não se confundir. function ex(thePlayer) if getElementData(thePlayer, "ex") == true then outputChatBox("sim") elseif getElementData(thePlayer, "ex2") == true then outputChatBox("sim2") else --??? Aqui só pode ser elseif else outputChatBox("nao") end end
  18. local Dinheiroganho = 5000 local PlayersM = 1 local skinIDs = {2, 122} function salario (thePlayer) local players = getElementsByType("player") -- Players recebe todos os jogadores conectados no server. for i,player in ipairs(players) do -- Para cada player conectado no server, faça: if isElement(player) then -- Se player ainda é um elemento, então: if getElementData(player, "TrabalhoPolicia") then -- Se player tem essa elementData, então: for i,id in ipairs(skinIDs) do -- Para cada id da tabela skinIDs, faça: if getElementModel(player) == id then -- Se o ID da skin do player é um ID da tabela, então: if #players >= PlayersM then -- Se tem mais jogadores do que o necessário para receber salário, então: givePlayerMoney(player, Dinheiroganho) -- Dá dinheiro pro policial. outputChatBox("Você recebeu seu salário", player, 255, 0, 0, true) -- output teste else -- Se não tem jogadores online suficiente, então: outputChatBox("Você não recebeu seu salário pois não tem mais do que "..PlayersM.." players online", player, 255, 0, 0, true) -- output teste end break -- Para de verificar os outros IDs da tabela de skins e sai deste loop, pois já encontrou o ID correto. end end end end end end setTimer(salario, 3000, 0) -- milissegundos
  19. Minha primeira sugestão seria deixar compatível com tema escuro do Windows. Até o server console do MTA é em tema escuro, não faz sentido ser claro assim. Outra coisa que seria legal é poder configurar todos os parâmetros do mtaserver.conf diretamente no programa, para não precisar abrir o arquivo.
  20. Pasta de instalação do GTA não pode ser no OneDrive. Instale seu GTA SA no caminho padrão que o instalador dele sugere. Só depois tente instalar o MTA novamente. E aqui ele está reclamando que tem mods no seu GTA. Remova-os e deixe o GTA limpo. Remova os arquivos.asi do seu GTA.
  21. Fiz um painel fixo para você. Vai funcionar em todas as resoluções sem distorcer. A posição dele é responsiva no centro da tela, mas o tamanho é fixo. 640x480 1920x1080
  22. Você está usando isso em um onClientRender, getResources precisa de tempo para ser executada e não pode ser usada em um onClientRender.
  23. Considere que GivePlayerMoney só funciona server-side. Pois se você fizer client-side, ele muda só na HUD mas não dá dinheiro de verdade. Faça assim: (server-side) Dinheiroganho = 5000 PlayersM = 1 function salario (thePlayer) local players = getElementsByType("player") for i,player in ipairs(players) do if isElement(player) then if getElementData(player, "TrabalhoPolicia") and getElementModel(player) == 0 then -- No lugar de 0, coloque o ID da skin que você quer verificar. if #players >= PlayersM then givePlayerMoney(player, Dinheiroganho) outputChatBox("Você recebeu seu salário", player, 255, 0, 0, true) -- output teste else outputChatBox("Você não recebeu seu salário por não ter mais de "..PlayersM.." players online", player, 255, 0, 0, true) -- output teste end end end end end setTimer(salario, 3000, 0) -- milissegundos
  24. Não, pois você ainda terá problemas com as áreas clicáveis dos botões que precisarão ser adaptadas também.
×
×
  • Create New...