Jump to content

Setar money em mim mesmo caso não tenha o argumento "id"


Recommended Posts

to tentando fazer um set money, que funciona da seguinte forma caso não tenha o argumento "id" seta dinheiro no player que executou o comando
caso tenha o argumento "id" seta o dinheiro no player cujo o id foi especificado no comando, porém esta ocorrendo um erro no debug quando
executo o comando com ou sem o id, e so esta funcionando quando eu especifico o id no comando codigo e script abaixo:

 

function money(targetPlayer, cmd, id, qnt)
    setPlayerMoney(targetPlayer, qnt)
    if (id) then
		local playerID = tonumber(id)
        if (playerID) then
			local targetPlayer = getPlayerID(playerID)
            if (targetPlayer) then
                setPlayerMoney(targetPlayer, id, qnt)
            end
        end
    end
end
addCommandHandler("money", money)

spacer.png

Link to comment
  • Other Languages Moderators
  1. O parâmetro id vai ser sempre o que o jogador digitou após o comando, então ele pode ser tanto o ID de um jogador ou valor de dinheiro.
    1. O parâmetro qnt só vai existir se dois valores forem especificados após o comando. Se o jogador apenas especificar um, então qnt será nil. Ou seja, o comando /money 123123 fará com que id seja 123123 e qnt seja nil
    2. Falta verificações de segurança, você precisa garantir que tanto o id quanto qnt sejam números.
    3. Além de verificar se os valores informados são números, você precisa garantir que eles sejam inteiros (o player pode tentar informar números decimais, passando pelo tonumber).
    4. Adicione uma condição verificando se qnt existe. Caso não exista, considere o parâmetro id como sendo a quantidade e então use o ID de si mesmo.
    5. Adicione uma condição verificando se id existe. Caso não exista, dê feedback de erro de sintaxe.
  2. O segundo erro acontece pois id não deve estar depois do targetPlayer. Basta removê-lo dali que resolve o erro.
  3. Não use nome de função igual ao comando que ativa ela.

Para facilitar de entender:

function myMoney(thePlayer, cmd, id, qnt) -- thePlayer é quem executou o comando.
    if (qnt) then -- Se qtd existe (se foram especificados dois valores após o comando), então:
        local playerQTD = tonumber(qtd) -- Torna a string qtd em um número.
        if (playerQTD) then -- Se qtd é um número, então:
            if (math.floor(playerQTD) == playerQTD) then -- Se qtd é um integer, então:
                if (id) then -- Se id existe, então:
                    local playerID = tonumber(id) -- Torna a string id em um número.
                    if (playerID) then -- Se id é um número, então:
                        if (math.floor(playerID) == playerID) then -- Se id é um integer, então:
                            local targetPlayer = getPlayerID(playerID) -- Espero que você tenha essa função criada em outro lugar, pois ela não existe nativamente.
                            if (targetPlayer) then -- Se existe um jogador com este ID, então:
                                setPlayerMoney(targetPlayer, playerQTD) -- Dá o dinheiro pro jogador com este ID.
                            else
                                outputChatBox ("Erro: Jogador com o ID '"..id.."' não foi encontrado.", thePlayer, 255, 0, 0)
                            end
                        else
                            outputChatBox ("Erro: ID '"..id.."' precisa ser um número inteiro.", thePlayer, 255, 0, 0)
                        end
                    else
                        outputChatBox ("Erro: ID '"..id.."' precisa ser um número.", thePlayer, 255, 0, 0)
                    end
                else -- Se id não existe, então:
                    outputChatBox ("Erro de sintaxe: #ffffff/money <ID> <quantidade>", thePlayer, 255, 0, 0, true)
                end
            else
                outputChatBox ("Erro: A quantidade de dinheiro precisa ser um número inteiro.", thePlayer, 255, 0, 0)
            end
        else
            outputChatBox ("Erro: A quantidade de dinheiro precisa ser um número.", thePlayer, 255, 0, 0)
        end
    elseif (id) then -- Se não existe qnt mas existe id (só foi especificado um valor após o comando), então:
        local playerQTD = tonumber(id) -- Torna a string id em um número. Usando o valor de id como quantidade.
        if (playerQTD) then -- Se id é um número, então:
            if (math.floor(playerQTD) == playerQTD) then -- Se id é um integer, então:
                setPlayerMoney(thePlayer, playerQTD) -- Dá o dinheiro pra si mesmo.
            else
                outputChatBox ("Erro: O valor especificado após o comando precisa ser um número inteiro.", thePlayer, 255, 0, 0)
            end
        else
            outputChatBox ("Erro: O valor especificado após o comando precisa ser um número.", thePlayer, 255, 0, 0)
        end
    else -- Se não existe id e nem qtd, então:
        outputChatBox ("Erro de sintaxe: #ffffff/money <ID> <quantidade>", thePlayer, 255, 0, 0, true)
    end
end
addCommandHandler("money", myMoney) -- Não se usa nome de função igual ao comando. Mude um dos dois para não dar conflito.

Obs: É recomendável restringir esse comando, caso contrário qualquer player pode dar dinheiro pra si mesmo ou pros outros.

 


Versão resumida sem nenhuma verificação de segurança: (pode gerar erros no debugscript)

function myMoney(thePlayer, cmd, id, qnt)
    if (qnt) then -- Se qnt existe, então:
        local targetPlayer = getPlayerID(tonumber(id)) -- Obtém o jogador que tem o ID especificado.
        setPlayerMoney(targetPlayer, qnt) -- Dá o dinheiro de valor qnt para quem tem o ID de valor id.
    else -- Se qnt não existe, então:
        setPlayerMoney(thePlayer, id) -- Dá o dinheiro de valor id em si mesmo.
    end
end
addCommandHandler("money", myMoney)

 

Obs: Vale lembrar que setPlayerMoney vai deixar o dinheiro do jogador igual a quantidade especificada. Enquanto que givePlayerMoney vai somar o valor especificado no dinheiro atual do jogador e a função takePlayerMoney vai subtrair o valor especificado no dinheiro atual do jogador.

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