Jump to content

Verificar quantidade mínima de usuário na ACL


Recommended Posts

 Boa noite, eu achei encontrei um script pra estudar, porém não estou conseguindo fazer uma coisa, que seria uma verificação pra saber se a ACL "Policia" tem no mínimo 2 pessoas para iniciar o assalto a lojinha, alguém poderia me ajudar?

 

function Roubar_SuperMercadoLS ( thePlayer, matchingDimension )
    if isElementWithinMarker ( thePlayer, Dentro_Assalto_SuperMercadoLS ) then
        local wl = getPlayerWantedLevel ( thePlayer )
        local arma = getPedWeapon ( thePlayer )
    	unbindKey ( thePlayer, LetraParaMarkers, "down", Roubar_SuperMercadoLS )                                  -- Remover Bind do Assalto
        exports.Scripts_OnMarkerMsgs_:delete (thePlayer)                                                                                 -- Deletar Mensagem no Meio da Tela
    	if getElementData ( thePlayer, "Policia" ) == true then
    	    return exports.Scripts_Textos:createNewDxMessage ( 'Você é um Policial e não Pode Assaltar Lojas', thePlayer, 255, 255, 255)
    	end
    	if arma == 0 or arma == 1 or arma == 2 or arma == 3 or arma == 4 or arma == 5 or arma == 6 or arma == 7 or arma == 8 or arma == 9 or arma == 16 or arma == 17 or arma == 18 or arma == 39 or arma == 41 or arma == 42 or arma == 43 or arma == 10 or arma == 11 or arma == 12 or arma == 14 or arma == 15 or arma == 44 or arma == 45 or arma == 46 or arma == 40 then
    	    return exports.Scripts_Textos:createNewDxMessage ( 'Você Precisa de uma Arma de Fogo para Assaltar Essa Loja!', thePlayer, 255, 255, 255)
    	end
    	if Roubo_Recente_SuperMercadoLS == false then
		    setElementRotation ( thePlayer, 0, 0, Rot_z_Roubo )
    	    setPedAnimation ( thePlayer, "SHOP", "SHP_Gun_Aim", -1, true, false, true )                                 -- Fazer a Animação de Assalto ( Jogador )
    	    setPedAnimation ( Atendente_SuperMercadoLS, "SHOP", "SHP_Rob_GiveCash", -1, true, false, true )                  -- Fazer a Animação de Se Render ( BOT )
	        setTimer(function()
	            setPedAnimation ( thePlayer )
	            setPedAnimation ( Atendente_SuperMercadoLS, "SHOP", "SHP_Rob_HandsUp", -1, true, false, true )                   -- Entregar o Dinheiro ( BOT )
	        end,40000,1,thePlayer)
        if wl < 6 then
	        setPlayerWantedLevel ( thePlayer, wl+1 )                                                                  	     -- Setar +1 Level de Procurado ( Jogador )
    	end
    	triggerClientEvent ( root, "AirNew>LigarAlarme1", root, thePlayer )                                             -- Disparar o Alarme
        exports.Scripts_Textos:createNewDxMessage ( 'Aguarde 60 Segundos & Você podera Sair da Loja. A Policia Foi Notificada Sobre o Assalto!', thePlayer, 255, 255, 255)
    	setElementData ( thePlayer, "AirNewSCR_Roubo_SuperMercadoLS", true )                            -- setElementData "RouboEmAndamento" ( Jogador ) True
    	Roubo_Recente_SuperMercadoLS = true                                                                                                                      -- Roubo_Recente_SuperMercadoLS = true
    	    setTimer(function()
    	        setElementData ( thePlayer, "AirNewSCR_Roubo_SuperMercadoLS", false )                                             -- setElementData "RouboEmAndamento" ( Jogador ) False
    	        setPedAnimation ( Atendente_SuperMercadoLS )                                                                     -- Remover a Animação ( BOT )
    	        givePlayerMoney ( thePlayer, ValorDoRoubo1 )                                                                 -- Dar Dinheiro ( Jogador )
    	    end,TempoDoAssalto,1,thePlayer)
    	for i, player in ipairs(getElementsByType("player")) do
            local uj = getElementData(player,"Policia") or false
            if type(uj) == "boolean" then
                if uj == true then
    	            NickName = string.gsub(getPlayerName(thePlayer), "#%x%x%x%x%x%x", "")
                    exports.Scripts_Textos:createNewDxMessage ( "O Jogador "..NickName.." Esta Assaltando uma Loja em Los Santos, Siga o Icone Vermelho no Mapa", player, 255, 255, 255)
    	            setElementVisibleTo ( EmAssaltoBlip_SuperMercadoLS, player, true )
    	            setTimer ( function() setElementVisibleTo ( EmAssaltoBlip_SuperMercadoLS, player, false ) end, 120000, 1, thePlayer )
    	        end
    	    end
    	end
    	else
    	    exports.Scripts_Textos:createNewDxMessage ( 'Essa Loja ja foi Roubada Recentemente!', thePlayer, 255, 255, 255)
    	    setTimer(function()
    	        Roubo_Recente_SuperMercadoLS = false
    	    end,TempoDoAssalto+60000,1,thePlayer)
        end
    end
