Jump to content

Ajuda - Usar ID Fixo


Recommended Posts

Eu vi que no internal todos player q entra no servidor fica com um id fixo, queria saber como faço para usar o id fixo do player em vez do id temporario de quando entra no servidor.

function _setPlayerhlp(thePlayer, command, who, amount)	
    local accName = getAccountName ( getPlayerAccount ( thePlayer ) )
    --if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Admin" ) ) then
	if (getAccountData (getPlayerAccount (thePlayer), "Helper") == 4) then
	if not tonumber ( amount ) then 
		outputChatBox("ERRO:/sethlp <player> <nivel>", thePlayer, 255, 100, 100, true)
	    return
	end	
	local receiver = getPlayerFromName(who)
		if not (receiver) then 
		outputChatBox("ERRO : Player OFF/Não Existe", thePlayer, 255, 100, 100, true)
		return
	end
	if not(tonumber ( amount ) <= -1) and not( tonumber ( amount ) >= 5 ) then
		setPlayerhlpp (receiver, amount)
		outputChatBox(" Você setou nivel "..amount.." de helper para o "..who:gsub('#%x%x%x%x%x%x', '').."!", thePlayer, 100, 255, 100, true)
	else
		outputChatBox("Você não pode setar esse nivel.", thePlayer, 255, 100, 100, true)
	end
	end
end
addCommandHandler("sethlp",_setPlayerhlp)

 

Nesse caso esse script seta apenas usando o nome completo do player, como faço para setar usando o id fixo do player

 

Link to comment

Tentei fazer aqui mais recebo esse erro  

[2020-06-07 11:20:19] WARNING: [FW]Comandos\Server.Lua:1039: Bad argument @ 'getAccountID' [Expected account at argument 1, got number '1']

 

function _setPlayerhlp(thePlayer, command, id, amount)	
    local accName = getAccountName ( getPlayerAccount ( thePlayer ) )
	id = tonumber(id)
	local receiver = getAccountID(id)
    --if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Admin" ) ) then
	if (getAccountData (getPlayerAccount (thePlayer), "Helper") == 4) then
	if not tonumber ( amount ) then 
		outputChatBox("ERRO:/sethlp <player> <nivel>", thePlayer, 255, 100, 100, true)
	    return
	end	
		if not (receiver) then 
		outputChatBox("ERRO : Player OFF/Não Existe", thePlayer, 255, 100, 100, true)
		return
	end
	if not(tonumber ( amount ) <= -1) and not( tonumber ( amount ) >= 5 ) then
		setPlayerhlpp (receiver, amount)
		outputChatBox(" Você setou nivel "..amount.." de helper para o "..id:gsub('#%x%x%x%x%x%x', '').."!", thePlayer, 100, 255, 100, true)
	else
		outputChatBox("Você não pode setar esse nivel.", thePlayer, 255, 100, 100, true)
	end
	end
end
addCommandHandler("sethlp",_setPlayerhlp)

 

Link to comment
  • Other Languages Moderators

Coloque isso no seu script, fora da função.

function getAccountFromID (id)
    if (tonumber (id)) then
        for i, acc in ipairs (getAccounts()) do
            if (getAccountID (acc) == tonumber (id)) then
                return acc
            end
        end
    end
    return false
end

E depois lá na sua função, troque o getAccountID por getAccountFromID

Link to comment

Agora vem o seguinte erro,

https://prnt.sc/svty8a

Sera q porque como ta puxando id tem que mudar mais algo no script.

 

function _setPlayerhlp(thePlayer, command, id, amount)	
    local accName = getAccountName ( getPlayerAccount ( thePlayer ) )
	local receiver = getAccountFromID(id)
    --if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Admin" ) ) then
	if (getAccountData (getPlayerAccount (thePlayer), "Helper") == 4) then
	if not tonumber ( amount ) then 
		outputChatBox("ERRO:/sethlp <player> <nivel>", thePlayer, 255, 100, 100, true)
	    return
	end	
		if not (receiver) then 
		outputChatBox("ERRO : Player OFF/Não Existe", thePlayer, 255, 100, 100, true)
		return
	end
	if not(tonumber ( amount ) <= -1) and not( tonumber ( amount ) >= 5 ) then
		setPlayerhlpp (receiver, amount)
		outputChatBox(" Você setou nivel "..amount.." de helper para o "..id:gsub('#%x%x%x%x%x%x', '').."!", thePlayer, 100, 255, 100, true)
	else
		outputChatBox("Você não pode setar esse nivel.", thePlayer, 255, 100, 100, true)
	end
		else
		outputChatBox("ERRO: Você não tem permissão para usar esse comando.", thePlayer, 255, 100, 100, true)
	end
	
