dener189

[Ajude-Me] Permissão para dar comando

Recommended Posts

Olá comunidade MTA PT/BR . Fiz um script simples de dar TAG através de um comando, mas queria saber como posso fazer para que apenas um ou mais grupos da ACL possa dar esse comando.

 

Server:

function darSAMU (playerSource, commandName, accountName)
    if accountName then
        aclGroupAddObject (aclGetGroup("SAMU"), "user."..accountName)
        outputChatBox ("O cidadão '"..accountName.."' foi adicionado no grupo SAMU com sucesso!", playerSource)
    else
        outputChatBox ("Nem um nome definico.", playerSource) 
        outputChatBox ("Para dar TAG digite: /adiconarSAMU [Nick]", playerSource) 
    end 
end 
  
addCommandHandler ("adiconarSAMU", darSAMU)

function darVIP (playerSource, commandName, accountName)
    if accountName then
        aclGroupAddObject (aclGetGroup("VIP"), "user."..accountName)
        outputChatBox ("O cidadão '"..accountName.."' foi adicionado no grupo VIP com sucesso!", playerSource)
    else
        outputChatBox ("Nem um nome definico.", playerSource) 
        outputChatBox ("Para dar TAG digite: /adiconarVIP [Nick]", playerSource) 
    end 
end 
  
addCommandHandler ("adiconarVIP", darVIP)

function darVIPOuro (playerSource, commandName, accountName)
    if accountName then
        aclGroupAddObject (aclGetGroup("Ouro"), "user."..accountName)
        outputChatBox ("O cidadão '"..accountName.."' foi adicionado no grupo VIP Ouro com sucesso!", playerSource)
    else
        outputChatBox ("Nem um nome definico.", playerSource) 
        outputChatBox ("Para dar TAG digite: /adiconarVIPOuro [Nick]", playerSource) 
    end 
end 
  
addCommandHandler ("adiconarVIPPrata", darVIPPrata)

function darVIPPrata (playerSource, commandName, accountName)
    if accountName then
        aclGroupAddObject (aclGetGroup("Prata"), "user."..accountName)
        outputChatBox ("O cidadão '"..accountName.."' foi adicionado no grupo VIP Prata com sucesso!", playerSource)
    else
        outputChatBox ("Nem um nome definico.", playerSource) 
        outputChatBox ("Para dar TAG digite: /adiconarVIPPrata [Nick]", playerSource) 
    end 
end 
  
addCommandHandler ("adiconarVIPPrata", darVIPPrata)

function darVIPBronze (playerSource, commandName, accountName)
    if accountName then
        aclGroupAddObject (aclGetGroup("Bronze"), "user."..accountName)
        outputChatBox ("O cidadão '"..accountName.."' foi adicionado no grupo VIP Bronze com sucesso!", playerSource)
    else
        outputChatBox ("Nem um nome definico.", playerSource) 
        outputChatBox ("Para dar TAG digite: /adiconarVIPBronze [Nick]", playerSource) 
    end 
end 
  
addCommandHandler ("adiconarVIPBronze", darVIPBronze)

function darYoutuber (playerSource, commandName, accountName)
    if accountName then
        aclGroupAddObject (aclGetGroup("Youtuber"), "user."..accountName)
        outputChatBox ("O cidadão '"..accountName.."' foi adicionado no grupo Youtuber com sucesso!", playerSource)
    else
        outputChatBox ("Nem um nome definico.", playerSource) 
        outputChatBox ("Para dar TAG digite: /adiconarYoutuber [Nick]", playerSource) 
    end 
end 
  
addCommandHandler ("adiconarYoutuber", darYoutuber)

function darComandosPolicia (playerSource, commandName, accountName)
    if accountName then
        aclGroupAddObject (aclGetGroup("ComandosPolicia"), "user."..accountName)
        outputChatBox ("O cidadão '"..accountName.."' foi adicionado no grupo Comando Policial com sucesso!", playerSource)
    else
        outputChatBox ("Nem um nome definico.", playerSource) 
        outputChatBox ("Para dar TAG digite: /adiconarComandosPolicia [Nick]", playerSource) 
    end 
end 
  
addCommandHandler ("adiconarComandosPolicia", darComandosPolicia)

function darTraficante (playerSource, commandName, accountName)
    if accountName then
        aclGroupAddObject (aclGetGroup("Traficante"), "user."..accountName)
        outputChatBox ("O cidadão '"..accountName.."' foi adicionado no grupo Traficante com sucesso!", playerSource)
    else
        outputChatBox ("Nem um nome definico.", playerSource) 
        outputChatBox ("Para dar TAG digite: /adiconarTraficante [Nick]", playerSource) 
    end 