end

 

Link to comment
  • Other Languages Moderators

Utilize aclGroupListObjects para saber quais são todos os objetos que estão na ACL Group, e então conte quantos deles são usuários.

function countPlayersInACLGroup(ACLGroupName)
    local cops = 0 -- Variável local que irá contar quantos usuários estão na ACL Group.
    local group = aclGetGroup(ACLGroupName) -- Obtém a ACL Group com o nome que foi especificado em ACLGroupName.
    if (group) then -- Se existe a ACL Group "Policia" no servidor, então:
        for _, object in pairs(aclGroupListObjects(group)) do -- Para cada objeto da ACL, faça:
            local objType = gettok(object, 1, string.byte('.')) -- Obtém o texto que estiver antes do ponto. Podendo ser "user" ou "resource".
            if (objType == "user") then -- Se este objeto é um usuário, então:
                cops = cops + 1 -- Adiciona +1 na contagem de cops.
            end
        end
    end
    return cops -- Ao final da execução dessa função, mostra quantos usuários estão na ACL Group "Policia"
end

No seu script, adicione a função acima no início do seu script.

Depois na função que vc quer contar se tem 2 ou mais policiais, você faz assim:

if (countPlayersInACLGroup("Policia") >= 2) then -- Se tiver 2 policiais ou mais no servidor, então:

 

OBS: Vale lembrar que isso não significa que o policial está online.

  • Thanks 1
Link to comment
2 hours ago, Lord Henry said:

Utilize aclGroupListObjects para saber quais são todos os objetos que estão na ACL Group, e então conte quantos deles são usuários.

function countPlayersInACLGroup(ACLGroupName)
    local cops = 0 -- Variável local que irá contar quantos usuários estão na ACL Group.
    local group = aclGetGroup(ACLGroupName) -- Obtém a ACL Group com o nome que foi especificado em ACLGroupName.
    if (group) then -- Se existe a ACL Group "Policia" no servidor, então:
        for _, object in pairs(aclGroupListObjects(group)) do -- Para cada objeto da ACL, faça:
            local objType = gettok(object, 1, string.byte('.')) -- Obtém o texto que estiver antes do ponto. Podendo ser "user" ou "resource".
            if (objType == "user") then -- Se este objeto é um usuário, então:
                cops = cops + 1 -- Adiciona +1 na contagem de cops.
            end
        end
    end
    return cops -- Ao final da execução dessa função, mostra quantos usuários estão na ACL Group "Policia"
end

No seu script, adicione a função acima no início do seu script.

Depois na função que vc quer contar se tem 2 ou mais policiais, você faz assim:

if (countPlayersInACLGroup("Policia") >= 2) then -- Se tiver 2 policiais ou mais no servidor, então:

 

OBS: Vale lembrar que isso não significa que o policial está online.

Eu estou tentando encaixar no script, porém não estou conseguindo encontrar o lugar certo.

Link to comment
  • 1 month later...

Acho que assim seria mais oq ele quer, já que ele ta procurando por algo onde os jogadores devem estar online
 

function countPlayersInACLGroup(ACLGroupName)
    local cops = 0 -- Variável local que irá contar quantos usuários estão na ACL Group.
    local group = aclGetGroup(ACLGroupName) -- Obtém a ACL Group com o nome que foi especificado em ACLGroupName.
    if group then -- Se existe o grupo de Policiais, então:
        for i, p in pairs(getElementsByType("player")) do -- Para cada jogador online no servidor, faça:
            local acc = getAccountName(getPlayerAccount(p)) -- Pega a conta de cada jogador online.
            if isObjectInACLGroup ("user."..acc, group) then -- Se ele estiver na ACL group dos policiais, então:
                cops = cops + 1 -- Adiciona + 1 no contador de policiais.
            end
        end
    else 
        print("ERRO: Grupo '"..tostring(ACLGroupName).."' não existe.") -- Mostra no debug que não existe o grupo indicado.
    end
    return cops -- Ao final da execução dessa função, mostra quantos policiais estão online.
end

 

Edited by Lord Henry
Lógica do script corrigida. Indentação convertida de tabulação para espaços. Adicionados mais comentários no código.
  • Like 1
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...