Doongogar Posted October 14, 2021 Share Posted October 14, 2021 então achei um script na internet que cria um marker, e quando qualquer um entra nesse marker tem a permissão de digitar um comando e receber uma tag especifica eu gostaria de saber como adaptar este codigo para que uma tag especifica consiga pegar a tag oferecida pela do marker ex: tag que pode executar o comando (apaisana) tag oferecida pelo marker: (policial), isso eu quero para que os policias fora de serviço não usem o painel pm, mais ai eu colocarei o marker dentro da base deles para que possam pegar a tag do painel pm a hora que forem patrulhar codigo abaixo: PegarTag = createMarker(2485, -1667, 13.34375 - 1,"cylinder", 2, 255 ,0 ,0 ,255) function robtag ( source ) if isElementWithinMarker (source, PegarTag ) then aclGroupAddObject (aclGetGroup("BOPE"), "user."..getAccountName(getPlayerAccount(source))) ---- Mude A Acl Em "BOPE" outputChatBox ("#000000[ #ff0000Sistema Tag #000000] #ffffff Agora Você #00ff00Já Tem #ffffffTag Da #ffff00"..NomeTag,source,255,255,255,true) outputChatBox ("#000000[ #ff0000Sistema Tag #000000] #ffffff Para Sair Basta Digitar #00ffff"..ComandoSair,source,255,255,255,true) else outputChatBox ('#000000[ #ff0000Sistema Tag #000000] #ffffff Voce Tem Que Estar no #ff0000Lugar Certo Para Pegar a Tag',source,255,255,255,true) end end addCommandHandler ( "bope", robtag ) function robtirartag ( source ) aclGroupRemoveObject (aclGetGroup("BOPE"), "user."..getAccountName(getPlayerAccount(source))) outputChatBox ('#000000[ #ff0000Sistema Tag #000000] #ffffff Agora Você #00ff00Não Tem Mais #ffffffa Tag Da #ffff00'..NomeTag,source,255,255,255,true) end addCommandHandler ( "sair", robtirartag ) function MSG (source) outputChatBox('#000000[ #ff0000Sistema Tag #000000] #ffffffDigite #00ffff'..Comando..' #ffffffPara Pegar Tag Do #ffff00'..NomeTag,source ,255 ,255 ,255,true) end addEventHandler ("onMarkerHit",PegarTag ,MSG) Link to comment
Other Languages Moderators Lord Henry Posted October 15, 2021 Other Languages Moderators Share Posted October 15, 2021 Código ilegível. Indente o código. Link to comment
Doongogar Posted October 15, 2021 Author Share Posted October 15, 2021 o codigo não é meu, não entendo muito bem disso Link to comment
Other Languages Moderators androksi Posted October 19, 2021 Other Languages Moderators Share Posted October 19, 2021 @SciptNovato, indentação é uma das coisas mais importantes na programação. Geralmente, é usado 4 espaços para referenciar um novo escopo, ou seja, para cada condição, laço de repetição, função e afins, você precisa indentar, para que as coisas fiquem corretas e fáceis de serem lidas. Exemplo de código indentado: function sumOrMul(a, b, operator) if operator == "+" then return a + b elseif operator == "*" then return a * b end end Explicação do que tá acontecendo, usando imagens: Você pode perceber que, ao começar um novo escopo, eu dei 4 espaços para iniciar novamente o código. A função começa, a fecho com um end, então dou 4 espaços para começar o código. function sumOrMul(a, b, operator) end Agora, com os 4 espaços definidos, começo o código. Neste caso, é uma condição. Da mesma forma, a faço e, então, fecho um com end. function sumOrMul(a, b, operator) if operator == "+" then end end Assim acontece com o resto. A propósito, dependendo de qual editor de texto você usa, você pode configurar para o TAB ser a indentação. Mas atente-se a uma coisa: é necessário que sejam usados espaços, ao invés de tabulação. Qualquer dúvida, só mandar o papo aí! Link to comment
Doongogar Posted October 19, 2021 Author Share Posted October 19, 2021 52 minutes ago, androksi said: @SciptNovato, indentação é uma das coisas mais importantes na programação. Geralmente, é usado 4 espaços para referenciar um novo escopo, ou seja, para cada condição, laço de repetição, função e afins, você precisa indentar, para que as coisas fiquem corretas e fáceis de serem lidas. Exemplo de código indentado: function sumOrMul(a, b, operator) if operator == "+" then return a + b elseif operator == "*" then return a * b end end Explicação do que tá acontecendo, usando imagens: Você pode perceber que, ao começar um novo escopo, eu dei 4 espaços para iniciar novamente o código. A função começa, a fecho com um end, então dou 4 espaços para começar o código. function sumOrMul(a, b, operator) end Agora, com os 4 espaços definidos, começo o código. Neste caso, é uma condição. Da mesma forma, a faço e, então, fecho um com end. function sumOrMul(a, b, operator) if operator == "+" then end end Assim acontece com o resto. A propósito, dependendo de qual editor de texto você usa, você pode configurar para o TAB ser a indentação. Mas atente-se a uma coisa: é necessário que sejam usados espaços, ao invés de tabulação. Qualquer dúvida, só mandar o papo aí! NomeTag = "BOPE" Comando = "/bope" ComandoSair = "/sair" PegarTag = createMarker(2485, -1667, 13.34375 - 1,"cylinder", 2, 255 ,0 ,0 ,255) function robtag ( source ) if isElementWithinMarker (source, PegarTag ) then aclGroupAddObject (aclGetGroup("BOPE"), "user."..getAccountName(getPlayerAccount(source))) outputChatBox ("[Sistema Tag] Agora Você Já Tem Tag Da"..NomeTag, source, 255, 255, 255, true) outputChatBox ("[Sistema Tag] Para Sair Basta Digitar"..ComandoSair, source, 255, 255, 255, true) else outputChatBox ('[Sistema Tag] Voce Tem Que Estar no Lugar Certo Para Pegar a Tag', source, 255, 255, 255, true) end end addCommandHandler ( "bope", robtag ) function robtirartag ( source ) aclGroupRemoveObject (aclGetGroup("BOPE"), "user."..getAccountName(getPlayerAccount(source))) outputChatBox ('[Sistema Tag] Agora Você Não Tem Mais a Tag Da'..NomeTag, source, 255, 255, 255, true) end addCommandHandler ( "sair", robtirartag ) function MSG (source) outputChatBox('[Sistema Tag] Digite /'..Comando..' Para Pegar Tag Do'..NomeTag, source ,255, 255, 255, true) end addEventHandler ("onMarkerHit", PegarTag ,MSG) assim?, retirei também as cores das mensagens para ficar mais legivél, porfaver fale se estiver errado Link to comment
?????? Posted October 20, 2021 Share Posted October 20, 2021 (edited) function robtag ( source ) if isElementWithinMarker (source, PegarTag ) then if aclGetGroup(AclComando) and isObjectInACLGroup('user.'..getAccountName(getPlayerAccount(source)), aclGetGroup(AclComando)) then aclGroupAddObject (aclGetGroup("BOPE"), "user."..getAccountName(getPlayerAccount(source))) outputChatBox ("[Sistema Tag] Agora Você Já Tem Tag Da"..NomeTag, source, 255, 255, 255, true) outputChatBox ("[Sistema Tag] Para Sair Basta Digitar"..ComandoSair, source, 255, 255, 255, true) end else outputChatBox ('[Sistema Tag] Voce Tem Que Estar no Lugar Certo Para Pegar a Tag', source, 255, 255, 255, true) end end addCommandHandler ( "bope", robtag ) function robtirartag ( source ) if aclGetGroup(AclComando) and isObjectInACLGroup('user.'..getAccountName(getPlayerAccount(source)), aclGetGroup(AclComando)) then aclGroupRemoveObject (aclGetGroup("BOPE"), "user."..getAccountName(getPlayerAccount(source))) outputChatBox ('[Sistema Tag] Agora Você Não Tem Mais a Tag Da'..NomeTag, source, 255, 255, 255, true) end end addCommandHandler ( "sair", robtirartag ) function MSG (source) outputChatBox('[Sistema Tag] Digite /'..Comando..' Para Pegar Tag Do'..NomeTag, source ,255, 255, 255, true) end addEventHandler ("onMarkerHit", PegarTag ,MSG) Edited October 20, 2021 by ?????? Link to comment
Other Languages Moderators Lord Henry Posted October 20, 2021 Other Languages Moderators Share Posted October 20, 2021 @?????? favor não ficar colando códigos mal-formatados e sem explicação alguma. Nosso fórum tem como objetivo ensinar os usuários em vez de apenas dar códigos prontos. Utilize o botão <> do fórum na próxima vez que for colar scripts e sempre comente detalhes sobre o que está no script. Você pode comentar tudo antes do script ou então comentar cada linha do código usando -- no final das linhas. Explicando o que cada linha do script faz. @SciptNovato Indente com 4 espaços por escopo em vez de 2. Além disso, mantenha com 4 espaços até o fim daquele escopo. Sempre que tiver uma condição dentro de outra, ela vai recebendo +4 espaços extras e assim por diante. Exemplo: function robtag ( source ) -- AQUI INICIA O ESCOPO DA FUNÇÃO. ELA E O END DELA NÃO TEM ESPAÇO. MAS TUDO QUE ESTIVER DENTRO DELA RECEBE 4 ESPAÇOS POR PADRÃO. if isElementWithinMarker (source, PegarTag ) then -- AQUI INICIA O ESCOPO DESSA CONDIÇÃO IF. ELA JÁ TEM OS 4 ESPAÇOS POR CAUSA DO ESCOPO DA FUNÇÃO E DENTRO DELA TERÁ +4 ESPAÇOS ATÉ O SEU END. FICANDO COM 8 ESPAÇOS DENTRO DELA. aclGroupAddObject (aclGetGroup("BOPE"), "user."..getAccountName(getPlayerAccount(source))) outputChatBox ("[Sistema Tag] Agora Você Já Tem Tag Da"..NomeTag, source, 255, 255, 255, true) -- ESSAS 3 LINHAS ESTÃO DENTRO DO ESCOPO DO IF, RECEBENDO OS 8 ESPAÇOS DENTRO DESTE ESCOPO. outputChatBox ("[Sistema Tag] Para Sair Basta Digitar"..ComandoSair, source, 255, 255, 255, true) else -- NÃO FAZ PARTE DO ESCOPO DA CONDIÇÃO ACIMA, O ELSE NA VERDADE É OUTRA CONDIÇÃO COM SEU PRÓPRIO ESCOPO, ENTÃO ELE RECEBE SÓ OS 4 ESPAÇOS DA FUNÇÃO, MAS NÃO RECEBE OS ESPAÇOS DA CONDIÇÃO ANTERIOR, POIS ELE NÃO FAZ PARTE DELA. ELE É COMO SE FOSSE OUTRO IF PORÉM SEM PARÂMETROS. outputChatBox ("[Sistema Tag] Voce Tem Que Estar no Lugar Certo Para Pegar a Tag", source, 255, 255, 255, true) -- ESSA LINHA ESTÁ DENTRO DO ESCOPO DO ELSE, RECEBENDO OS 8 ESPAÇOS DELE. end -- FIM DO ESCOPO DAS CONDIÇÕES, RECEBENDO SEMPRE OS MESMOS ESPAÇOS QUE ELAS. end -- FIM DO ESCOPO DA FUNÇÃO, RECEBENDO SEMPRE O MESMO ESPAÇO QUE ELA TINHA NO INÍCIO (NENHUM ESPAÇO). addCommandHandler ( "bope", robtag ) -- ISSO ESTÁ FORA DA FUNÇÃO E DE SEU ESCOPO, SERVE APENAS PARA CHAMÁ-LA VIA COMANDO. Link to comment
Doongogar Posted October 20, 2021 Author Share Posted October 20, 2021 (edited) On 20/10/2021 at 14:23, Lord Henry said: Passo a passo de como indentar um código que veio sem indentação: Exemplo qualquer: Hide contents function qualquerCoisa() outputChatBox("Testando", root, 255, 0, 0) local condition = true if (condition) then outputChatBox("este", root, 255, 255, 0) if (true) then outputChatBox("script", root, 0, 255, 0) else outputChatBox("maroto.", root, 0, 0, 255) end end end 1. Adicione 4 espaços em tudo que estiver dentro da função principal, exceto a própria função e o end dela. Ela deve ficar assim: Hide contents function qualquerCoisa() outputChatBox("Testando", root, 255, 0, 0) local condition = true if (condition) then outputChatBox("este", root, 255, 255, 0) if (true) then outputChatBox("script", root, 0, 255, 0) else outputChatBox("maroto.", root, 0, 0, 255) end end end 2. Adicione mais 4 espaços em tudo que estiver depois do primeiro if, exceto o penúltimo end que pertence a ele. Hide contents function qualquerCoisa() outputChatBox("Testando", root, 255, 0, 0) local condition = true if (condition) then outputChatBox("este", root, 255, 255, 0) if (true) then outputChatBox("script", root, 0, 255, 0) else outputChatBox("maroto.", root, 0, 0, 255) end end end 3. Faça o mesmo com todos os if que tiverem dentro deste, um de cada vez. Hide contents function qualquerCoisa() outputChatBox("Testando", root, 255, 0, 0) local condition = true if (condition) then outputChatBox("este", root, 255, 255, 0) if (true) then outputChatBox("script", root, 0, 255, 0) else outputChatBox("maroto.", root, 0, 0, 255) end end end OBS: Ignore o else pois ele não pertence ao escopo do último if antes dele. Ignore somente quando o if antes dele não receber mais espaços junto. Neste caso, o if anterior não recebeu mais espaços, somente o que estava dentro dele. Então o else não recebeu também. Vale lembrar que isso se aprende ao estudar lógica de programação e algoritmos. NomeTag = "BOPE" Comando = "/bope" ComandoSair = "/sair" PegarTag = createMarker(2485, -1667, 13.34375 - 1,"cylinder", 2, 255 ,0 ,0 ,255) function robtag ( source ) if isElementWithinMarker (source, PegarTag ) then aclGroupAddObject (aclGetGroup("BOPE"), "user."..getAccountName(getPlayerAccount(source))) outputChatBox ("[Sistema Tag] Agora Você Já Tem Tag Da"..NomeTag, source, 255, 255, 255, true) outputChatBox ("[Sistema Tag] Para Sair Basta Digitar"..ComandoSair, source, 255, 255, 255, true) else outputChatBox ('[Sistema Tag] Voce Tem Que Estar no Lugar Certo Para Pegar a Tag', source, 255, 255, 255, true) end end addCommandHandler ( "bope", robtag ) function robtirartag ( source ) aclGroupRemoveObject (aclGetGroup("BOPE"), "user."..getAccountName(getPlayerAccount(source))) outputChatBox ('[Sistema Tag] Agora Você Não Tem Mais a Tag Da'..NomeTag, source, 255, 255, 255, true) end addCommandHandler ( "sair", robtirartag ) function MSG (source) outputChatBox('[Sistema Tag] Digite /'..Comando..' Para Pegar Tag Do'..NomeTag, source ,255, 255, 255, true) end addEventHandler ("onMarkerHit", PegarTag, MSG) pelo que entendi e assim, bem simples até, obrigado mesmo pela atenção e pelas dicas! Edited October 22, 2021 by Lord Henry Link to comment
Other Languages Moderators Lord Henry Posted October 22, 2021 Other Languages Moderators Share Posted October 22, 2021 (edited) @SciptNovatoexato, desse jeito mesmo! Ficou perfeita a indentação. Só algumas últimas dicas: As strings (textos) prefira colocá-las dentro de "aspas duplas" em vez de 'aspas simples'. Em Lua não faz diferença, mas prefira seguir um padrão para melhorar seu nível de programação. Em algumas linguagens de programação, as aspas simples só funcionam para caractere e não para strings, o que pode gerar erro. Nunca utilize source como parâmetro de função. Ela é uma variável predefinida pelo evento que está ativando a função, ao usar o source como parâmetro, você estará perdendo o source original. Prefira usar thePlayer ali nesse caso. Nem sempre isso gera erro, mas é preferível que se faça isso para evitar conflitos e casos onde vc precisa do source original junto com o parâmetro. Edited October 22, 2021 by Lord Henry Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now