Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,953
  • Joined

  • Last visited

  • Days Won

    177

Everything posted by Lord Henry

  1. Mano, não irei programar seu resource para você. Quando abrir o painel, coloque aquela elementData no jogador (ou outra data, se preferir). Depois remova essa data (coloque valor false) ao fechar o painel. É bem simples. Pelo que parece, você também está usando a variável Chest para definir se o painel está aberto ou não, dai nesse caso é mais fácil ainda. local theKeys = {"F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12"} -- Obs: Por medidas de segurança, a tecla F8 não aciona este evento e portanto não pode ser bloqueada. addEventHandler("onClientKey", root, function (button, press) if Chest then -- Se o painel está aberto, então: if press then for i,key in pairs(theKeys) do if button == key then cancelEvent() outputChatBox("Tecla bloqueada.") -- Apenas para testes, remova na versão final. break end end end end end)
  2. Ou você pode setar rotação nos braços do jogador algemado em vez de setar uma animação. Dai é só ficar chamando todo frame enquanto ele estiver com elementData de algemado. -- Client-side: function setCuffed(thePlayer) -- Função que seta a "animação" de algemado. -- Left setElementBoneRotation(thePlayer, 32, 26.574, 61.3375, 59.2065) setElementBoneRotation(thePlayer, 33, 27.844, 15.364, 46.406) setElementBoneRotation(thePlayer, 34, -81.0185, 342.875, 326.118) -- Right setElementBoneRotation(thePlayer, 22, 338.839, 53.4935, 298.452) setElementBoneRotation(thePlayer, 23, 307.687, 22.11, 313.594) setElementBoneRotation(thePlayer, 24, 96.0475, 357.883, 56.739) updateElementRpHAnim(thePlayer) -- Aplica as rotações nos ossos do thePlayer neste frame. end addEventHandler("onClientPedsProcessed", root, function() -- Chama essa função a cada frame, quando os personagens são processados. for _,player in pairs(getElementsByType("player", root, true)) do -- Para cada jogador próximo, faça: if getElementData(player, "algemado") then -- Se o jogador está com a elementData "algemado" então: setCuffed(player) -- Seta a animação de algemado nele durante 1 frame. end end end) -- Server-side: addCommandHandler("algemar", function(theCop, cmd, name) -- Comando que vai algemar/desalgemar alguém. Use /algemar NomeDoPlayer if not isObjectInACLGroup ("user."..getAccountName(getPlayerAccount(theCop)), aclGetGroup ("Policia")) then -- Se quem executou o comando não está na ACL Group "Policia", então: outputChatBox("Acesso negado. Você precisa ser um policial para usar este comando.", theCop, 255, 50, 50) return -- Cancela a execução dessa função aqui e nem lê o resto. end if not name then -- Se não foi declarado nada depois do /algemar, então: outputChatBox("Erro: É necessário informar o nome do jogador a ser algemado/desalgemado.", theCop, 255, 50, 50) return end local thePlayer = getPlayerFromName(name) if thePlayer then -- Se existe o jogador com o nome informado, então: (o nome precisa ser exato, incluindo códigos de cores) if getPedOccupiedVehicle(thePlayer) then -- Não permite algemar/desalgemar jogadores que estão em veículos. outputChatBox("Erro: Este jogador está em um veículo, não é possível algemar/desalgemar ele.", theCop, 255, 50, 50) return end if getElementData(thePlayer, "algemado") then -- Se o jogador já tem a data de algemado, então: setElementData(thePlayer, "algemado", false) -- Remove a data dele, parando a animação de algemado dele. disenableControls(thePlayer, true) -- Habilita os controles do jogador. outputChatBox("Você desalgemou o jogador "..name, theCop, 255, 255, 0) else -- Se o jogador não tem a data de algemado, então: setElementData(thePlayer, "algemado", true) -- Coloca a data nele, a animação de algemado será aplicada nele. disenableControls(thePlayer, false) -- Desabilita os controles do jogador. setPedWeaponSlot (thePlayer, 0) -- Coloca o slot de arma desarmado no jogador. Para ele não ficar segurando armas enquanto algemado. outputChatBox("Você algemou o jogador "..name, theCop, 255, 255, 0) end else -- Se não existe um jogador com o nome informado (ou o nome informado não é exato), então: outputChatBox("Erro: Jogador não encontrado: "..name, theCop, 255, 50, 50) end end) function disenableControls(thePlayer, state) -- Função que ativa/desativa alguns controles específicos do jogador, pra n ficar repetindo código. local controls = {"fire", "action", "jump", "sprint", "aim_weapon", "next_weapon", "previous_weapon", "enter_exit"} for _,ctrl in pairs (controls) do -- Para cada controle da lista, faça: toggleControl (thePlayer, ctrl, state) -- Ativa/desativa o controle. end end
  3. Defina o parâmetro interruptable da animação como false.
  4. @SUPERNATUR4L assim funciona: local theKeys = {"F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12"} -- Obs: Por medidas de segurança, a tecla F8 não aciona este evento e portanto não pode ser bloqueada. addEventHandler("onClientKey", root, function (button, press) if press then for i,key in pairs(theKeys) do if button == key then if getElementData(localPlayer, "Porta-Malas") then cancelEvent() outputChatBox("Tecla bloqueada.") -- Apenas para testes, remova na versão final. else -- Apenas para testes, remova na versão final. outputChatBox("Você não tem a elementData necessária. Tecla liberada.") -- Apenas para testes, remova na versão final. end break end end end end)
  5. Essa variável player não faz sentido. E você está usando um evento client-side, sendo que para mexer na vida dos jogadores você deve fazer server-side. Utilize o evento onPlayerDamage em vez disso, pois é um evento server-side. function headDamage (attacker, weapon, bodypart) if (bodypart == 9 and attacker and attacker ~= source) then -- Se o dano recebido foi na cabeça e não foi causado por si mesmo, então: cancelEvent() -- Cancela o dano normal que o tiro daria na cabeça. local hp = getElementHealth(source) -- Obtém a vida atual do jogador que tomou o tiro. setElementHealth(source, hp - 34) -- Subtrai 34 da vida atual do jogador. -- Primeiro tiro: 100 >> 66 -- Segundo tiro: 66 >> 32 -- Terceiro tiro: 32 >> -2 (morre) end end addEventHandler ("onPlayerDamage", root, headDamage)
  6. Mantenha-se no seu tópico original. Não fique criando outros tópicos iguais.
  7. Na Wiki já tem um exemplo que faz literalmente isso. for i = 321, 18630 do removeWorldModel(i, 10000, 0, 0, 0) end setOcclusionsEnabled(false) -- Also disable occlusions when removing certain models setWaterLevel(-5000) -- Also hide the default water as it will be full of holes Fonte: https://wiki.multitheftauto.com/wiki/RemoveWorldModel#Example
  8. function renderBox() dxDrawImage(...) -- Insira a imagem aqui, junto dos valores de posição e tamanho. end addCommandHandler("ola", function() -- Comando para mostrar a imagem. addEventHandler("onClientRender", root, renderBox) -- Começa a mostrar a imagem. setTimer(function() -- Depois de 5 segundos: removeEventHandler("onClientRender", root, renderBox) -- Para de mostrar a imagem. end, 5000, 1) end)
  9. Faça tudo client-side. Exceto a parte de criar o veículo e de dar o dinheiro.
  10. Se o problema for somente em um servidor específico, entre em contato com a staff dele para obter suporte. Se for em todos os servers, talvez você esteja com problemas no seu mouse.
  11. 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.
  12. 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.
  13. A fila está gigante mesmo. Não vale a pena comprar.
  14. Tente com fxAddBlood Na próxima não vá no meu perfil tentar resposta mais rápida. Mantenha-se nos tópicos.
  15. É 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.
  16. Use isso: addVehicleUpgrade removeVehicleUpgrade
  17. 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.
  18. 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
  19. @n0_name Não use modificações no seu GTA. Deixe-o limpo para evitar problemas no MTA.
  20. 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.
  21. @migsfiveMsubstitua isso: setPedArmor(source, 100) Por isso: setPedArmor(source, 0)
  22. Tente utilizar o programa Wine para executar o mtasa.exe no Linux.
  23. @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)
  24. 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.
×
×
  • Create New...