-
Posts
3,990 -
Joined
-
Last visited
-
Days Won
182
Everything posted by Lord Henry
-
Ative a textura com o evento onPlayerJoin e desative com onPlayerQuit. Vai precisar usar triggerClientEvent.
-
Teste e descubra.
-
O floor arredonda para baixo e o ceil arredonda para cima. No exemplo: Floor: 1.276813074565884 >> 1.270000000000000 >> 1.27 Ceil: 1.276813074565884 >> 1.280000000000000 >> 1.28 Se nenhum dos dois for declarado, ele arredonda para o mais próximo, por exemplo: 1.556 >> 1.56 1.555 >> 1.55 1.554 >> 1.55
-
Sua função de redução está diferente da minha. Estou usando assim: function math.round (number, decimals, method) decimals = decimals or 0 local factor = 10 ^ decimals if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor else return tonumber(("%."..decimals.."f"):format(number)) end end E no código que está chamando o math.round, está faltando parâmetro como eu já havia mencionado da outra vez. -- Como está: math.round(tonumber(ratio[i]), 2) -- Como deve ser: math.round (tonumber(ratio[i]), 2, "floor") E a função só funciona direito client-side.
-
Mostre a parte do script onde o redutor é chamado pelo código e a função do redutor.
-
No exemplo em questão ele por padrão já deixa desativado. Ele só ativa ao usar o /enable. Só adicionar uma condição que verifica se txd já existe. addCommandHandler ("ativartexturas", function () if not txd then txd = engineLoadTXD ("Diretorio da textura") engineImportTXD (txd, id) outputChatBox ("Texturas ativadas!", 0, 255, 0) else outputChatBox ("Texturas já estão ativadas!", 255, 255, 0) end end) addCommandHandler ("desativartexturas", function () if isElement (txd) then destroyElement (txd) txd = nil outputChatBox ("Texturas desativadas!", 255, 0, 0) else outputChatBox ("Texturas já estão desativadas!", 255, 255, 0) end end)
-
Fiz este exemplo que você pode ativar e desativar a textura da Grove Street em seus respectivos modelos usando /enable e /disable. addCommandHandler ("enable", function () txd = engineLoadTXD ("Los Santos/lae2roadshub.txd") -- Neste exemplo, substitui a textura da Grove Street. engineImportTXD (txd, 17595, 17597, 17610, 17611, 17612, 17613) -- Aplica a textura aos respectivos objetos. end) addCommandHandler ("disable", function () if isElement (txd) then -- Se existe a textura, então: destroyElement (txd) -- Deleta a textura e volta ao original. txd = nil end end) Da mesma forma, você pode usar para ativar ou desativar texturas de lojas.
-
Dai nesse caso é mais trabalhoso de fazer, pois como vc já deve saber, precisa informar todos os IDs de todas as ruas que terão a textura substituída. Mas basicamente funciona da mesma forma. A única coisa que não vai ter é a parte do DFF, já que não há substituição de modelo, apenas de texturas.
-
É um voto de agradecimento que vc dá a um comentário no fórum que ajuda na reputação do autor. Só vc ir em baixo do comentário e passar o mouse em cima daquele ícone de coração. Dai vai aparecer vários tipos de reações. Selecione aquele Troféu roxo, que indica que vc está agradecendo pela resposta.
-
Tem sim. txd = engineLoadTXD ('premier.txd') engineImportTXD (txd, 426) dff = engineLoadDFF ('premier.dff', 426) engineReplaceModel (dff, 426) function remodVehicle (cmd) -- Função que ativa/desativa a modificação do veículo Premier. Ex: /offPremier if cmd == "onPremier" then engineImportTXD (txd, 426) engineReplaceModel (dff, 426) outputChatBox ("Modificação do veículo #FFFFFF'Premier'#00FF00 ativada.", 231, 217, 176, true) elseif cmd == "offPremier" then engineRestoreModel (426) outputChatBox ("Modificação do veículo #FFFFFF'Premier'#FF0000 desativada.", 231, 217, 176, true) end end addCommandHandler ("onPremier", remodVehicle) addCommandHandler ("offPremier", remodVehicle) -------------------------------------------------------- Eu ficaria agradecido se você desse um Thanks nas minhas respostas. Assim como mostra a minha assinatura.
-
Eu fiz esse exemplo que funciona por comando, dai cabe a você fazer por painel. As modificações dos veículos estão no mesmo resource. Client-Side txd = {} dff = {} txd[426] = engineLoadTXD ('premier.txd') engineImportTXD (txd[426], 426) dff[426] = engineLoadDFF ('premier.dff', 426) engineReplaceModel (dff[426], 426) txd[489] = engineLoadTXD ('rancher.txd') engineImportTXD (txd[489], 489) dff[489] = engineLoadDFF ('rancher.dff', 489) engineReplaceModel (dff[489], 489) function remodVehicles1 (cmd, id) -- Função que ativa/desativa a modificação do veículo. Ex: /disableVeh 426 if not id then return end if cmd == "enableVeh" then if (dff[tonumber(id)]) then engineReplaceModel (dff[tonumber(id)], tonumber(id)) outputChatBox ("Modificação do veículo #FFFFFF'"..getVehicleNameFromModel (tonumber(id)).."'#00FF00 ativada.", 231, 217, 176, true) end if (txd[tonumber(id)]) then engineImportTXD (txd[tonumber(id)], tonumber(id)) end elseif cmd == "disableVeh" then if (dff[tonumber(id)]) then engineRestoreModel (tonumber(id)) outputChatBox ("Modificação do veículo #FFFFFF'"..getVehicleNameFromModel (tonumber(id)).."'#FF0000 desativada.", 231, 217, 176, true) end end end addCommandHandler ("enableVeh", remodVehicles1) addCommandHandler ("disableVeh", remodVehicles1)
-
Se você desativar o mod de texturas, irá desativar pra todo mundo. Dai não tem vantagem nenhuma usar esse painel, pois é o mesmo que ir no painel admin e desligar o resource.
-
Cara, esqueça essa ideia de pastas. O MTA não trabalha com gerenciamento de diretórios externos ao resource por motivos de segurança. Como eu falei, você pode sim ativar ou desativar resources específicos usando as funções que passei. ---------------------------- Afinal, quais tipos de resource você quer que o jogador desative/ative? Mods de Texturas? Veículos?
-
Para desligar um resource, vc pode usar a função stopResource. Para ligar, use startResource. Obs: O painel que vai fazer isso precisa de permissão admin.
-
Não entendi o que você quer fazer.
-
Como Criar a Função "Pro Staff" Em Um Botão No Painel DX??
Lord Henry replied to Prego22Zika's topic in Programação em Lua
(Resolvido por privado) -
O comando /Chat é com C maiúsculo mesmo? Bom, de qualquer forma descobri que ele gera erro sempre que o comando não está bindado em tecla nenhuma, então coloquei uma condição de verificação antes. Fiz uma série de outras correções também. disallowedCmds = { "say", "teamsay", "me", "Chat" -- Prefira comandos com letra minúscula, para evitar que o jogador use Shift. } addEventHandler ("onClientKey", getRootElement(), function (button, state) -- Executa essa função quando o jogador pressionar ou soltar qualquer tecla. if not state then return end -- Não verifica ao soltar a tecla, somente ao pressionar. if not getElementData (localPlayer, "bindPermission") then -- Se o jogador não tem permissão para usar binds de texto, então: local keys = {} -- Obtém uma lista com todas as teclas com binds de texto. for i, cmd in ipairs (disallowedCmds) do -- Para cada comando da lista, faça: if getBoundKeys (cmd) then -- Se existe alguma tecla com este comando bindado, então: for ii, key in pairs (getBoundKeys (cmd)) do -- Para cada tecla com este comando da lista, faça: table.insert (keys, ii) -- Insere na lista keys, cada tecla bindada a cada comando da lista disallowedCmds. end end end if keys then -- Se existe alguma tecla com bind de texto, então: for _, keyName in pairs (keys) do -- Para cada tecla com bind de texto, faça: if button == tostring (keyName) then -- Se a tecla pressionada está com bind de texto, então: outputChatBox ("Tecla bloqueada, contém bind de texto tecla: "..keyName, 255, 0, 0) -- Avisa o jogador que essa tecla foi bloqueada. cancelEvent () -- Cancela o efeito dessa tecla como se ela nem tivesse sido usada. break -- Sai do loop do FOR para não precisar verificar as demais teclas com bind de texto. end end end end end)
-
Vc está fazendo isso client-side?
-
(respondido acima)
-
Quais erros aparecem? Obs: Não precisa ficar me citando para me responder se só tem eu e você no assunto.
-
Isso aí era pra fazer oq? Bloquear todas as teclas que fazem binds de texto ou bloquear o bug da animação?
-
Ta ae, de nada: function keyCombination (button, state) if button == "w" then if state then setElementData (localPlayer, "button.w", true) else setElementData (localPlayer, "button.w", false) end elseif button == "space" then if state then setElementData (localPlayer, "button.space", true) else setElementData (localPlayer, "button.space", false) end elseif button == "mouse2" then if state then setElementData (localPlayer, "button.mouse2", true) else setElementData (localPlayer, "button.mouse2", false) end end -- Se o jogador está apertando as teclas acima ao mesmo tempo, então: if getElementData (localPlayer, "button.w") and getElementData (localPlayer, "button.space") and getElementData (localPlayer, "button.mouse2") then setElementFrozen (localPlayer, true) -- Congela ele no lugar. if isTimer (bugTimer) then -- Se já existe um timer para descongelá-lo (jogador tenta bugar enquanto já está congelado), então: resetTimer (bugTimer) -- Reinicia o timer para descongelá-lo. else -- Se não tem um timer para descongelá-lo, então: bugTimer = setTimer (setElementFrozen, 500, 1, localPlayer, false) -- Cria o timer. Depois de meio segundo, descongela o jogador. -- O timer reiniciará sempre que o jogador tentar bugar enquanto já está congelado. Dessa forma ele não será descongelado enquanto não parar de bugar. end end end addEventHandler ("onClientKey", getRootElement(), keyCombination)
-
Como Criar a Função "Pro Staff" Em Um Botão No Painel DX??
Lord Henry replied to Prego22Zika's topic in Programação em Lua
Então me passa o painel por privado. Vc está fazendo algo errado. -
Tem. Liste cada comando em uma table e depois verifique se a tecla apertada tem uma bind com algum desses comandos. Se tiver, bloqueia a tecla. -- Lista de comandos que serão BLOQUEADOS se forem bindados. Eles ainda podem ser usados manualmente. disallowedCmds = { "say", "teamsay", "me" } addEventHandler ("onClientKey", root, function (button, state) -- Executa essa função quando o jogador pressionar ou soltar uma tecla. if not state then return end -- Não verifica ao soltar a tecla, somente ao pressioná-la. -- if not getElementData (localPlayer, "bindPermission") then -- Se o jogador não tem permissão de usar binds de texto, então: local keys = {} -- tabela local vazia, será preenchida com todas as teclas que possuem qualquer um dos comandos listados em disallowedCmds. for i, cmd in ipairs (disallowedCmds) do -- Para cada comando da lista, faça: for ii, key in pairs (getBoundKeys (cmd)) do -- Para cada tecla com este comando da lista, faça: table.insert (keys, ii) -- Insere na lista keys, cada tecla bindada a cada comando da lista disallowedCmds. end end if keys then -- Se existe alguma tecla com bind de um dos comandos da lista, então: for _, keyName in pairs (keys) do -- Para cada tecla com bind de um dos comandos da lista, faça: if button == tostring (keyName) then -- Se a tecla usada está com bind de um dos comandos da lista, então: outputChatBox ("Tecla bloqueada: "..keyName, 255, 0, 0) -- Avisa o jogador que essa tecla foi bloqueada. cancelEvent () -- Cancela o efeito dessa tecla como se ela nem tivesse sido usada. break -- Sai do loop do FOR para não precisar verificar as demais teclas com bind dos comandos listados. end end end -- end -- Desativei a verificação de ACL no seu caso. end)
-
Você pode fazer da mesma forma com onClientKey. Quando o jogador pressiona uma das 3 teclas, seta uma data true nele com setElementData, quando ele solta essa tecla, seta a data false. Se ele estiver com as 3 datas como true, kicka ele. Cada tecla pressionada seta uma data diferente. Obs: Precisará usar um triggerServerEvent para poder kickar o jogador, pois a função de kick é server-side somente. Não se esqueça de dar permissão Admin para o resource. client-side function keyCombination (button, state) if button == "w" then if state then -- Se o jogador aperta o botão W, então: setElementData (localPlayer, "button.w", true) -- Seta essa data nele. else -- Se o jogador solta o botão W, então: setElementData (localPlayer, "button.w", false) -- Remove essa data dele. end elseif button == "space" then -- Mesma coisa com os demais botões da combinação. if state then setElementData (localPlayer, "button.space", true) else setElementData (localPlayer, "button.space", false) end elseif button == "mouse2" then if state then setElementData (localPlayer, "button.mouse2", true) else setElementData (localPlayer, "button.mouse2", false) end end -- Se todos os 3 botões estiverem apertados, então: if getElementData (localPlayer, "button.w") and getElementData (localPlayer, "button.space") and getElementData (localPlayer, "button.mouse2") then triggerServerEvent ("keyComboKick", localPlayer) -- Executa a função do server.lua que irá kickar o localPlayer. end end addEventHandler ("onClientKey", getRootElement(), keyCombination) server-side function comboKick () outputChatBox (getPlayerName (client).."#FF0000 foi kickado do servidor. (Motivo: Uso de combinação proibida de teclas: W + Space + Mouse2)", root, 255, 255, 255, true) kickPlayer (client, "Uso de combinação proibida de teclas") end addEvent ("keyComboKick", true) addEventHandler ("keyComboKick", getRootElement(), comboKick) É só substituir o "say" pelo comando utilizado pelo seu chat admin. Por exemplo se você usa "/admchat Texto" para mandar "Texto" para os admins, então só vc trocar o "say" pelo "admchat". Quando vc usa a tecla T e manda uma mensagem, você está na verdade usando o comando /say.