Jump to content

tag em marker


Recommended Posts

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

@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:

V1rQk5O.png

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
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:

V1rQk5O.png

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
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 by ??????
Link to comment
  • Other Languages Moderators

@?????? 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.

OfSmewi.png


@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
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 by Lord Henry
Link to comment
  • Other Languages Moderators

@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 by Lord Henry
Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...