end
addCommandHandler("sethlp",_setPlayerhlp)

function getAccountFromID (id)
    if (tonumber (id)) then
        for i, acc in ipairs (getAccounts()) do
            if (getAccountID (acc) == tonumber (id)) then
                return acc
            end
        end
    end
    return false
end

function setPlayerhlpp(thePlayer, number)
     if ( getElementType ( thePlayer ) == "player" ) then
         setElementData(thePlayer,"levelhelper",tonumber(number))
    end
 end

addEventHandler("onPlayerLogin", root, function()
    local acc = getPlayerAccount(source)
	local helpset = (getAccountData(acc,"Helper") or 0)
    local helpset = getAccountData(acc, "Helper") or 0
    setElementData(source, "levelhelper", tonumber(helpset))
end)


addEventHandler("onPlayerQuit", root, function()
    local acc = getPlayerAccount(source)
    local helpset = getElementData(source, "levelhelper") or 0
    setAccountData(acc, "Helper", tonumber(helpset))
end)

addEventHandler("onResourceStart", resourceRoot, function()
    for _, player in pairs(getElementsByType("player")) do
        local acc = getPlayerAccount(source)
      	local helpset = getAccountData(acc, "Helper")
        if helpset then
            setElementData(player, "levelhelper", tonumber(helpset))
        end
    end
end)

function getPlayerhelp(thePlayer)
    local data = getElementData(thePlayer, "levelhelper")
    thePoints = tonumber(data)
	return thePoints
end

function takePlayerhelp(thePlayer, number)
     if ( getElementType ( thePlayer ) == "player" ) then
         setElementData(thePlayer,"levelhelper",getElementData(thePlayer, "levelhelper")-tonumber(number))
     end
end

 

Link to comment
  • Other Languages Moderators

Na função setPlayerhlpp, o parâmetro thePlayer agora é uma account. Pois você definiu lá em cima o receiver como sendo uma conta e não como um jogador.

Link to comment
30 minutes ago, Lord Henry said:

Na função setPlayerhlpp, o parâmetro thePlayer agora é uma account. Pois você definiu lá em cima o receiver como sendo uma conta e não como um jogador.

Ficaria assim no caso então ?

function setPlayerhlpp(getAccountFromID, number)
     if ( getAccounts ( getAccountFromID ) == "player" ) then
         setElementData(getAccounts,"levelhelper",tonumber(number))
    end
 end

 

Edited by Giovany Mito
Link to comment
  • Other Languages Moderators

Em vez disso, use essa função:

function getPlayerFromAccountID (id)
    if (tonumber (id)) then
        for i, player in ipairs (getElementsByType("player")) do
            if (getAccountID (getPlayerAccount(player)) == tonumber (id)) then
                return player
            end
        end
    end
    return false
end

 

É que está bem difícil entender sua lógica pois a indentação está terrível.

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

Em vez disso, use essa função:


function getPlayerFromAccountID (id)
    if (tonumber (id)) then
        for i, player in ipairs (getElementsByType("player")) do
            if (getAccountID (getPlayerAccount(player)) == tonumber (id)) then
                return player
            end
        end
    end
    return false
end

 

É que está bem difícil entender sua lógica pois a indentação está terrível.

Agora funcionou. 

Então, O script é de setar um player por level,  mais o script funcionava usando o nome do player para setagem, ai queria fazer setagem usando o id fixo do player em vez do nome, mais agora deu certo muito obrigado.

Desculpa minha burrice é que sou novo ainda com programação :/

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