end 
  
addCommandHandler ("adiconarTraficante", darTraficante)

 

Share this post


Link to post

 

local account = getPlayerAccount(source) --pega a conta
local accountName = getAccountName(account) 
	if isObjectInACLGroup ("user."..accountName, aclGetGroup ( "QualACLvc quer" )) then
		--codigo  
	end

 

Share this post


Link to post
3 hours ago, juaosilv said:

 


local account = getPlayerAccount(source) --pega a conta
local accountName = getAccountName(account) 
	if isObjectInACLGroup ("user."..accountName, aclGetGroup ( "QualACLvc quer" )) then
		--codigo  
	end

 

[2019-09-22 23:50:17] ERROR: [scripts]\TAG2\server.Lua:5: attempt to concatenate local 'accountName' (a boolean value)

Share this post


Link to post
12 minutes ago, dener189 said:

[2019-09-22 23:50:17] ERROR: [scripts]\TAG2\server.Lua:5: attempt to concatenate local 'accountName' (a boolean value)

Deu erro pq já existe um accountName faz assim:

local account = getPlayerAccount(source) --pega a conta
local contaNome = getAccountName(account) 
	if isObjectInACLGroup ("user."..contaNome, aclGetGroup ( "QualACLvc quer" )) then
		--codigo  
	end

 

Share this post


Link to post
19 minutes ago, juaosilv said:

Deu erro pq já existe um accountName faz assim:


local account = getPlayerAccount(source) --pega a conta
local contaNome = getAccountName(account) 
	if isObjectInACLGroup ("user."..contaNome, aclGetGroup ( "QualACLvc quer" )) then
		--codigo  
	end

 

Assim?

function darVIPOuro (playerSource, commandName, accountName)
    	local account = getPlayerAccount(source) --pega a conta
        local accountName = getAccountName(account)
        if isObjectInACLGroup ("user."..accountName, aclGetGroup ( "Admin" )) then
        aclGroupAddObject (aclGetGroup("Ouro"), "user."..accountName)
        outputChatBox ("O cidadão '"..accountName.."' foi adicionado no grupo VIP Ouro com sucesso!", playerSource)
    else
        outputChatBox ("Nem um nome definico.", playerSource) 
        outputChatBox ("Para dar TAG digite: /adiconarVIPOuro [Nick]", playerSource) 
    end 
end 
  
addCommandHandler ("adiconarVIPPrata", darVIPPrata)

pq se for assim ta dando erro

[2019-09-23 00:22:52] WARNING: [scripts]\TAG2\server.Lua:100: Bad argument @ 'getPlayerAccount' [Expected element at argument 1, got nil]
[2019-09-23 00:22:52] WARNING: [scripts]\TAG2\server.Lua:101: Bad argument @ 'getAccountName' [Expected account at argument 1, got boolean]
[2019-09-23 00:22:52] ERROR: [scripts]\TAG2\server.Lua:102: attempt to concatenate local 'accountName' (a boolean value)

Edited by dener189

Share this post


Link to post
43 minutes ago, dener189 said:

Assim?


function darVIPOuro (playerSource, commandName, accountName)
    	local account = getPlayerAccount(source) --pega a conta
        local accountName = getAccountName(account)
        if isObjectInACLGroup ("user."..accountName, aclGetGroup ( "Admin" )) then
        aclGroupAddObject (aclGetGroup("Ouro"), "user."..accountName)
        outputChatBox ("O cidadão '"..accountName.."' foi adicionado no grupo VIP Ouro com sucesso!", playerSource)
    else
        outputChatBox ("Nem um nome definico.", playerSource) 
        outputChatBox ("Para dar TAG digite: /adiconarVIPOuro [Nick]", playerSource) 
    end 
end 
  
addCommandHandler ("adiconarVIPPrata", darVIPPrata)

pq se for assim ta dando erro

[2019-09-23 00:22:52] WARNING: [scripts]\TAG2\server.Lua:100: Bad argument @ 'getPlayerAccount' [Expected element at argument 1, got nil]
[2019-09-23 00:22:52] WARNING: [scripts]\TAG2\server.Lua:101: Bad argument @ 'getAccountName' [Expected account at argument 1, got boolean]
[2019-09-23 00:22:52] ERROR: [scripts]\TAG2\server.Lua:102: attempt to concatenate local 'accountName' (a boolean value)

não, assim 

