Jump to content

Comando para adicionar na ACL


Recommended Posts

Bom, queria fazer um comando que desse pra adicionar na acl e setar o elemento do player, exemplo

se o player der o comando /pf Playz (pf = Policia federal, Playz meu nick) adicionasse o player na acl PF, e setasse o elemento policial como true, como eu devo fazer isso? (sou iniciante em Lua)

Link to comment
18 minutes ago, _Pattif_ said:

Olá.

Você pode utilizar a função abaixo:


aclGroupAddObject (, "user."..conta )

Porém, você deve primeiro saber a conta do alvo.

Você pode utilizar esta variável:


local accName = getAccountName ( getPlayerAccount ( thePlayer ) )

E aí, é só adaptar sua função para aceitar grupos e o usuário.

 

» Fontes:

• aclGroupAddObject

getAccountName

 

Boa sorte!

e para setar o elemento? eu fiz um código aqui e acho que tá certo, só falta setar o elemento agora.

 

function tagPF (playerSource, commandName, accountName) 
	if isObjectInACLGroup ("user."..accName, aclGetGroup ( "PF_CMD" ) ) then
		if (accountName) then
			if not  isObjectInACLGroup ("user."..accName, aclGetGroup ( "PF" ) ) then
				aclGroupAddObject (aclGetGroup("PF"), "user."..accountName) 
				outputChatBox ("Você adicionou o jogador '"..accountName.."' ao grupo da PF", playerSource) 
				outputChatBox ("O jogador '"..playerSource.."' adicionou você ao grupo da PF", accountName)
			else
				aclGroupRemoveObject (aclGetGroup("PF"), "user."..accountName)
				outputChatBox ("Você removeu o jogador '"..accountName.."' do grupo da PF!", playerSource)
				outputChatBox ("O jogador '"..playerSource.."' removeu você do grupo da PF!")
				end
		else 
			outputChatBox ("Você não digitou nenhum nome.", playerSource)
			outputChatBox ("Uso correto: /pf nome", playerSource)
		end
	else
		outputChatBox ("Sem permissão..")
	end
end
addCommandHandler ("pf", tagPF)

 

Link to comment

É isso mesmo, pórém seu código possui pequenos erros.

São eles:

Linha 11:

outputChatBox ("O jogador '"..playerSource.."' removeu você do grupo da PF!")

Você enviou uma mensagem ao jogador no qual foi removido do grupo, mas o destinatário da mensagem não está especificado no script. Você pode arrumar colocando o alvo logo após sua mensagem, como: 

outputChatBox ("O jogador '"..playerSource.."' removeu você do grupo da PF!", O_JOGADOR_AQUI)

Substitua "O_JOGADOR_AQUI" pelo destinatário de sua mensagem.

 

Linha 2:

if isObjectInACLGroup ("user."..accName, aclGetGroup ( "PF_CMD" ) ) then

Ele executa o IF, porém não sabe quem/o que é a variável "accName".

Você deve criar uma variável acima deste IF:

local accName = getAccountName ( getPlayerAccount ( playerSource ) )

 

Link to comment

Correção:

addCommandHandler ("pf", function (thePlayer, cmd, nick) 
	if isObjectInACLGroup ("user."..getAccountName (getPlayerAccount (thePlayer)), aclGetGroup ("PF_CMD")) then -- Se o jogador estiver na acl "PF_CMD", então:
		if not nick then return outputChatBox ("ERRO! Informe um nick por gentileza!", thePlayer, 255, 0, 0) end -- Se nenhum nick for informado retorna e cancela a execução!
		local jogador = getPlayerFromPartialName (nick)
		if not jogador then -- Se nenhum jogador com o nick informado for encontrado, então:
			return outputChatBox ("ERRO! Nenhum jogador com esse nick foi encontrado!", thePlayer, 255, 0, 0)
		end
		if (isObjectInACLGroup ("user."..getAccountName (getPlayerAccount (thePlayer)), aclGetGroup("PF"))) then -- Se o jogador estiver na acl "PF", então:
			aclGroupRemoveObject (aclGetGroup("PF"), "user."..getAccountName (getPlayerAccount (thePlayer))) -- Remove o jogador da acl "PF".
			outputChatBox ("Você removeu o jogador '"..string.gsub(getPlayerName (jogador), "#%x%x%x%x%x%x", "").."' do grupo da PF!", thePlayer, 0, 255, 0) 
			outputChatBox ("O jogador '"..string.gsub(getPlayerName (thePlayer), "#%x%x%x%x%x%x", "").."' removeu você do grupo da PF", jogador, 255, 0, 0)
		else -- Senão:
			aclGroupAddObject (aclGetGroup("PF"), "user."..getAccountName (getPlayerAccount (thePlayer))) -- Adiciona o jogador da acl "PF".
			outputChatBox ("Você adicionou o jogador '"..string.gsub(getPlayerName (jogador), "#%x%x%x%x%x%x", "").."' ao grupo da PF!", thePlayer, 0, 255, 0) 
			outputChatBox ("O jogador '"..string.gsub(getPlayerName (thePlayer), "#%x%x%x%x%x%x", "").."' adicionou você ao grupo da PF", jogador, 0, 255, 0)
		end
	else
		outputChatBox ("Você não tem permissão!", thePlayer, 255, 0, 0)
	end	
end)

