-
Posts
3,985 -
Joined
-
Last visited
-
Days Won
181
Everything posted by Lord Henry
-
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.
-
Quais erros? Não deu erro nenhum aqui. Tem certeza que copiou corretamente o código?
-
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
Sim, vai ficar dessa forma. -
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
Recomendo que não faça painéis DX com objetivo interativo, pois eles são mais pesados e mais complexos de se fazer manutenção. Mas caso você não esteja preocupado com desempenho e queira apenas um painel bonito, siga em frente. Delete toda essa parte: local x, y = guiGetScreenSize () buttonPro = guiCreateButton (screenW * 0.5571, screenH * 0.6602, 200, 49, "Proteção", false) -- Botão de exemplo. addEventHandler ("onClientGUIClick", buttonPro, function () -- Executa essa função ao clicar no buttonPro. if not getElementData (localPlayer, "protegido") then -- Se o jogador não está protegido, então: setElementData (localPlayer, "protegido", true) -- Torna o jogador protegido. outputChatBox ("Você está protegido.", 0, 255, 0) else -- Se o jogador está protegido, então: setElementData (localPlayer, "protegido", false) -- Torna o jogador desprotegido. outputChatBox ("Você está desprotegido.", 255, 0, 0) end end, false) E coloque isso: function Pro (button, state, absoluteX, absoluteY) if Painel == true then if state == "down" then if absoluteX >= (screenW * 0.5586) and absoluteX <= ((screenW * 0.5586) + 200) and absoluteY >= (screenH * 0.5716) and absoluteY <= ((screenH * 0.5716) + 49) then if not getElementData (localPlayer, "protegido") then setElementData (localPlayer, "protegido", true) outputChatBox ("Você está protegido.", 0, 255, 0) else setElementData (localPlayer, "protegido", false) outputChatBox ("Você está desprotegido.", 255, 0, 0) end end end end end addEventHandler ("onClientClick", root, Pro) -
Leia isso e boa sorte: https://wiki.multitheftauto.com/wiki/PT-BR/Introdução_ao_Scripting
-
Bom, nunca fiz bloqueio de teclas então passei metade do dia aprendendo a fazer isso. Consegui fazer ele detectar as teclas que possuem bind de texto e bloquear seu uso caso o jogador não tenha permissão. Você me pediu por privado para fazer via ACL Group, então fiz o bloqueio usando a ACL Group Console como exemplo. Se o jogador não estiver na ACL Group Console, o script bloqueará qualquer bind de texto dele. A parte do bloqueio de binds é feita client-side e a parte de verificar ACL Group é server-side. Server: addEventHandler ("onResourceStart", getResourceRootElement(getThisResource()), function () -- Executa essa função ao iniciar este resource. local everybody = getElementsByType ("player") -- everybody é uma lista com todos os players conectados no servidor, incluindo os deslogados. for i, thePlayer in ipairs (everybody) do -- Para cada jogador que já está no servidor, faça: if isObjectInACLGroup ("user."..getAccountName(getPlayerAccount(thePlayer)), aclGetGroup("Console")) then -- Se este jogador está na ACL Group Console, então: setElementData (thePlayer, "bindPermission", true) -- Permite que este player use teclas com binds de texto. else -- Se ele não está na ACL Group Console, então: setElementData (thePlayer, "bindPermission", false) -- Proíbe que este player use teclas com binds de texto. end end end) addEventHandler ("onPlayerLogin", getRootElement(), function (prev, curr) -- Quando alguém fizer login, executa essa função. if isObjectInACLGroup ("user."..getAccountName(curr), aclGetGroup("Console")) then -- Se o jogador que fez login está na ACL Group Console, então: setElementData (source, "bindPermission", true) -- Permite que este player use teclas com binds de texto. end end) addEventHandler ("onPlayerLogout", getRootElement(), function (prev, curr) -- Quando alguém deslogar, executa essa função. setElementData (source, "bindPermission", false) -- Proíbe que o player deslogado use teclas com binds de texto. end) Client: 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 = getBoundKeys ("say") -- Obtém uma lista com todas as teclas com binds de texto. if keys then -- Se existe alguma tecla com bind de texto, então: for keyName, keyState in pairs (keys) do -- Para cada tecla com bind de texto, faça: if button == keyName then -- Se a tecla pressionada está com bind de texto, 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 de texto. end end end end end) Espero ter ajudado.