dener189 Posted September 22, 2019 Share Posted September 22, 2019 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) Link to comment
juaosilv Posted September 22, 2019 Share Posted September 22, 2019 local account = getPlayerAccount(source) --pega a conta local accountName = getAccountName(account) if isObjectInACLGroup ("user."..accountName, aclGetGroup ( "QualACLvc quer" )) then --codigo end Link to comment
dener189 Posted September 22, 2019 Author Share Posted September 22, 2019 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) Link to comment
juaosilv Posted September 23, 2019 Share Posted September 23, 2019 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 Link to comment
dener189 Posted September 23, 2019 Author Share Posted September 23, 2019 (edited) 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 September 23, 2019 by dener189 Link to comment
juaosilv Posted September 23, 2019 Share Posted September 23, 2019 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) Link to comment
dener189 Posted September 23, 2019 Author Share Posted September 23, 2019 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) Link to comment
Other Languages Moderators Lord Henry Posted September 23, 2019 Other Languages Moderators Share Posted September 23, 2019 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. 1 Link to comment
[M]ister Posted September 23, 2019 Share Posted September 23, 2019 (edited) @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 September 23, 2019 by MaligNos 1 Link to comment
dener189 Posted September 23, 2019 Author Share Posted September 23, 2019 (edited) 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 September 23, 2019 by dener189 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