function getPlayerFromPartialName(name)
	local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil
	if name then
		for _, player in ipairs(getElementsByType("player")) do
			local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower()
			if name_:find(name, 1, true) then
				return player
			end
		end
	end
end

OBS: Não testei, teste com /debugscript 3 ativado, se tiver erros poste aqui.

Link to comment
  • Other Languages Moderators

Apenas uma otimização para evitar condição negativa: (e também corrigi umas coisinhas erradas)

addCommandHandler ("pf", function (thePlayer, cmd, nick)
	if (isObjectInACLGroup ("user."..getAccountName (getPlayerAccount (thePlayer)), aclGetGroup ("PF_CMD"))) then -- Se o jogador estiver na ACL "PF_CMD", então:
		if (not nick) then -- Aqui eu separei em 3 linhas apenas pra você não se perder na indentação.
			return outputChatBox ("ERRO! Informe um nick por gentileza!", thePlayer, 255, 0, 0) -- Se nenhum nick for informado, manda esse feedback e cancela a função.
		end
		local jogador = getPlayerFromPartialName (nick)
		if (jogador) then -- Se algum jogador com o nick informado for encontrado, então:
			if (isObjectInACLGroup ("user."..getAccountName (getPlayerAccount (jogador)), aclGetGroup("PF"))) then -- Se o jogador estiver na ACL "PF", então:
				aclGroupRemoveObject (aclGetGroup("PF"), "user."..getAccountName (getPlayerAccount (jogador))) -- Remove o jogador da ACL "PF".
				outputChatBox ("Você removeu o jogador '"..string.gsub(getPlayerName (jogador), "#%x%x%x%x%x%x", "").."' do grupo da PF!", thePlayer, 0, 255, 0)
				outputChatBox ("O jogador '"..string.gsub(getPlayerName (thePlayer), "#%x%x%x%x%x%x", "").."' removeu você do grupo da PF.", jogador, 255, 0, 0)
			else -- Senão: (se o jogador não estiver na ACL da "PF", então:)
				aclGroupAddObject (aclGetGroup("PF"), "user."..getAccountName (getPlayerAccount (jogador))) -- Adiciona o jogador na ACL "PF".
				outputChatBox ("Você adicionou o jogador '"..string.gsub(getPlayerName (jogador), "#%x%x%x%x%x%x", "").."' ao grupo da PF!", thePlayer, 0, 255, 0) 
				outputChatBox ("O jogador '"..string.gsub(getPlayerName (thePlayer), "#%x%x%x%x%x%x", "").."' adicionou você ao grupo da PF.", jogador, 0, 255, 0)
			end
		else -- Senão: (se nenhum jogador com esse nick for encontrado, então:)
			outputChatBox ("ERRO! Nenhum jogador com esse nick foi encontrado!", thePlayer, 255, 0, 0)
		end
	else -- Senão: (Se o jogador não estiver na ACL "PF_CMD", então:)
		outputChatBox ("Você não tem permissão!", thePlayer, 255, 0, 0)
	end
end)

function getPlayerFromPartialName(name)
	local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil
	if name then
		for _, player in ipairs(getElementsByType("player")) do
			local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower()
			if name_:find(name, 1, true) then
				return player
			end
		end
	end
end

Obs: É necessário que seu resource tenha permissão Admin.

Edited by Lord Henry
  • 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...