Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,994
  • Joined

  • Last visited

  • Days Won

    184

Everything posted by Lord Henry

  1. Faça assim: server.lua addEventHandler ("onPlayerBan", root, function (banPointer) -- Neste evento, source = quem foi banido. if getElementData(source, "teste") then -- Se o jogador banido tem essa data, então: outputChatBox (getPlayerName(source).." não pode ser banido. (banimento negado)", root, 255, 0, 0) -- Manda isso pra geral. removeBan (banPointer) -- Desbane o jogador antes de ser chutado pelo ban, fazendo com que ele nem seja chutado. -- ESTE RESOURCE PRECISA TER ACESSO ADMIN PARA REMOVER O BAN. end end) Eu recomendo fortemente que não use elementData para este objetivo, pois é facilmente burlável e jogadores que deveriam ser banidos podem começar a se proteger de banimentos. Em vez disso, use isso: if getAccountName(getPlayerAccount(source)) == "myAccountName" then -- Se o jogador estiver logado nessa conta, então: Assim enquanto o jogador estiver logado nessa conta específica, ele não poderá ser banido.
  2. Isso acontece pois source não é quem foi banido e sim quem baniu o jogador. Além disso, o evento onBan não pode ser cancelado.
  3. A fila está gigante mesmo. Não vale a pena comprar.
  4. Tente com fxAddBlood Na próxima não vá no meu perfil tentar resposta mais rápida. Mantenha-se nos tópicos.
  5. É um evento acionado muitas vezes. Você precisa adicionar um verificador para considerar somente os comandos específicos que você quer registrar no log. Se não, até o /say das mensagens será registrado.
  6. Use isso: addVehicleUpgrade removeVehicleUpgrade
  7. Use o evento onVehicleEnter que é ativado DEPOIS que o jogador entrou no veículo. E dentro da função dele, coloque um removePedFromVehicle para chutar o jogador para fora do veículo. Seria interessante também colocar um setVehicleDoorOpenRatio para fechar as portas do veículo para evitar outras tentativas de furto.
  8. Olá. Forçar cliques não tem como. Só é possível forçá-lo a usar /comandos que foram criados com addCommandHandler. Se quiser, use isso: ExecuteCommandHandler
  9. @n0_name Não use modificações no seu GTA. Deixe-o limpo para evitar problemas no MTA.
  10. Seria engraçado essa censura de substituição, mas é inútil quando os jogadores realmente querem ofender, pois eles mesmos escrevem de outra forma que não pega no filtro. Por exemplo, em vez de usar "fdp" ele usaria "f.dp" ou outras variações com símbolos ou espaços para escapar da sua censura. Entendo seu objetivo de manter o respeito entre os jogadores, mas nesse caso é mais efetivo manter moderadores online para fazer essas pequenas punições de mutar / kickar os jogadores.
  11. @migsfiveMsubstitua isso: setPedArmor(source, 100) Por isso: setPedArmor(source, 0)
  12. Tente utilizar o programa Wine para executar o mtasa.exe no Linux.
  13. @Cortes na próxima vez utilize o botão <> do fórum para adicionar scripts. Imagens você deve upar no site imgur e colar o link direto da imagem (o link direto aparece nas opções de compartilhamento da imagem no site)
  14. Caso queira fazer com interpolateBetween, troque essas funções no client.lua: function dxFade(showing, maxValue, theDuration, theType, thePeriod, theAmplitude, theOvershoot) local start = getTickCount() -- Marca o instante do início da animação. if showing then -- Se é para fazer fade-in, então: alp = 0 -- Seta o alpha em 0 para começar tudo invisível. function renderIn() -- Executa essa função a cada frame. (onClientRender) local now = getTickCount() -- Obtém o instante deste frame (ms). local endTime = start + theDuration -- Calcula e obtém o instante (ms) que vai acabar a animação. local elapsedTime = now - start -- Calcula quantos ms passaram desde que começou a animação. local duration = endTime - start -- Calcula quantos ms faltam para finalizar a animação. local progress = elapsedTime / duration -- Calcula o progresso atual da animação de 0 até 1. alp = interpolateBetween (0, 0, 0, maxValue, 0, 0, progress, theType, thePeriod, theAmplitude, theOvershoot) -- Aplica o interpolate no alpha. -- É possível interpolar até 3 valores diferentes ao mesmo tempo, desde que eles comecem e terminem ao mesmo tempo. Útil para interpolar alphas diferentes do painel. if alp >= maxValue then -- Se o alpha atingiu o valor de objetivo, então: removeEventHandler("onClientRender", root, renderIn) -- Para de calcular essa interpolação a cada frame, pois ela foi concluída. end end addEventHandler("onClientRender", root, renderIn) -- Começa a calcular a interpolação a cada frame. else -- Se é para fazer fade-out, então: alp = maxValue -- Alpha começa no valor do objetivo para começar tudo visível. function renderOut() -- Igual a parte de cima, mas faz o caminho inverso, interpolando do valor objetivo até 0. local now = getTickCount() local endTime = start + theDuration local elapsedTime = now - start local duration = endTime - start local progress = elapsedTime / duration alp = interpolateBetween (maxValue, 0, 0, 0, 0, 0, progress, theType, thePeriod, theAmplitude, theOvershoot) if alp <= 0 then -- Se o alpha chegou a 0, então: removeEventHandler("onClientRender", root, renderOut) -- Para de calcular essa interpolação a cada frame, pois ela foi concluída. end end addEventHandler("onClientRender", root, renderOut) -- Perceba que para evitar conflitos, essa função tem nome diferente do fadeIn. end end addEvent("render_UI", true) addEventHandler("render_UI", resourceRoot, function(state) -- state = true (faz o painel aparecer) | state = false (faz o painel desaparecer) if state then -- Se o painel deve aparecer, então: background = dxCreateTexture ("background.jpg", "argb", true, "clamp") -- Salva a imagem numa variável para ser mais leve no processamento. addEventHandler("onClientRender", root, drawLoginPanel) -- Começa a renderizar o painel. setTimer(function() addEventHandler("onClientClick", root, clickOnLoginPanel) -- Depois de pouco mais de 1 segundo, faz os botões DX funcionarem. end, 1100, 1) else -- Se o painel deve desaparecer, então: removeEventHandler("onClientClick", root, clickOnLoginPanel) -- Remove a função de clique dos botões. setTimer(function() removeEventHandler("onClientRender", root, drawLoginPanel) -- Depois de pouco mais de 1 segundo, para de renderizar o painel e apaga a imagem da variável. destroyElement(background) background = nil end, 1100, 1) end showCursor(state) -- Mostra/oculta o cursor do mouse quando mostra/oculta o painel. dxFade (state, 255, 1000, "Linear") -- Aciona o interpolateBetween com duração de 1000 ms (1 segundo). O valor vai de 0 até 255 e vice-versa. end) Você também pode utilizar a função útil dxFade que eu criei. Detalhes na Wiki.
  15. Corrija a indentação do seu código, pois desse jeito está ilegível. Faça seu painel otimizado para a proporção 16:9 de tela que é a mais comum. (também é a proporção utilizada por monitores HD, Full HD e Ultra HD) Escolha a resolução 1366x768 ou 1280x720 no jogo, ambas são 16:9. A sua resolução atual 1440x900 é proporção 16:10. Sua lógica de incrementar o valor alpha com um timer repetitivo faz sentido, mas dessa forma você não consegue garantir com precisão a duração do fade, por isso que usamos o interpolateBetween. Porém você errou ao usar showMenu como nome de função ali no seu "onClientRender" pois ele já está sendo usado como variável. Vou mostrar como fazer usando o setTimer que você tentou: client.lua server.lua local loginMarker = createMarker(2245.528, -1260.809, 22.95, "cylinder", 1.5, 255, 255, 255, 50) addEventHandler("onMarkerHit", loginMarker, function(hitElement) -- Ativa essa função quando algum elemento colidir no loginMarker. if hitElement and getElementType(hitElement) == "player" then -- Se o elemento que colidiu é um jogador, então: -- if isGuestAccount (getPlayerAccount(hitElement)) then -- Se o jogador que colidiu estiver deslogado, então: triggerClientEvent(hitElement, "render_UI", resourceRoot, true) -- Mostra o painel pra ele. -- end end end)
  16. Não temos como adivinhar o problema sem mais informações. Alguma mensagem de erro? Se tiver, mande print. Ou algum vídeo mostrando o que acontece ao tentar abrir o MTA.
  17. Não existe uma animação assim. Você pode estar confundindo com aquela que ele toma um tiro no estômago, ajoelha e morre. O nome dessa é KO_shot_stom Também tem outra que ele leva as mãos ao rosto, mas ele não agacha, apenas cai para trás e morre. É a KO_shot_face A animação que ele fica com a mão no rosto por estar asfixiado é a gas_cwr enquanto vai pra trás abaixado.
  18. db = dbConnect("sqlite", "dados.db") -- Cria um arquivo de database chamado dados.db dentro da pasta do resource. dbExec(db, "CREATE TABLE IF NOT EXISTS porta_malas (ID INTEGER, quantidade REAL, nome TEXT)") -- Cria uma tabela com 3 colunas. A primeira de números inteiros e a segunda de números reais e a terceira com texto. dbFree (db) -- Salva os dados. destroyElement(db) -- Fecha a conexão com o banco de dados. De resto, pra manipular esse banco de dados, inserir valores, etc. Vc vai precisar estudar SQL.
  19. Você pode simplesmente setar uma elementData no veículo que não deseja remover com setElementData. O script deve ignorar veículos com essa elementData específica. setTimer( function() for _, carro in ipairs(getElementsByType("vehicle")) do if not getElementData(carro, "permanente") then -- Se o veículo não tem a elementData "permanente", ele será deletado pelo script. local jogadores = getVehicleOccupant(carro) if not jogadores then destroyElement(carro) --exports["FAST_a__infobox"]:addBox(root, "Todos os carros desocupados Foram Removidos", "Todos os carros desocupados Foram Removidos.") restartResource(resource) -- resource = getThisResource() outputDebugString ("O resource de Deletas carros vazios foi reiniciado Automaticamente para evitar bugs.") end end end end, Minutos*60000, 0) Outra forma de fazer seria setar o ID do veículo para algo específico que o resource deve ignorar usando setElementID Minha sugestão é setar ID "0" em veículos usados por NPCs por exemplo. Que não podem ser deletados pois causariam bugs em seus respectivos resources. E no script você faz a mesma coisa só que no lugar do getElementData você usa getElementID.
  20. 1) Mantenha o padrão de usar aspas "duplas" em vez de aspas 'simples' nas suas strings. 2) Troque a linha do triggerClientEvent por isso: if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(element)), aclGetGroup ("Admin")) then -- Troque Admin pela ACL Group que vc quer. triggerClientEvent(element, "openPainel", element) else -- Linha opcional. outputChatBox("Acesso negado.", element, 255, 0, 0) -- Linha opcional. end
  21. Não temos como adivinhar sem o código. Mostre o código onde tem a parte do BindKey no F4.
  22. Tópico movido para a seção de Programação em Lua.
×
×
  • Create New...