Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,971
  • Joined

  • Last visited

  • Days Won

    179

Everything posted by Lord Henry

  1. Primeiro você pega todos os jogadores. Depois você pega o nome e cargo de cada um deles. Com o nome e cargo, você coloca um número antes do nome de acordo com o cargo. Ex: "JoaoGaymer" tem o cargo de Fundador, então o nome dele vai ficar " 00JoaoGaymer". (sim, com espaço na frente) "PedroBilau" tem o cargo de VIP, então o nome dele vai ficar " 03PedroBilau". E assim por diante. Depois de colocar os números antes do nome dos jogadores (você não vai renomear os jogadores, apenas mexer na variável que tem os nomes deles no script), você então pode reordenar a tabela de nomes dos jogadores. Os que começam com " 00" vão aparecer antes dos que começam com " 01", depois os que começam com " 02" e assim por diante. Só depois de ordenada a tabela, você passa um loop por ela removendo os números e o espaço de cada nome. Vou inventar de cabeça aqui um exemplo. local nomes = {} -- Tabela vazia onde vão ficar os nomes de todos os jogadores conectados no server. local cargos = { -- Aqui você coloca todos os Cargos em ordem. Nesse caso irei indexar como string pois o 0 é obrigatório até o 9. [" 01"] = "Fundador", [" 02"] = "Patrocinador", [" 03"] = "Booster", [" 04"] = "Youtuber", [" 05"] = "Admin", [" 06"] = "VIP", [" 07"] = "Membro", [" 08"] = "Policial", [" 09"] = "Gang", [" 10"] = "", -- O último cargo da tabela precisa ser vazia. Será onde os jogadores sem cargo ficarão classificados. } -- O espaço antes do número serve para garantir que nenhum espertinho mude seu próprio nick pra ficar na frente. O MTA não permite espaço no nome. -- Caso contrário, um jogador cujo nick começa com "#" ficaria na frente do Fundador. for _,player in pairs (getElementsByType("player")) do -- Para cada jogador conectado no server, faça: local nome = getPlayerName (player) local cargo = getElementData(player, "Cargo") or "" -- Se o player não tiver essa elementData, será string vazia. Evita o erro de comparar string com boolean. for i,item in pairs (cargos) do -- Para cada cargo da tabela cargos, faça: if cargo == item then -- Se o jogador tem esse cargo, então: nome = i..nome -- Adiciona o número desse cargo na frente do nome do jogador. Se o jogador tem o cargo Admin, a variável nome passa a ser " 05NomeDoPlayer" por exemplo, inclusive com o espaço. Se o jogador não tiver cargo nenhum, ele ficará como " 10NomeDoPlayer" table.insert(nomes, nome) -- Adiciona o nome modificado deste jogador na tabela nomes. break -- Sai deste loop. Não precisa verificar os demais cargos, pois já encontrou o cargo correto. end end end table.sort(nomes) -- Ordena todos os nomes da tabela nomes. for i,nome in ipairs (nomes) do -- Para cada nome da tabela nomes, faça: if string.find(nome, " ") then -- Se o nome tem espaço (foi alterado), então: nomes[i] = string.sub(nome, 4) -- Remove a alteração do nome, mas mantém na mesma posição ordenada. end print(nomes[i]) end -- A tabela nomes agora tem todos os nomes originais em ordem.
  2. Isso acontece pois além de errar na indentação, você não percebeu que faltou colocar states = false depois do showCursor(false) Além disso, seu isMouseInPosition não parece estar seguindo a mesma posição dos botões do painel (a não ser que você mudou o painel e não mostrou ele) Também seria interessante você incluir as funções úteis que você está usando, fica complicado de testar seu script se você não inclui as funções úteis. Fiz várias correções, dê uma estudada nas diferenças.
  3. Mais fácil vc simplesmente criar um marker na posição do respawn. Quem sair do marker volta a ter colisão normal.
  4. N precisa usar quote se só tem 2 pessoas na conversa. O quote serve pra vc citar oq alguém falou pra quando tem várias pessoas na conversa e sua resposta ser direcionada pra aquele comentário específico. Vc tbm pode apenas citar o nome do usuário que deseja responder, sem precisar de quote. Só colocar o @ na frente e depois o nome do usuário @SciptNovato mas não mencione quem não estiver no seu tópico. Sobre seu script, tente isso: function displayResources() local resourceTable = getResources() -- Obtém todos os resources do server. for _, res in pairs(resourceTable) do -- Para cada resource, faça: local name = getResourceName(resourceValue) -- Obtém o nome do resource. enviarMsg("Resource ["..name.."]") -- Mostra uma mensagem com o nome. end end addCommandHandler("rsc", displayResources)
  5. Depure seu código com vários outputChatBox para saber até qual linha ele está lendo, descobrindo assim qual condição está com problema. function MarkerEntregaFunction3(thePlayer) outputChatBox("A", thePlayer) if getElementType(thePlayer) ~= "player" then return end outputChatBox("B", thePlayer) if isPedInVehicle(thePlayer) then outputChatBox("C", thePlayer) local ocupado = getPedOccupiedVehicle(thePlayer) if getElementData(thePlayer, "EntregadorD") == true and getElementData(ocupado, "kombiEntregas") == true and getElementData(thePlayer, "Entregou2") == false then outputChatBox("D", thePlayer) givePlayerMoney(thePlayer, 1000) setElementVisibleTo(MarkerEntrega2, thePlayer, false) setElementVisibleTo(BlipEntrega2, thePlayer, false) setElementVisibleTo(MarkerEntrega3, thePlayer, true) setElementVisibleTo(BlipEntrega3, thePlayer, true) setElementData(thePlayer, "Entregou2", true) end end end addEventHandler("onMarkerHit", MarkerEntrega3, MarkerEntregaFunction3)
  6. Isso acontece devido a sua condição if not isCursorShowing() then pois ela se torna false depois que o cursor fica visível. Tire essa condição dali e também o showCursor. Coloque o showCursor lá em baixo na função que adiciona/remove o onClientRender. local screenW, screenH = guiGetScreenSize() local states = false function DX_Entregas() dxDrawRectangle(screenW * 0.3794, screenH * 0.2467, screenW * 0.2288, screenH * 0.4833, tocolor(31, 31, 31, 255), false) dxDrawRectangle(screenW * 0.3794, screenH * 0.2356, screenW * 0.2288, screenH * 0.0111, tocolor(116, 0, 165, 255), false) dxDrawRoundedRectangle(screenW * 0.3956, screenH * 0.2711, screenW * 0.1969, screenH * 0.3333, 15, tocolor(82, 82, 82, 224), false) dxDrawRoundedRectangle(screenW * 0.4019, screenH * 0.6444, screenW * 0.0769, screenH * 0.0533, 15, tocolor(82, 82, 82, 224), false) dxDrawRoundedRectangle(screenW * 0.5094, screenH * 0.6444, screenW * 0.0769, screenH * 0.0533, 15, tocolor(82, 82, 82, 224), false) dxDrawText("SIM", screenW * 0.4200, screenH * 0.6489, screenW * 0.4788, screenH * 0.6778, tocolor(25, 232, 4, 255), 3.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawText("NÃO", screenW * 0.5240, screenH * 0.6489, screenW * 0.5837, screenH * 0.6778, tocolor(237, 0, 0, 255), 3.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawText("Você quer trabalhar entregando drogas?", screenW * 0.4200, screenH * 0.2822, screenW * 0.6019, screenH * 0.3122, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawText("--Receber uma van no local ao lado", screenW * 0.4044, screenH * 0.3267, screenW * 0.5863, screenH * 0.3567, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawText("--Entregar a carga em um local secreto", screenW * 0.4044, screenH * 0.3567, screenW * 0.5863, screenH * 0.3867, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawText("--Receber de 10000 a 13000 de Dinheiro Sujo", screenW * 0.4044, screenH * 0.3867, screenW * 0.5863, screenH * 0.4211, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) end addEvent("Open:Ilegal", true) addEventHandler("Open:Ilegal", root, function() if states then removeEventHandler("onClientRender", root, DX_Entregas) else addEventHandler("onClientRender", root, DX_Entregas) end states = not states -- Alterna states entre true e false a cada vez. showCursor(states) end)
  7. Prefira usar a palavra "obter". Ninguém usa "getar", só se for "setar". Você pode obter todos os elementos criados via script por um resource e depois verificar quais deles são do tipo "vehicle". Primeiro você usa getResourceDynamicElementRoot para obter o rootElement dinâmico do resource específico. Depois apenas pegue os elementos do tipo "vehicle" que estejam neste rootElement. local dynamicRoot = getResourceDynamicElementRoot (getResourceFromName ("teste")) -- Nome do resource aqui. local resourceVehs = getElementsByType("vehicle", dynamicRoot) -- Obtém todos os elementos do tipo veículo que estão no dynamicRootElement -- Obs: veículos criados por arquivos.map não entram aqui, somente os criados via script como createVehicle. -- Obs2: se quiser somente os veículos criados por arquivos.map do resource, utilize na primeira linha getResourceMapRootElement em vez disso. for _,veh in pairs (resourceVehs) do -- Exemplo q torna todos os veículos deste resource translúcidos (fantasmas). setElementAlpha(veh, 150) end
  8. Nunca use source como parâmetro de função. A variável res não é uma table. Acho que você queria usar getResources para obter uma table com todos os resources.
  9. Coloque alguns outputChatBox entre cada condição pra saber quais partes estão sendo lidas.
  10. De nada. O tonumber é bem comum de se usar, também tem o tostring pra converter um valor em texto.
  11. Ele está reclamando que thePlayer é um veículo e não um pedestre. Isso acontece se você encostar no marker dentro de um veículo, isso faz com que ele ative 2x, um pro veículo e outra pro jogador. Para evitar que ele considere o veículo, apenas adicione isso no começo da sua função: if getElementType(thePlayer) ~= "player" then return end -- Se o tipo de thePlayer for diferente de um jogador, então cancela a função e nada acontece.
  12. Dai é na seção Mapas para MTA:SA, aqui é só sobre programação. Tópico movido.
  13. Faça tipo assim: addEventHandler("onClientKey", root, function(key, press) if not press then return false end if isLoginEnabled then -- Aqui seria a variável responsável por dizer se o painel de login está na tela ou não. cancelEvent() end end) function abrePainel() -- Exemplo da sua função que faz o painel aparecer pro jogador. -- Aqui é onde está o código que mostra o painel. isLoginEnabled = true -- Define essa variável como true, então as binds deixam de funcionar mas ainda dá pra digitar no painel. end function fechaPainel() -- Exemplo da sua função que faz o painel desaparecer pro jogador. -- Aqui é onde está o código que oculta o painel. isLoginEnabled = false -- Define essa variável como false, então as binds voltam funcionar normalmente. end
  14. Que erro? Mande a mensagem do erro.
  15. Sobre a indentação: Indente com 4 espaços no lugar de cada TAB, assim ele aparece certinho aqui pro fórum. Sobre seu problema, já tentou apenas converter o texto em número? Coloque isso na segunda linha: quantia = tonumber(quantia)
  16. Não. Se vc retirar essas permissões do painel, todo mundo vai ficar sem essas permissões. É o mesmo que remover a permissão admin do painel admin.
  17. Não é necessário pois este tópico já foi movido para a seção Português. Ele quis dizer que sempre que você for criar um tópico fora da seção Português, você deve escrever em inglês.
  18. Tem. Vc terá que editar o painel, criar um novo tipo de permissão padrão e depois vincular essa permissão ao botão. É necessário ser avançado em programação para saber o que está fazendo, pois o painel é bem complexo de mexer.
  19. Olá @Ipanema Roleplay utilize o botão <> do fórum para postar scripts. Não cole direto no texto.
  20. O fórum indenta com 8 espaços. Pra não distorcer é só vc usar 4 espaços em vez de TAB.
  21. Não fazemos drop de mods. Tente desenvolver o seu e podemos lhe ajudar com dúvidas. Comece estudando o evento onPlayerQuit.
  22. Utilize isso para remover o pneu do veículo: setVehicleWheelStates
×
×
  • Create New...