function darVIPOuro (playerSource, commandName, accountName)
    	local conta = getPlayerAccount(source) --pega a conta
        local contaNome = getAccountName(conta)
        if isObjectInACLGroup ("user."..contaNome, aclGetGroup ( "Admin" )) then
        aclGroupAddObject (aclGetGroup("Ouro"), "user."..accountName)
        outputChatBox ("O cidadão '"..accountName.."' foi adicionado no grupo VIP Ouro com sucesso!", playerSource)
    else
        outputChatBox ("Nem um nome definico.", playerSource) 
        outputChatBox ("Para dar TAG digite: /adiconarVIPOuro [Nick]", playerSource) 
    end 
end 
  
addCommandHandler ("adiconarVIPPrata", darVIPPrata)

 

Share this post


Link to post
7 minutes ago, juaosilv said:

não, assim 


function darVIPOuro (playerSource, commandName, accountName)
    	local conta = getPlayerAccount(source) --pega a conta
        local contaNome = getAccountName(conta)
        if isObjectInACLGroup ("user."..contaNome, aclGetGroup ( "Admin" )) then
        aclGroupAddObject (aclGetGroup("Ouro"), "user."..accountName)
        outputChatBox ("O cidadão '"..accountName.."' foi adicionado no grupo VIP Ouro com sucesso!", playerSource)
    else
        outputChatBox ("Nem um nome definico.", playerSource) 
        outputChatBox ("Para dar TAG digite: /adiconarVIPOuro [Nick]", playerSource) 
    end 
end 
  
addCommandHandler ("adiconarVIPPrata", darVIPPrata)

 

[2019-09-23 01:04:04] WARNING: [scripts]\TAG2\server.Lua:3: Bad argument @ 'getPlayerAccount' [Expected element at argument 1, got nil]
[2019-09-23 01:04:04] WARNING: [scripts]\TAG2\server.Lua:4: Bad argument @ 'getAccountName' [Expected account at argument 1, got boolean]
[2019-09-23 01:04:04] ERROR: [scripts]\TAG2\server.Lua:5: attempt to concatenate local 'accountName' (a boolean value)

Share this post


Link to post
function darVIPOuro (theStaff, cmd, nick)
	if (nick) then -- Se foi informado o nick após o comando, então:
		local thePlayer = getPlayerFromName (nick) -- Recebe o jogador que possui esse nick.
		if (thePlayer) then -- Se existe um jogador com esse nick, então:
			local accName = getAccountName (getPlayerAccount (thePlayer)) -- Recebe o login da conta desse jogador.
			if isObjectInACLGroup ("user."..getAccountName (getPlayerAccount (theStaff)), aclGetGroup ("Admin")) then -- Se o jogador que executou o comando estiver na ACL Group 'Admin', então:
				if (aclGroupAddObject (aclGetGroup ("Ouro"), "user."..accName)) then -- Se o login do jogador foi adicionado corretamente na ACL Group 'Ouro', então:
					outputChatBox ("O cidadão '"..nick.."' foi adicionado no grupo VIP Ouro com sucesso!", theStaff) -- Manda isso pro jogador que executou o comando.
				else -- Se não foi possível adicionar o login do jogador ao grupo, então:
					outputChatBox ("Erro ao adicionar o cidadão '"..nick.."' ao grupo VIP Ouro. Verifique se o grupo 'Ouro' existe e se este resource tem permissão Admin.", theStaff, 255, 150, 0) -- Manda isso pro jogador que executou o comando.
				end
			else -- Se o jogador que executou o comando não estiver na ACL Group 'Admin', então:
				outputChatBox ("Acesso negado a este comando.", theStaff, 255, 150, 0) -- Manda isso pro jogador que executou o comando.
			end
		else -- Se não existe nenhum jogador com o nick exatamente igual ao informado no comando, então:
			outputChatBox ("Nenhum jogador com esse nick foi encontrado.", theStaff) -- Manda isso pro jogador que executou o comando.
		end
	else -- Se não foi declarado nada após o comando, então:
		outputChatBox ("Erro de sintaxe, use: /addVIPOuro <Nick>", theStaff) -- Manda isso pro jogador que executou o comando.
	end 
end
addCommandHandler ("addVIPOuro", darVIPOuro) -- Troquei o comando pra facilitar.

 

  • Thanks 1

Share this post


Link to post

@dener189, o seu código é muito repetitivo... o uso de tabelas é sugerido para otimização/manutenção:

