Jump to content

FelipeX

Members
  • Posts

    36
  • Joined

  • Last visited

Everything posted by FelipeX

  1. Envie o meta.xml aqui para ver se existe algum export de function, se possivel.
  2. Segue no exemplo abaixo, quando um player executar o comando /fly ele envia uma mensagem no chat para todos os players online que estão na acl 'Staff'. addCommandHandler("fly", function(playerSource, Command) for i, admins in ipairs(getElementsByType("player")) do -- Retorna todos os players do servidor. if aclGetGroup("Staff") and isObjectInACLGroup ( "user." ..getAccountName(getPlayerAccount(admins)), aclGetGroup("Staff")) then -- Verifica e retorna os player que estão na acl 'Staff'. outputChatBox("#FF0000Infomation: #FFFFFFO Staff "..getPlayerName(playerSource).." ativou o '/"..Command.."'.", admins, 255, 255, 255, true) -- Envia as mensagens aos players após a verificação. end end end)
  3. Veja se consigo te ajudar com este código, não testei apenas montei. ( Perdoa-me pela indentação ) local RequestCancel = {} local DestroyBlip = {} local Blip = {} addCommandHandler("cmecanico", function(PlayerSource) if not isTimer(Request[PlayerSource]) then -- Verifica se o player não possui o tempo de solicitação. for i, Mecanico in ipairs(getElementsByType("player")) do -- Retorna todos os players do servidor. if aclGetGroup("Mecanico") and isObjectInACLGroup ("user."..getAccountName(getPlayerAccount(Mecanico)), aclGetGroup("Mecanico")) then -- Verifica se existe a acl 'Mecanico', e retorna apenas quem está na acl. local x, y, z = getElementPosition(PlayerSource) -- Pega a posição do cliente. local Cidade = ""..getZoneName(x, y, z).." | "..getZoneName(x, y, z, true).."" -- Pega a localização e cidades. outputChatBox("#FF0000INFO: #FFFFFF"..getPlayerName(PlayerSource).." chamou um mecanico em "..Cidade..", use '/aceitar <nome>' para aceitar.", Mecanico, 255, 255, 255, true) end end RequestCancel[PlayerSource] = setTimer(function() -- Cria um tempo para cancelar a solicitação. outputChatBox("#FF0000INFO: #FFFFFFSeu pedido expirou!", 255, 255, 255, true) killTimer(RequestCancel[PlayerSource]) -- Destroy o tempo de solicitação. end, 5000, 1, PlayerSource) -- Encerra a função do tempo, define o quanto tempo é para destruir a solicitação e quantas vezes fazer isso. else outputChatBox("#FF0000INFO: #FFFFFFVocê já tem uma solicitação em andamento, aguarde.", PlayerSource, 255, 255, 255, true) end end) addCommandHandler("aceitar", function(Mecanico, Comando, Nome) if Comando and Nome then -- Verifica se tem o comando e nome. local Player = getPlayerFromName(Nome) -- Retorna o player do nome destinado como um elemento. if ( Player ) then -- Se tem o player, então: if isTimer(Request[Player]) then -- Se tem uma solicitação, então: local x, y, z = getElementPosition(Player) -- Pega a posição do cliente. outputChatBox("#FF0000INFO: #FFFFFFO Mecanico "..getPlayerName(Mecanico).." aceitou seu chamado e está a caminho.", Player, 255, 255, 255, true) outputChatBox("#FF0000INFO: #FFFFFFO Você aceitou o chamado do "..getPlayerName(Player).." e ele te enviou a localização.", Mecanico, 255, 255, 255, true) Blip[Mecanico] = createBlip(x, y, z, 0, 0, 0, 0, 255, Mecanico ) -- Cria um blip fixo na posição do cliente apenas para o mecanico. DestroyBlip[Mecanico] = setTimer(function() -- Cria um timer para destruir o blip. destroyElement(Blip[Mecanico]) -- Destroi o blip. end, 60000, 1, Mecanico) -- Encerra a função do timer e define quanto tempo é para destruir e quantas vezes repetir a função. killTimer(RequestCancel[Player]) -- Destroi a solicitação do player. else -- Se não houver o player, então: outputChatBox("#FF0000INFO: #FFFFFFO player não tem um chamado.", Mecanico, 255, 255, 255, true) end else outputChatBox("#FF0000INFO: #FFFFFFO player não foi encontrado", Mecanico, 255, 255, 255, true) end end end) addEventHandler("onPlayerQuit", root, function() -- Destruir o tempo caso o player dê quit. if isTimer(Request[source]) or isTimer(DestroyBlip[source]) then killTimer(RequestCancel[source]) killTimer(DestroyBlip[source]) end end)
  4. além desse addCommandHandler, crie mais 2, um para aceitar e outro para recusar, depois quando um player executar um desses dois comandos basta verificar se eles tem chamados para ser aceito por elementData.
  5. Te recomendo ver videos do youtube e aprender a ler a wiki de imediato, tudo você consegue resolver vendo a wiki, só saber pesquisar, leia o tópico Tutorias em Geral e veja o que lhe ajuda de começo, também veja os videos que estão demonstrando a Aqui. Fora isso caso tenha dúvidas use comunidades de scripts, este forum e o discord do mta.
  6. Teria por editBox, salvando as mensagens em algum banco de dados e etc.
  7. Use bindKey e onPlayerChat, quando o player realizar o evento/função guarde em uma tabela, depois tire as informações da tabela e coloque no painel que você criou. -- Bind keys para novos chats bindKey (players, "u", "down", "chatbox", "DeepWeb") --bindKey (elemento, tecla, estado, func, Comando) -- Evento ( Geralmente para chat local ) addEventHandler("onPlayerChat", root, function)
  8. Fiz um exemplo básico, agora é só aplicar. ( Me perdoa pela indentação ) Para verificar o tempo da solicitação e se já existe solicitação use setTimer e killTimer para remover o timer caso o player morra, quite ou algo do tipo. addCommandHandler("chamar", function(playerSource, Comando, ID) if ID and tonumber(ID) then -- Se tem o id e for um número, então: local playerID = tonumber(ID) -- Retorna o id definido. if playerID then -- Se tem o id, então: local targetPlayer, targetPlayerName = getPlayerID(playerID) if targetPlayer then -- Se existir o jogador online, então: outputChatBox("Você enviou solicitação para o id "..ID.." ( "..getPlayerName(targetPlayer).." )", playerSource, 255, 255, 255, true) else -- Se não existir jogador online, então: outputChatBox("O jogador não está na cidade ou não foi encotrado.", playerSource, 255, 255, 255, true) end end else -- Se não tiver o id ou o argumento 1 não for um numero, então: outputChatBox("'Sintaxe incorreta, use: '/chamar <ID DO JOGADOR>'", playerSource, 255, 255, 255, true) end end) --[[ █▀▀█ █▀▀▀ █▀▀█ █▀▀█ █▀▀█ ▀█▀ █▀▀▄ █▄▄█ █▀▀▀ █░▄▄ █▄▄█ █▄▄▀ ░█░ █░▒█ █░░░ █▄▄▄ █▄▄█ █░▒█ █░▒█ ▄█▄ █▄▄▀ ]]-- function getPlayerID(id) v = false for i, player in ipairs (getElementsByType("player")) do if getElementData(player, "ID") == id then v = player break end end return v end
  9. --[[ █▀▀█ █▀▀▀█ █▀▄▀█ █▀▀▀█ █░▒█ █▀▀▀█ █▀▀█ █▀▀█ █░░░ █░░▒█ █▒█▒█ █░░▒█ █░▒█ ▀▀▀▄▄ █▄▄█ █▄▄▀ █▄▄█ █▄▄▄█ █░░▒█ █▄▄▄█ ▀▄▄▀ █▄▄▄█ █░▒█ █░▒█ ]] local Sucesso = prob(90) -- Retorna a função util que enviei antes, agora definido a porcentagem ( 90 ). if Sucesso then -- Se a chance for dentro dos 90%, então: -- Exibe 1 mensagem no chat. else -- Se não, então: -- Exibe outra mensagem no chat. end --[[ █▀▀▀ █░▒█ █▄░▒█ █▀▀█ █▀▀█ █▀▀▀█ █░▒█ ▀▀█▀▀ ▀█▀ █░░░ █▀▀▀ █░▒█ █▒█▒█ █░░░ █▄▄█ █░░▒█ █░▒█ ░▒█░░ ░█░ █░░░ █░░░ ▀▄▄▀ █░░▀█ █▄▄█ █░▒█ █▄▄▄█ ▀▄▄▀ ░▒█░░ ▄█▄ █▄▄█ ]]-- function prob(numberOfChance) local factor = numberOfChance / 100 -- Pega o fator da chance, ou seja, se for 40, então o fator será 0.4. return 10 + (factor * math.random(100)) < numberOfChance -- No começo, eu coloquei um '10', que seria a margem de erro da probabilidade, e também 10% de chance seria bem difícil. Depois, eu multipliquei o nosso fator (0.4, no exemplo citado acima) por um número aleatório de 1 a 100, pra gerar alguma aleatoriedade bem simples. Caso o resultado dessa multiplicação for menor que o número da chance, então ele é verdadeiro. Quanto menor o número, mais difícil fica. end
  10. Não sei se ira lhe ajudar, mas usei isso em um projeto meus e não tive problemas, peguei do discord do mta. Probabilidade por porcentagem. function prob(numberOfChance) local factor = numberOfChance / 100 -- Pega o fator da chance, ou seja, se for 40, então o fator será 0.4. return 10 + (factor * math.random(100)) < numberOfChance -- No começo, eu coloquei um '10', que seria a margem de erro da probabilidade, e também 10% de chance seria bem difícil. Depois, eu multipliquei o nosso fator (0.4, no exemplo citado acima) por um número aleatório de 1 a 100, pra gerar alguma aleatoriedade bem simples. Caso o resultado dessa multiplicação for menor que o número da chance, então ele é verdadeiro. Quanto menor o número, mais difícil fica. end
  11. Isso eu vi ali na função KKKKKK, preciso ver o codigo antes disso para ver como você está definindo a variavel X.
  12. Mande o codigo completo para saber-mos qual é a variavel 'x'. ( Se possivel )
  13. Creio que uns dos erros mais comuns que contem em scripts é criar setTimer varias vezes verifique se isso existe e pense em outra maneira de aplica-lo, exemplo abaixo. setTimer(function() -- Cria o time -- Codigo vai estar aqui end, 10, 0) -- O end fecha a função setTimer, o 10 é a quantidades em milesegundo que a verificação vai ocorrer e 0 quantas vezes vai ocorrer ( Se 0 então fica infinito )
  14. Pelo que entendi, sim você pode chamar ela usando o nome da variável ou: -- Shared Config = { ["Acl"] = "Console", } -- Para puxar no client ou server = Config["Acl"] ou -- Shared Grupo = "Console" -- Para puxar no client ou server = Grupo print(Grupo) -- Vai mostrar no config o que tiver entre as aspas do shared.
  15. Qual é sua duvida? quer um abrir um painel apertando k por exemplo? ( Usando bindKey ) bindKey( "k", "down", function( ) -- Cria função if ( guiGetVisible ( PainelGUI ) == false ) then -- Verifica se o painel esta fechado guiSetVisible( PainelGUI, true ) -- Mostra o painel showCursor( true ) -- Ativa o cursor else -- Se não estiver fechado, então: guiSetVisible( PainelGUI, false ) -- Tira o painel showCursor( false ) --Desativa o cursor end end)
  16. Não entendi muito bem sua pergunta, mas para saber se um elemento possui o element data use getElementData. --Exemplo 1 local Sede = getElementData(localPlayer, "Sede") or 0 if Sede then -- Verifica se tem o elemento "Sede" nele, então: end --Exemplo 2 local Sede = getElementData(localPlayer, "Sede") or 0 if Sede >= 10 then -- Verifica se a sede é maior ou igual a 10, se for então: end --Exemplo 3 local Teste = createElement("SaldoGeral") -- Cria um elemento setElementData(Teste, "Sd_Geral", 1000) -- Seta um element Data no elemento. local SaldoBank = getElementData(Teste, "Sd_Geral") or 0 -- Retorna o saldo. se não for isso, explica melhor um pouquinho pra ver se posso ajudar...
  17. Use onClientKey e onPlayerCommand. Com o onClientKey você pode bloquear as teclas que quiser, assim deixando somente o f8 para digitar os seus comandos, assim quando ele apertar qualquer outra tecla que não for o f8 você pode retornar uma mensagem e assim vai. O onPlayerCommand você pode restringir quais comandos ele pode usar quando caido.
  18. Tenta usar o exemplo que mandei em cima, utilizo em todos os meus projetos, também acredito que usar x * posição seria melhor para adpatar a resolução maiores e menores, Antigamente já tinha tentado usar o isCursorOnElement mas não deu por alguma razão, por isso enviei este. local screen = { guiGetScreenSize() } local x, y = (screen[1]/1336), (screen[2]/768) addEventHandler("onClientRender", root, function() if isCursorInPosition(x * 500, y * 500, x * 500, y * 500) then dxDrawRectangle(x * 500, y * 500, x * 500, y * 500, tocolor(143, 9, 237, 255), false) else dxDrawRectangle(x * 500, y * 500, x * 500, y * 500, tocolor(21, 21, 21, 255), false) end end) function isCursorInPosition ( x, y, width, height ) if ( not isCursorShowing( ) ) then return false end local sx, sy = guiGetScreenSize ( ) local cx, cy = getCursorPosition ( ) local cx, cy = ( cx * sx ), ( cy * sy ) return ( ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) ) end
  19. local markers = { -- X, y, z, se true cria o blip, se false não. {1212.459, -1312.881, 13.556, true}, } addEventHandler ("onResourceStart", resourceRoot, function() for _,pos in ipairs(markers) do local marker = createMarker(pos[1], pos[2], pos[3] -1, 'cylinder', 1.2, 255, 255, 255, 255) -- Tamanho/cor do marker pode alterar. addEventHandler ("onMarkerHit", marker, FuncTeste) -- Adiciona o evento ao marker. if pos[4] == true then local blip = createBlipAttachedTo(marker, 56) -- Cria o blip em cima do marker. setBlipVisibleDistance(blip, 500) -- Distancia que é visto o blip no radar. end end end) local FuncTeste = function() if getElementType(source) == "player" then outputChatBox(" ", source, 255,255,255, true) outputChatBox("Para começar a trabalhar, digite #ffff00/trabalhar ", source, 255,255,255, true) outputChatBox(" ", source, 255,255,255, true) end end Assim cria os markers e adiciona uma função a ele, testa certin para ver se funciona, pois não testei.
  20. Para excluir use o comando do painel admin, '/unregister conta', assim apagara a conta e automaticamente o id. ( Muita atenção, caso apague a conta não terá como retorna-la )
  21. function isCursorInPosition ( x, y, width, height ) if ( not isCursorShowing( ) ) then return false end local sx, sy = guiGetScreenSize ( ) local cx, cy = getCursorPosition ( ) local cx, cy = ( cx * sx ), ( cy * sy ) return ( ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) ) end --[[EXEMPLO]]-- if isCursorInPosition(x, y, w, h) then -- Se o cursor estiver na posição tal, então: else -- ou se o cursor não estiver na posição, então: end
  22. Use o triggerServerEvent, a função aclGroupAddACL só funciona do lado servidor, então crie a função no lado server e traga ele pro client usando o triggerServerEvent.
  23. No onVehicleExit já vem o elemento do veiculo no evento, sempre será "source", então não é necessario o getPedOccupiedVehicle. No onVehicleExit EU ACHO que não tem como fazer a verificação se ele esta dentro do carro, por ele ja esta morto, por isso eu setei o elemento numa tabela junto com o assento. --[[ █▀▀▀█ █▀▀▀ ▀▀█▀▀ █▀▀█ █▀▀█ █▀▀▀ █░░░ █▀▀▀ █▀▄▀█ █▀▀▀ █▄░▒█ ▀▀█▀▀ █▀▀▀█ ▀▀▀▄▄ █▀▀▀ ░▒█░░ █▄▄█ █▄▄▀ █▀▀▀ █░░░ █▀▀▀ █▒█▒█ █▀▀▀ █▒█▒█ ░▒█░░ █░░▒█ █▄▄▄█ █▄▄▄ ░▒█░░ █░▒█ █░▒█ █▄▄▄ █▄▄█ █▄▄▄ █░░▒█ █▄▄▄ █░░▀█ ░▒█░░ █▄▄▄█ ]]-- local theVehicle = { Element = nil, Seat = 0 } -- Cria a tabela addEventHandler("onVehicleEnter", root, function(theP) if source then -- Se tiver o veiculo, então: theVehicle = { Element = source, Seat = getPedOccupiedVehicleSeat(theP) } -- Coloca o element do carro e o assento. end end) --[[ █▀▀▄ █▀▀▀ █▀▀▀█ ▀▀█▀▀ █▀▀█ █░▒█ ▀█▀ █▀▀█ █░▄▀ █▀▀▀█ █▀▄▀█ █▀▀█ ▀█▀ █░▒█ █▀▀▀ ▀▀▀▄▄ ░▒█░░ █▄▄▀ █░▒█ ░█░ █▄▄▀ █▀▄░ █░░▒█ █▒█▒█ █▀▀▄ ░█░ █▄▄▀ █▄▄▄ █▄▄▄█ ░▒█░░ █░▒█ ▀▄▄▀ ▄█▄ █░▒█ █░▒█ █▄▄▄█ █░░▒█ █▄▄█ ▄█▄ ]]-- local destruiKombiExit = function(thePlayer, seat) if seat == 0 and getElementData(source, "kombiEntregas") == true then -- Verificação desejada destroyElement(source) -- Destruir carro end end addEventHandler("onVehicleExit", getRootElement(), destruiKombiExit) --[[ █▀▀▄ █▀▀▀ █▀▀▀█ ▀▀█▀▀ █▀▀█ █░▒█ ▀█▀ █▀▀█ ░░ █▀▄▀█ █▀▀▀█ █▀▀█ █▀▀█ █▀▀▀ █▀▀█ █░▒█ █▀▀▀ ▀▀▀▄▄ ░▒█░░ █▄▄▀ █░▒█ ░█░ █▄▄▀ ▀▀ █▒█▒█ █░░▒█ █▄▄▀ █▄▄▀ █▀▀▀ █▄▄▀ █▄▄▀ █▄▄▄ █▄▄▄█ ░▒█░░ █░▒█ ▀▄▄▀ ▄█▄ █░▒█ ░░ █░░▒█ █▄▄▄█ █░▒█ █░▒█ █▄▄▄ █░▒█ ]]-- local destruirKombiMorte = function () if theVehicle.Seat == 0 then -- Se o assento for o p1, então: if getElementData(theVehicle.Element, "kombiEntregas") == true then destroyElement(theVehicle.Element) -- Destroi o elemento Carro. end end end addEventHandler("onPlayerWasted", root, destruirKombiMorte)
  24. KKKKKKKboa mano, use sempre assim oh... if aclGetGroup(v[1]) and isObjectInACLGroup('user.'..getAccountName(getPlayerAccount(player)), aclGetGroup(v[1])) then já verifica se existe a acl e não gera erro...
×
×
  • Create New...