local comandos = {
	["adiconarSAMU"] = { acl = "SAMU", restrito = {"Admin","Console"} },
	["adiconarVIP"]	= { acl = "VIP", restrito = {"Admin","Console"} },
	["adiconarVIPOuro"] = { acl = "Ouro", restrito = {"Admin","Console"} },
	["adiconarVIPPrata"] = { acl = "Prata", restrito = {"Admin","Console"} },
	["adiconarVIPBronze"] = { acl = "Bronze", restrito = {"Admin","Console"} },
	["adiconarYoutuber"] = { acl = "Youtuber", restrito = {"Admin","Console"} },
	["adiconarComandosPolicia"] = { acl = "ComandosPolicia", restrito = {"Admin","Console"} },
	["adiconarTraficante"] = { acl = "Traficante", restrito = {"Admin","Console"} }
}

addEventHandler("onResourceStart", resourceRoot,
	function()
		for cmd,_ in pairs(comandos) do
			addCommandHandler(cmd,adicionar)
		end
	end
)

function adicionar(playerSource, commandName, accountName)
	local permissao = false
	if (not isGuestAccount(getPlayerAccount(playerSource))) then
		local playerSourceAccount = getAccountName(getPlayerAccount(playerSource))
		for _,acl in ipairs(comandos[commandName].restrito) do
			if isObjectInACLGroup ( "user." .. playerSourceAccount, aclGetGroup ( acl ) ) then
				permissao = true
				break
			end
		end
	end
	if (not permissao) then
		outputChatBox("Erro. Você não tem permissão para utilizar esse comando!", playerSource)
		return false
	end
	
	if (not accountName) then
		outputChatBox("Erro. Nenhuma conta informada!", playerSource)
		outputChatBox("Para dar TAG digite: /" .. comandos[commandName].acl .. " [CONTA]", playerSource)
		return false
	end
	
	if (not getAccount(accountName)) then
		outputChatBox("Erro. Conta não encontrada!", playerSource)
		return false
	end
	
	aclGroupAddObject(aclGetGroup(comandos[commandName].acl), "user."..accountName)
	outputChatBox("A conta '"..accountName.."' foi adicionado no grupo " .. comandos[commandName].acl .. " com sucesso!", playerSource)
end

(não testado)

Edited by MaligNos
  • Thanks 1

Share this post


Link to post
10 hours ago, MaligNos said:

@dener189, o seu código é muito repetitivo... o uso de tabelas é sugerido para otimização/manutenção:


local comandos = {
	["adiconarSAMU"] = { acl = "SAMU", restrito = {"Admin","Console"} },
	["adiconarVIP"]	= { acl = "VIP", restrito = {"Admin","Console"} },
	["adiconarVIPOuro"] = { acl = "Ouro", restrito = {"Admin","Console"} },
	["adiconarVIPPrata"] = { acl = "Prata", restrito = {"Admin","Console"} },
	["adiconarVIPBronze"] = { acl = "Bronze", restrito = {"Admin","Console"} },
	["adiconarYoutuber"] = { acl = "Youtuber", restrito = {"Admin","Console"} },
	["adiconarComandosPolicia"] = { acl = "ComandosPolicia", restrito = {"Admin","Console"} },
	["adiconarTraficante"] = { acl = "Traficante", restrito = {"Admin","Console"} }
}

addEventHandler("onResourceStart", resourceRoot,
	function()
		for cmd,_ in pairs(comandos) do
			addCommandHandler(cmd,adicionar)
		end
	end
)

function adicionar(playerSource, commandName, accountName)
	local permissao = false
	if (not isGuestAccount(getPlayerAccount(playerSource))) then
		local playerSourceAccount = getAccountName(getPlayerAccount(playerSource))
		for _,acl in ipairs(comandos[commandName].restrito) do
			if isObjectInACLGroup ( "user." .. playerSourceAccount, aclGetGroup ( acl ) ) then
				permissao = true
				break
			end
		end
	end
	if (not permissao) then
		outputChatBox("Erro. Você não tem permissão para utilizar esse comando!", playerSource)
		return false
	end
	
	if (not accountName) then
		outputChatBox("Erro. Nenhuma conta informada!", playerSource)
		outputChatBox("Para dar TAG digite: /" .. comandos[commandName].acl .. " [CONTA]", playerSource)
		return false
	end
	
	if (not getAccount(accountName)) then
		outputChatBox("Erro. Conta não encontrada!", playerSource)
		return false
	end
	
	aclGroupAddObject(aclGetGroup(comandos[commandName].acl), "user."..accountName)
	outputChatBox("A conta '"..accountName.."' foi adicionado no grupo " .. comandos[commandName].acl .. " com sucesso!", playerSource)
end

(não testado)

Vou testar

@Lord Henry e @MaligNos obrigado pela ajuda fornecida, os dois funcionaram. Vou optar em usar o do @MaligNos pois parece mais fácil de se manipular.

Mais uma vez obrigado pela ajuda ❤️

Edited by dener189

Share this post


Link to post

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.