Ir para conteúdo
  • 0

NPC Banco Não aceitar transferência para jogador No Vocation


DeCarvalho

Pergunta

Olá

 

Tenho esse npc de banco (código logo abaixo) e gostaria de saber se alguém poderia alterar para fazer com que não seja aceito transferência de valor algum para um jogador caso seja sem vocação. Uso TFS 1.2

 

 

 

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

local Topic, count, transfer = {}, {}, {}

function onCreatureAppear(cid)            npcHandler:onCreatureAppear(cid)        end
function onCreatureDisappear(cid)        npcHandler:onCreatureDisappear(cid)        end
function onCreatureSay(cid, type, msg)        npcHandler:onCreatureSay(cid, type, msg)    end
function onThink()                npcHandler:onThink()                end


local function getCount(s)
    local b, e = s:find('%d+')
    return b and e and math.min(4294967295, tonumber(s:sub(b, e))) or -1
end

local function findPlayer(name)
    local resultId = db.storeQuery('SELECT name FROM players WHERE name=' .. db.escapeString(name) .. ' LIMIT 1'), nil
    if resultId == false then
        return
    end
    local r = result.getDataString(resultId, "name")
    result.free(resultId)
    return r
end

local function getPlayerBiddedMoney(cid)
    local resultId = db.storeQuery('SELECT `bid` FROM `houses` WHERE `highest_bidder`=' .. db.escapeString(getPlayerGUID(cid)) .. ' LIMIT 1')
    if resultId == false then
        return 0
    end
    local r = result.getDataInt(resultId, "bid")
    result.free(resultId)
    return r
end

local function updatePlayerBalance(name, value)
    db.query('UPDATE players SET balance=' .. value .. ' WHERE name=' .. db.escapeString(name) .. ' LIMIT 1')
end

function greet(cid)
    Topic[cid], count[cid], transfer[cid] = nil, nil, nil
    return true
end

function creatureSayCallback(cid, type, msg)
    if not npcHandler:isFocused(cid) then
        return false
    elseif msgcontains(msg, 'balance') then
        local bid = getPlayerBiddedMoney(cid)
        if(bid > 0) then
            npcHandler:say('Your account balance is ' .. getPlayerBalance(cid) .. ' gold, ' .. bid .. ' gold is blocked for house auctioned by you.', cid)
        else
            npcHandler:say('Your account balance is ' .. getPlayerBalance(cid) .. ' gold.', cid)
        end
        Topic[cid] = nil
    elseif msgcontains(msg, 'deposit') and msgcontains(msg, 'all') then
        if getPlayerMoney(cid) == 0 then
            npcHandler:say('You don\'t have any gold with you.', cid)
            Topic[cid] = nil
        else
            count[cid] = getPlayerMoney(cid)
            npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
            Topic[cid] = 2
        end
    elseif msgcontains(msg, 'deposit') then
        if getCount(msg) == 0 then
            npcHandler:say('You are joking, aren\'t you??', cid)
            Topic[cid] = nil
        elseif getCount(msg) ~= -1 then
            if getPlayerMoney(cid) >= getCount(msg) then
                count[cid] = getCount(msg)
                npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
                Topic[cid] = 2
            else
                npcHandler:say('You do not have enough gold.', cid)
                Topic[cid] = nil
            end
        elseif getPlayerMoney(cid) == 0 then
            npcHandler:say('You don\'t have any gold with you.', cid)
            Topic[cid] = nil
        else
            npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
            Topic[cid] = 1
        end
    elseif Topic[cid] == 1 then
        if getCount(msg) == -1 then
            npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
            Topic[cid] = 1
        elseif getPlayerMoney(cid) >= getCount(msg) then
            count[cid] = getCount(msg)
            npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
            Topic[cid] = 2
        else
            npcHandler:say('You do not have enough gold.', cid)
            Topic[cid] = nil
        end
    elseif msgcontains(msg, 'yes') and Topic[cid] == 2 then
        if doPlayerRemoveMoney(cid, count[cid]) then
            doPlayerSetBalance(cid, getPlayerBalance(cid) + count[cid])
            updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
            npcHandler:say('Alright, we have added the amount of ' .. count[cid] .. ' gold to your balance. You can withdraw your money anytime you want to.', cid)
        else
            npcHandler:say('I am inconsolable, but it seems you have lost your gold. I hope you get it back.', cid)
        end
        Topic[cid] = nil
    elseif msgcontains(msg, 'no') and Topic[cid] == 2 then
        npcHandler:say('As you wish. Is there something else I can do for you?', cid)
        Topic[cid] = nil
    elseif msgcontains(msg, 'withdraw') then
        if getCount(msg) == 0 then
            npcHandler:say('Sure, you want nothing you get nothing!', cid)
            Topic[cid] = nil
        elseif getCount(msg) ~= -1 then
            if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= getCount(msg) then
                count[cid] = getCount(msg)
                npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
                Topic[cid] = 4
            else
                npcHandler:say('There is not enough gold on your account.', cid)
                Topic[cid] = nil
            end
        elseif getPlayerBalance(cid) == 0 then
            npcHandler:say('You don\'t have any money on your bank account.', cid)
            Topic[cid] = nil
        else
            npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
            Topic[cid] = 3
        end
    elseif Topic[cid] == 3 then
        if getCount(msg) == -1 then
            npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
            Topic[cid] = 3
        elseif getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= getCount(msg) then
            count[cid] = getCount(msg)
            npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
            Topic[cid] = 4
        else
            npcHandler:say('There is not enough gold on your account.', cid)
            Topic[cid] = nil
        end
    elseif msgcontains(msg, 'yes') and Topic[cid] == 4 then
        if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
            doPlayerAddMoney(cid, count[cid])
            doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
            updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
            npcHandler:say('Here you are, ' .. count[cid] .. ' gold. Please let me know if there is something else I can do for you.', cid)
        else
            npcHandler:say('There is not enough gold on your account.', cid)
        end
        Topic[cid] = nil
    elseif msgcontains(msg, 'no') and Topic[cid] == 4 then
        npcHandler:say('The customer is king! Come back anytime you want to if you wish to withdraw your money.', cid)
        Topic[cid] = nil
    elseif msgcontains(msg, 'transfer') then
        if getCount(msg) == 0 then
            npcHandler:say('Please think about it. Okay?', cid)
            Topic[cid] = nil
        elseif getCount(msg) ~= -1 then
            count[cid] = getCount(msg)
            if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
                npcHandler:say('Who would you like to transfer ' .. count[cid] .. ' gold to?', cid)
                Topic[cid] = 6
            else
                npcHandler:say('There is not enough gold on your account.', cid)
                Topic[cid] = nil
            end
        else
            npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
            Topic[cid] = 5
        end
    elseif Topic[cid] == 5 then
        if getCount(msg) == -1 then
            npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
            Topic[cid] = 5
        else
            count[cid] = getCount(msg)
            if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
                npcHandler:say('Who would you like to transfer ' .. count[cid] .. ' gold to?', cid)
                Topic[cid] = 6
            else
                npcHandler:say('There is not enough gold on your account.', cid)
                Topic[cid] = nil
            end
        end
    elseif Topic[cid] == 6 then
        local v = getPlayerByName(msg)
        if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
            if v then
                transfer[cid] = msg
                npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '?', cid)
                Topic[cid] = 7
            elseif findPlayer(msg):lower() == msg:lower() then
                transfer[cid] = msg
                npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. findPlayer(msg) .. '?', cid)
                Topic[cid] = 7
            else
                npcHandler:say('This player does not exist.', cid)
                Topic[cid] = nil
            end
        else
            npcHandler:say('There is not enough gold on your account.', cid)
            Topic[cid] = nil
        end
    elseif Topic[cid] == 7 and msgcontains(msg, 'yes') then
        if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
            local v = getPlayerByName(transfer[cid])
            if v then
                doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
                updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
                doPlayerSetBalance(v, getPlayerBalance(v) + count[cid])
                updatePlayerBalance(getPlayerName(v), getPlayerBalance(v))
                npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '.', cid)
            elseif findPlayer(transfer[cid]):lower() == transfer[cid]:lower() then
                doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
                updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
                db.query('UPDATE players SET balance=balance+' .. count[cid] .. ' WHERE name=' .. db.escapeString(transfer[cid]) .. ' LIMIT 1')
                npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. findPlayer(transfer[cid]) .. '.', cid)
            else
                npcHandler:say('This player does not exist.', cid)
            end
        else
            npcHandler:say('There is not enough gold on your account.', cid)
        end
        Topic[cid] = nil
    elseif Topic[cid] == 7 and msgcontains(msg, 'no') then
        npcHandler:say('Alright, is there something else I can do for you?', cid)
        Topic[cid] = nil
    elseif msgcontains(msg, 'change gold') then
        npcHandler:say('How many platinum coins would you like to get?', cid)
        Topic[cid] = 8
    elseif Topic[cid] == 8 then
        if getCount(msg) < 1 then
            npcHandler:say('Hmm, can I help you with something else?', cid)
            Topic[cid] = nil
        else
            count[cid] = math.min(500, getCount(msg))
            npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your gold coins into ' .. count[cid] .. ' platinum coins?', cid)
            Topic[cid] = 9
        end
    elseif Topic[cid] == 9 then
        if msgcontains(msg, 'yes') then
            if doPlayerRemoveItem(cid, 2148, count[cid] * 100) then
                npcHandler:say('Here you are.', cid)
                doPlayerAddItem(cid, 2152, count[cid])
            else
                npcHandler:say('Sorry, you do not have enough gold coins.', cid)
            end
        else
            npcHandler:say('Well, can I help you with something else?', cid)
        end
        Topic[cid] = nil
    elseif msgcontains(msg, 'change platinum') then
        npcHandler:say('Would you like to change your platinum coins into gold or crystal?', cid)
        Topic[cid] = 10
    elseif Topic[cid] == 10 then
        if msgcontains(msg, 'gold') then
            npcHandler:say('How many platinum coins would you like to change into gold?', cid)
            Topic[cid] = 11
        elseif msgcontains(msg, 'crystal') then
            npcHandler:say('How many crystal coins would you like to get?', cid)
            Topic[cid] = 13
        else
            npcHandler:say('Well, can I help you with something else?', cid)
            Topic[cid] = nil
        end
    elseif Topic[cid] == 11 then
        if getCount(msg) < 1 then
            npcHandler:say('Hmm, can I help you with something else?', cid)
            Topic[cid] = nil
        else
            count[cid] = math.min(500, getCount(msg))
            npcHandler:say('So you would like me to change ' .. count[cid] .. ' of your platinum coins into ' .. count[cid] * 100 .. ' gold coins for you?', cid)
            Topic[cid] = 12
        end
    elseif Topic[cid] == 12 then
        if msgcontains(msg, 'yes') then
            if doPlayerRemoveItem(cid, 2152, count[cid]) then
                npcHandler:say('Here you are.', cid)
                doPlayerAddItem(cid, 2148, count[cid] * 100)
            else
                npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
            end
        else
            npcHandler:say('Well, can I help you with something else?', cid)
        end
        Topic[cid] = nil
    elseif Topic[cid] == 13 then
        if getCount(msg) < 1 then
            npcHandler:say('Hmm, can I help you with something else?', cid)
            Topic[cid] = nil
        else
            count[cid] = math.min(500, getCount(msg))
            npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your platinum coins into ' .. count[cid] .. ' crystal coins for you?', cid)
            Topic[cid] = 14
        end
    elseif Topic[cid] == 14 then
        if msgcontains(msg, 'yes') then
            if doPlayerRemoveItem(cid, 2152, count[cid] * 100) then
                npcHandler:say('Here you are.', cid)
                doPlayerAddItem(cid, 2160, count[cid])
            else
                npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
            end
        else
            npcHandler:say('Well, can I help you with something else?', cid)
        end
        Topic[cid] = nil
    elseif msgcontains(msg, 'change crystal') then
        npcHandler:say('How many crystal coins would you like to change into platinum?', cid)
        Topic[cid] = 15
    elseif Topic[cid] == 15 then
        if getCount(msg) == -1 or getCount(msg) == 0 then
            npcHandler:say('Hmm, can I help you with something else?', cid)
            Topic[cid] = nil
        else
            count[cid] = math.min(500, getCount(msg))
            npcHandler:say('So you would like me to change ' .. count[cid] .. ' of your crystal coins into ' .. count[cid] * 100 .. ' platinum coins for you?', cid)
            Topic[cid] = 16
        end
    elseif Topic[cid] == 16 then
        if msgcontains(msg, 'yes') then
            if doPlayerRemoveItem(cid, 2160, count[cid]) then
                npcHandler:say('Here you are.', cid)
                doPlayerAddItem(cid, 2152, count[cid] * 100)
            else
                npcHandler:say('Sorry, you do not have enough crystal coins.', cid)
            end
        else
            npcHandler:say('Well, can I help you with something else?', cid)
        end
        Topic[cid] = nil
    elseif msgcontains(msg, 'change') then
        npcHandler:say('There are three different coin types in Tibia: 100 gold coins equal 1 platinum coin, 100 platinum coins equal 1 crystal coin. So if you\'d like to change 100 gold into 1 platinum, simply say \'{change gold}\' and then \'1 platinum\'.', cid)
        Topic[cid] = nil
    elseif msgcontains(msg, 'bank') then
        npcHandler:say('We can change money for you. You can also access your bank account.', cid)
        Topic[cid] = nil
    end
    return true
end

npcHandler:setCallback(CALLBACK_GREET, greet)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

 

Editado por DkAngel
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Sim, esqueci de dizer isso, irei alterar lá no post. tfs 1.2

 

Você poderia, fazendo favor ser mais específico sobre como estar procedendo?

Tenta assim:

 

    local keywordHandler = KeywordHandler:new()
    local npcHandler = NpcHandler:new(keywordHandler)
    NpcSystem.parseParameters(npcHandler)
     
    local Topic, count, transfer = {}, {}, {}
     
    function onCreatureAppear(cid)            npcHandler:onCreatureAppear(cid)        end
    function onCreatureDisappear(cid)        npcHandler:onCreatureDisappear(cid)        end
    function onCreatureSay(cid, type, msg)        npcHandler:onCreatureSay(cid, type, msg)    end
    function onThink()                npcHandler:onThink()                end
     
     
    local function getCount(s)
        local b, e = s:find('%d+')
        return b and e and math.min(4294967295, tonumber(s:sub(b, e))) or -1
    end
     
    local function findPlayer(name)
        local resultId = db.storeQuery('SELECT name FROM players WHERE name=' .. db.escapeString(name) .. ' LIMIT 1'), nil
        if resultId == false then
            return
        end
        local r = result.getDataString(resultId, "name")
        result.free(resultId)
        return r
    end
     
    local function getPlayerBiddedMoney(cid)
        local resultId = db.storeQuery('SELECT `bid` FROM `houses` WHERE `highest_bidder`=' .. db.escapeString(getPlayerGUID(cid)) .. ' LIMIT 1')
        if resultId == false then
            return 0
        end
        local r = result.getDataInt(resultId, "bid")
        result.free(resultId)
        return r
    end
     
    local function updatePlayerBalance(name, value)
        db.query('UPDATE players SET balance=' .. value .. ' WHERE name=' .. db.escapeString(name) .. ' LIMIT 1')
    end
     
    function greet(cid)
        Topic[cid], count[cid], transfer[cid] = nil, nil, nil
        return true
    end
     
    function creatureSayCallback(cid, type, msg)
        if not npcHandler:isFocused(cid) then
            return false
        elseif msgcontains(msg, 'balance') then
            local bid = getPlayerBiddedMoney(cid)
            if(bid > 0) then
                npcHandler:say('Your account balance is ' .. getPlayerBalance(cid) .. ' gold, ' .. bid .. ' gold is blocked for house auctioned by you.', cid)
            else
                npcHandler:say('Your account balance is ' .. getPlayerBalance(cid) .. ' gold.', cid)
            end
            Topic[cid] = nil
        elseif msgcontains(msg, 'deposit') and msgcontains(msg, 'all') then
            if getPlayerMoney(cid) == 0 then
                npcHandler:say('You don\'t have any gold with you.', cid)
                Topic[cid] = nil
            else
                count[cid] = getPlayerMoney(cid)
                npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
                Topic[cid] = 2
            end
        elseif msgcontains(msg, 'deposit') then
            if getCount(msg) == 0 then
                npcHandler:say('You are joking, aren\'t you??', cid)
                Topic[cid] = nil
            elseif getCount(msg) ~= -1 then
                if getPlayerMoney(cid) >= getCount(msg) then
                    count[cid] = getCount(msg)
                    npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
                    Topic[cid] = 2
                else
                    npcHandler:say('You do not have enough gold.', cid)
                    Topic[cid] = nil
                end
            elseif getPlayerMoney(cid) == 0 then
                npcHandler:say('You don\'t have any gold with you.', cid)
                Topic[cid] = nil
            else
                npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
                Topic[cid] = 1
            end
        elseif Topic[cid] == 1 then
            if getCount(msg) == -1 then
                npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
                Topic[cid] = 1
            elseif getPlayerMoney(cid) >= getCount(msg) then
                count[cid] = getCount(msg)
                npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
                Topic[cid] = 2
            else
                npcHandler:say('You do not have enough gold.', cid)
                Topic[cid] = nil
            end
        elseif msgcontains(msg, 'yes') and Topic[cid] == 2 then
            if doPlayerRemoveMoney(cid, count[cid]) then
                doPlayerSetBalance(cid, getPlayerBalance(cid) + count[cid])
                updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
                npcHandler:say('Alright, we have added the amount of ' .. count[cid] .. ' gold to your balance. You can withdraw your money anytime you want to.', cid)
            else
                npcHandler:say('I am inconsolable, but it seems you have lost your gold. I hope you get it back.', cid)
            end
            Topic[cid] = nil
        elseif msgcontains(msg, 'no') and Topic[cid] == 2 then
            npcHandler:say('As you wish. Is there something else I can do for you?', cid)
            Topic[cid] = nil
        elseif msgcontains(msg, 'withdraw') then
            if getCount(msg) == 0 then
                npcHandler:say('Sure, you want nothing you get nothing!', cid)
                Topic[cid] = nil
            elseif getCount(msg) ~= -1 then
                if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= getCount(msg) then
                    count[cid] = getCount(msg)
                    npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
                    Topic[cid] = 4
                else
                    npcHandler:say('There is not enough gold on your account.', cid)
                    Topic[cid] = nil
                end
            elseif getPlayerBalance(cid) == 0 then
                npcHandler:say('You don\'t have any money on your bank account.', cid)
                Topic[cid] = nil
            else
                npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
                Topic[cid] = 3
            end
        elseif Topic[cid] == 3 then
            if getCount(msg) == -1 then
                npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
                Topic[cid] = 3
            elseif getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= getCount(msg) then
                count[cid] = getCount(msg)
                npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
                Topic[cid] = 4
            else
                npcHandler:say('There is not enough gold on your account.', cid)
                Topic[cid] = nil
            end
        elseif msgcontains(msg, 'yes') and Topic[cid] == 4 then
            if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
                doPlayerAddMoney(cid, count[cid])
                doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
                updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
                npcHandler:say('Here you are, ' .. count[cid] .. ' gold. Please let me know if there is something else I can do for you.', cid)
            else
                npcHandler:say('There is not enough gold on your account.', cid)
            end
            Topic[cid] = nil
        elseif msgcontains(msg, 'no') and Topic[cid] == 4 then
            npcHandler:say('The customer is king! Come back anytime you want to if you wish to withdraw your money.', cid)
            Topic[cid] = nil
        elseif msgcontains(msg, 'transfer') then
            if getCount(msg) == 0 then
                npcHandler:say('Please think about it. Okay?', cid)
                Topic[cid] = nil
            elseif getCount(msg) ~= -1 then
                count[cid] = getCount(msg)
                if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
                    npcHandler:say('Who would you like to transfer ' .. count[cid] .. ' gold to?', cid)
                    Topic[cid] = 6
                else
                    npcHandler:say('There is not enough gold on your account.', cid)
                    Topic[cid] = nil
                end
            else
                npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
                Topic[cid] = 5
            end
        elseif Topic[cid] == 5 then
            if getCount(msg) == -1 then
                npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
                Topic[cid] = 5
            else
                count[cid] = getCount(msg)
                if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
                    npcHandler:say('Who would you like to transfer ' .. count[cid] .. ' gold to?', cid)
                    Topic[cid] = 6
                else
                    npcHandler:say('There is not enough gold on your account.', cid)
                    Topic[cid] = nil
                end
            end
        elseif Topic[cid] == 6 then
            if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
                if v or findPlayer(msg):lower() == msg:lower() then
					local target = Player(msg)
					if target:getVocation() ~= 0 then
						transfer[cid] = msg
						npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '?', cid)
						Topic[cid] = 7
					else
						npcHandler:say('You cannot transfer money to rook citizen.', cid)
						Topic[cid] = 5
					end
                else
                    npcHandler:say('This player does not exist.', cid)
                    Topic[cid] = nil
                end
            else
                npcHandler:say('There is not enough gold on your account.', cid)
                Topic[cid] = nil
            end
        elseif Topic[cid] == 7 and msgcontains(msg, 'yes') then
            if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
                local v = getPlayerByName(transfer[cid])
                if v then
                    doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
                    updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
                    doPlayerSetBalance(v, getPlayerBalance(v) + count[cid])
                    updatePlayerBalance(getPlayerName(v), getPlayerBalance(v))
                    npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '.', cid)
                elseif findPlayer(transfer[cid]):lower() == transfer[cid]:lower() then
                    doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
                    updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
                    db.query('UPDATE players SET balance=balance+' .. count[cid] .. ' WHERE name=' .. db.escapeString(transfer[cid]) .. ' LIMIT 1')
                    npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. findPlayer(transfer[cid]) .. '.', cid)
                else
                    npcHandler:say('This player does not exist.', cid)
                end
            else
                npcHandler:say('There is not enough gold on your account.', cid)
            end
            Topic[cid] = nil
        elseif Topic[cid] == 7 and msgcontains(msg, 'no') then
            npcHandler:say('Alright, is there something else I can do for you?', cid)
            Topic[cid] = nil
        elseif msgcontains(msg, 'change gold') then
            npcHandler:say('How many platinum coins would you like to get?', cid)
            Topic[cid] = 8
        elseif Topic[cid] == 8 then
            if getCount(msg) < 1 then
                npcHandler:say('Hmm, can I help you with something else?', cid)
                Topic[cid] = nil
            else
                count[cid] = math.min(500, getCount(msg))
                npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your gold coins into ' .. count[cid] .. ' platinum coins?', cid)
                Topic[cid] = 9
            end
        elseif Topic[cid] == 9 then
            if msgcontains(msg, 'yes') then
                if doPlayerRemoveItem(cid, 2148, count[cid] * 100) then
                    npcHandler:say('Here you are.', cid)
                    doPlayerAddItem(cid, 2152, count[cid])
                else
                    npcHandler:say('Sorry, you do not have enough gold coins.', cid)
                end
            else
                npcHandler:say('Well, can I help you with something else?', cid)
            end
            Topic[cid] = nil
        elseif msgcontains(msg, 'change platinum') then
            npcHandler:say('Would you like to change your platinum coins into gold or crystal?', cid)
            Topic[cid] = 10
        elseif Topic[cid] == 10 then
            if msgcontains(msg, 'gold') then
                npcHandler:say('How many platinum coins would you like to change into gold?', cid)
                Topic[cid] = 11
            elseif msgcontains(msg, 'crystal') then
                npcHandler:say('How many crystal coins would you like to get?', cid)
                Topic[cid] = 13
            else
                npcHandler:say('Well, can I help you with something else?', cid)
                Topic[cid] = nil
            end
        elseif Topic[cid] == 11 then
            if getCount(msg) < 1 then
                npcHandler:say('Hmm, can I help you with something else?', cid)
                Topic[cid] = nil
            else
                count[cid] = math.min(500, getCount(msg))
                npcHandler:say('So you would like me to change ' .. count[cid] .. ' of your platinum coins into ' .. count[cid] * 100 .. ' gold coins for you?', cid)
                Topic[cid] = 12
            end
        elseif Topic[cid] == 12 then
            if msgcontains(msg, 'yes') then
                if doPlayerRemoveItem(cid, 2152, count[cid]) then
                    npcHandler:say('Here you are.', cid)
                    doPlayerAddItem(cid, 2148, count[cid] * 100)
                else
                    npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
                end
            else
                npcHandler:say('Well, can I help you with something else?', cid)
            end
            Topic[cid] = nil
        elseif Topic[cid] == 13 then
            if getCount(msg) < 1 then
                npcHandler:say('Hmm, can I help you with something else?', cid)
                Topic[cid] = nil
            else
                count[cid] = math.min(500, getCount(msg))
                npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your platinum coins into ' .. count[cid] .. ' crystal coins for you?', cid)
                Topic[cid] = 14
            end
        elseif Topic[cid] == 14 then
            if msgcontains(msg, 'yes') then
                if doPlayerRemoveItem(cid, 2152, count[cid] * 100) then
                    npcHandler:say('Here you are.', cid)
                    doPlayerAddItem(cid, 2160, count[cid])
                else
                    npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
                end
            else
                npcHandler:say('Well, can I help you with something else?', cid)
            end
            Topic[cid] = nil
        elseif msgcontains(msg, 'change crystal') then
            npcHandler:say('How many crystal coins would you like to change into platinum?', cid)
            Topic[cid] = 15
        elseif Topic[cid] == 15 then
            if getCount(msg) == -1 or getCount(msg) == 0 then
                npcHandler:say('Hmm, can I help you with something else?', cid)
                Topic[cid] = nil
            else
                count[cid] = math.min(500, getCount(msg))
                npcHandler:say('So you would like me to change ' .. count[cid] .. ' of your crystal coins into ' .. count[cid] * 100 .. ' platinum coins for you?', cid)
                Topic[cid] = 16
            end
        elseif Topic[cid] == 16 then
            if msgcontains(msg, 'yes') then
                if doPlayerRemoveItem(cid, 2160, count[cid]) then
                    npcHandler:say('Here you are.', cid)
                    doPlayerAddItem(cid, 2152, count[cid] * 100)
                else
                    npcHandler:say('Sorry, you do not have enough crystal coins.', cid)
                end
            else
                npcHandler:say('Well, can I help you with something else?', cid)
            end
            Topic[cid] = nil
        elseif msgcontains(msg, 'change') then
            npcHandler:say('There are three different coin types in Tibia: 100 gold coins equal 1 platinum coin, 100 platinum coins equal 1 crystal coin. So if you\'d like to change 100 gold into 1 platinum, simply say \'{change gold}\' and then \'1 platinum\'.', cid)
            Topic[cid] = nil
        elseif msgcontains(msg, 'bank') then
            npcHandler:say('We can change money for you. You can also access your bank account.', cid)
            Topic[cid] = nil
        end
        return true
    end
     
    npcHandler:setCallback(CALLBACK_GREET, greet)
    npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
    npcHandler:addModule(FocusModule:new())

 

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Bruno, obrigado, testei mas ao informar o player que receberá o transfer o console informa o seguinte erro.

 

Lua Script Error: [Npc interface]
data/npc/scripts/banker.lua:onCreatureSay
data/npc/scripts/banker.lua:193: attempt to index local 'p1' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/banker.lua:193: in function 'callback'
        data/npc/lib/npcsystem/npchandler.lua:407: in function 'onCreatureSay'
        data/npc/scripts/banker.lua:9: in function <data/npc/scripts/banker.lua:9>

 

Editado por DkAngel
Link para o comentário
Compartilhar em outros sites

  • 0

Ola Bruno, obrigado, testei mas ao informar o player que receberá o transfer o console informa o seguinte erro.

Editei o conteúdo, testa outra por gentileza.

Abs.

Link para o comentário
Compartilhar em outros sites

  • 0

Testado e o erro persiste

 

Lua Script Error: [Npc interface]
data/npc/scripts/banker.lua:onCreatureSay
data/npc/scripts/banker.lua:191: attempt to index local 'target' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/banker.lua:191: in function 'callback'
        data/npc/lib/npcsystem/npchandler.lua:407: in function 'onCreatureSay'
        data/npc/scripts/banker.lua:9: in function <data/npc/scripts/banker.lua:9>

 

Link para o comentário
Compartilhar em outros sites

  • 0

Testado e o erro persiste

 

Lua Script Error: [Npc interface]
data/npc/scripts/banker.lua:onCreatureSay
data/npc/scripts/banker.lua:191: attempt to index local 'target' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/banker.lua:191: in function 'callback'
        data/npc/lib/npcsystem/npchandler.lua:407: in function 'onCreatureSay'
        data/npc/scripts/banker.lua:9: in function <data/npc/scripts/banker.lua:9>

 

Olá,

Posta o teu Banker.lua por favor...

Abraço.

Link para o comentário
Compartilhar em outros sites

  • 0

Mateus o script está no primeiro post dentro do spoiler, esse erro veio usando a alteração feita pelo Bruno, dentro do spoiler também.

 

O script que uso não gera erro, mas não bloqueia transfer para No Vocation, a adição que o bruno fez é voltada a isso (inicia-se na linha 188 a alteração) mas gera esse erro quando o player que vai receber o transfer é informado.

 

grato pela atenção.

 

Não sei se posso marcar essa minha resposta como correta, então não o farei. Mas o problema ja foi sanado. Agradeço aos que demonstraram interesse em ajudar e dei +rep ja ao Bruno mais cedo pelo post com o script qual tentou me ajudar :)

 

 

[Edit]

Sir Islam (otland) resolveu meu problema, ele informou que era um problema com playerExists.

 

Segue o código funcionando, dentro do spoiler, caso alguém tenha interesse.

 

 

 

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

local Topic, count, transfer = {}, {}, {}

function onCreatureAppear(cid)            npcHandler:onCreatureAppear(cid)        end
function onCreatureDisappear(cid)        npcHandler:onCreatureDisappear(cid)        end
function onCreatureSay(cid, type, msg)        npcHandler:onCreatureSay(cid, type, msg)    end
function onThink()                npcHandler:onThink()                end


local function getCount(s)
    local b, e = s:find('%d+')
    return b and e and math.min(4294967295, tonumber(s:sub(b, e))) or -1
end

local function findPlayer(name)
    local resultId = db.storeQuery('SELECT name FROM players WHERE name=' .. db.escapeString(name) .. ' LIMIT 1'), nil
    if resultId == false then
        return
    end
    local r = result.getDataString(resultId, "name")
    result.free(resultId)
    return r
end

local function vocation(name)
    local resultId = db.storeQuery('SELECT vocation FROM players WHERE name=' .. db.escapeString(name) .. ' LIMIT 1'), nil
    if resultId == false then
        return
    end
    local r = result.getDataInt(resultId, "vocation")
    result.free(resultId)
    return r
end

local function getPlayerBiddedMoney(cid)
    local resultId = db.storeQuery('SELECT `bid` FROM `houses` WHERE `highest_bidder`=' .. db.escapeString(getPlayerGUID(cid)) .. ' LIMIT 1')
    if resultId == false then
        return 0
    end
    local r = result.getDataInt(resultId, "bid")
    result.free(resultId)
    return r
end

local function updatePlayerBalance(name, value)
    db.query('UPDATE players SET balance=' .. value .. ' WHERE name=' .. db.escapeString(name) .. ' LIMIT 1')
end

function greet(cid)
    Topic[cid], count[cid], transfer[cid] = nil, nil, nil
    return true
end

function creatureSayCallback(cid, type, msg)
    if not npcHandler:isFocused(cid) then
        return false
    elseif msgcontains(msg, 'balance') then
        local bid = getPlayerBiddedMoney(cid)
        if(bid > 0) then
            npcHandler:say('Your account balance is ' .. getPlayerBalance(cid) .. ' gold, ' .. bid .. ' gold is blocked for house auctioned by you.', cid)
        else
            npcHandler:say('Your account balance is ' .. getPlayerBalance(cid) .. ' gold.', cid)
        end
        Topic[cid] = nil
    elseif msgcontains(msg, 'deposit') and msgcontains(msg, 'all') then
        if getPlayerMoney(cid) == 0 then
            npcHandler:say('You don\'t have any gold with you.', cid)
            Topic[cid] = nil
        else
            count[cid] = getPlayerMoney(cid)
            npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
            Topic[cid] = 2
        end
    elseif msgcontains(msg, 'deposit') then
        if getCount(msg) == 0 then
            npcHandler:say('You are joking, aren\'t you??', cid)
            Topic[cid] = nil
        elseif getCount(msg) ~= -1 then
            if getPlayerMoney(cid) >= getCount(msg) then
                count[cid] = getCount(msg)
                npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
                Topic[cid] = 2
            else
                npcHandler:say('You do not have enough gold.', cid)
                Topic[cid] = nil
            end
        elseif getPlayerMoney(cid) == 0 then
            npcHandler:say('You don\'t have any gold with you.', cid)
            Topic[cid] = nil
        else
            npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
            Topic[cid] = 1
        end
    elseif Topic[cid] == 1 then
        if getCount(msg) == -1 then
            npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
            Topic[cid] = 1
        elseif getPlayerMoney(cid) >= getCount(msg) then
            count[cid] = getCount(msg)
            npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
            Topic[cid] = 2
        else
            npcHandler:say('You do not have enough gold.', cid)
            Topic[cid] = nil
        end
    elseif msgcontains(msg, 'yes') and Topic[cid] == 2 then
        if doPlayerRemoveMoney(cid, count[cid]) then
            doPlayerSetBalance(cid, getPlayerBalance(cid) + count[cid])
            updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
            npcHandler:say('Alright, we have added the amount of ' .. count[cid] .. ' gold to your balance. You can withdraw your money anytime you want to.', cid)
        else
            npcHandler:say('I am inconsolable, but it seems you have lost your gold. I hope you get it back.', cid)
        end
        Topic[cid] = nil
    elseif msgcontains(msg, 'no') and Topic[cid] == 2 then
        npcHandler:say('As you wish. Is there something else I can do for you?', cid)
        Topic[cid] = nil
    elseif msgcontains(msg, 'withdraw') then
        if getCount(msg) == 0 then
            npcHandler:say('Sure, you want nothing you get nothing!', cid)
            Topic[cid] = nil
        elseif getCount(msg) ~= -1 then
            if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= getCount(msg) then
                count[cid] = getCount(msg)
                npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
                Topic[cid] = 4
            else
                npcHandler:say('There is not enough gold on your account.', cid)
                Topic[cid] = nil
            end
        elseif getPlayerBalance(cid) == 0 then
            npcHandler:say('You don\'t have any money on your bank account.', cid)
            Topic[cid] = nil
        else
            npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
            Topic[cid] = 3
        end
    elseif Topic[cid] == 3 then
        if getCount(msg) == -1 then
            npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
            Topic[cid] = 3
        elseif getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= getCount(msg) then
            count[cid] = getCount(msg)
            npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
            Topic[cid] = 4
        else
            npcHandler:say('There is not enough gold on your account.', cid)
            Topic[cid] = nil
        end
    elseif msgcontains(msg, 'yes') and Topic[cid] == 4 then
        if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
            doPlayerAddMoney(cid, count[cid])
            doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
            updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
            npcHandler:say('Here you are, ' .. count[cid] .. ' gold. Please let me know if there is something else I can do for you.', cid)
        else
            npcHandler:say('There is not enough gold on your account.', cid)
        end
        Topic[cid] = nil
    elseif msgcontains(msg, 'no') and Topic[cid] == 4 then
        npcHandler:say('The customer is king! Come back anytime you want to if you wish to withdraw your money.', cid)
        Topic[cid] = nil
    elseif msgcontains(msg, 'transfer') then
        if getCount(msg) == 0 then
            npcHandler:say('Please think about it. Okay?', cid)
            Topic[cid] = nil
        elseif getCount(msg) ~= -1 then

            count[cid] = getCount(msg)
            if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
                npcHandler:say('Who would you like to transfer ' .. count[cid] .. ' gold to?', cid)
                Topic[cid] = 6
            else
                npcHandler:say('There is not enough gold on your account.', cid)
                Topic[cid] = nil
            end

        else
            npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
            Topic[cid] = 5
        end
    elseif Topic[cid] == 5 then
        if getCount(msg) == -1 then
            npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
            Topic[cid] = 5
        else
            count[cid] = getCount(msg)
            if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
                npcHandler:say('Who would you like to transfer ' .. count[cid] .. ' gold to?', cid)
                Topic[cid] = 6
            else
                npcHandler:say('There is not enough gold on your account.', cid)
                Topic[cid] = nil
            end
        end
    elseif Topic[cid] == 6 then
        local v = getPlayerByName(msg)
        if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
            if v and Player(msg):getVocation():getId() > 0 then
                transfer[cid] = msg
                npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '?', cid)
                Topic[cid] = 7
            elseif getPlayerGUIDByName(msg:lower()) ~= 0  and vocation(msg:lower()) > 0 then
                transfer[cid] = msg
                npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. findPlayer(msg) .. '?', cid)
                Topic[cid] = 7 
            else
                npcHandler:say('This player does not exist on this world or have no vocation .', cid)
                Topic[cid] = nil
            end
        else
            npcHandler:say('There is not enough gold on your account.', cid)
            Topic[cid] = nil
        end
    elseif Topic[cid] == 7 and msgcontains(msg, 'yes') then
        if getPlayerBalance(cid) - getPlayerBiddedMoney(cid) >= count[cid] then
            local v = getPlayerByName(transfer[cid])
            if v then
                doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
                updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
                doPlayerSetBalance(v, getPlayerBalance(v) + count[cid])
                updatePlayerBalance(getPlayerName(v), getPlayerBalance(v))
                npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '.', cid)
            elseif findPlayer(transfer[cid]):lower() == transfer[cid]:lower() then
                doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
                updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
                db.query('UPDATE players SET balance=balance+' .. count[cid] .. ' WHERE name=' .. db.escapeString(transfer[cid]) .. ' LIMIT 1')
                npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. findPlayer(transfer[cid]) .. '.', cid)
            else
                npcHandler:say('This player does not exist.', cid)
            end
        else
            npcHandler:say('There is not enough gold on your account.', cid)
        end
        Topic[cid] = nil
    elseif Topic[cid] == 7 and msgcontains(msg, 'no') then
        npcHandler:say('Alright, is there something else I can do for you?', cid)
        Topic[cid] = nil
    elseif msgcontains(msg, 'change gold') then
        npcHandler:say('How many platinum coins would you like to get?', cid)
        Topic[cid] = 8
    elseif Topic[cid] == 8 then
        if getCount(msg) < 1 then
            npcHandler:say('Hmm, can I help you with something else?', cid)
            Topic[cid] = nil
        else
            count[cid] = math.min(500, getCount(msg))
            npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your gold coins into ' .. count[cid] .. ' platinum coins?', cid)
            Topic[cid] = 9
        end
    elseif Topic[cid] == 9 then
        if msgcontains(msg, 'yes') then
            if doPlayerRemoveItem(cid, 2148, count[cid] * 100) then
                npcHandler:say('Here you are.', cid)
                doPlayerAddItem(cid, 2152, count[cid])
            else
                npcHandler:say('Sorry, you do not have enough gold coins.', cid)
            end
        else
            npcHandler:say('Well, can I help you with something else?', cid)
        end
        Topic[cid] = nil
    elseif msgcontains(msg, 'change platinum') then
        npcHandler:say('Would you like to change your platinum coins into gold or crystal?', cid)
        Topic[cid] = 10
    elseif Topic[cid] == 10 then
        if msgcontains(msg, 'gold') then
            npcHandler:say('How many platinum coins would you like to change into gold?', cid)
            Topic[cid] = 11
        elseif msgcontains(msg, 'crystal') then
            npcHandler:say('How many crystal coins would you like to get?', cid)
            Topic[cid] = 13
        else
            npcHandler:say('Well, can I help you with something else?', cid)
            Topic[cid] = nil
        end
    elseif Topic[cid] == 11 then
        if getCount(msg) < 1 then
            npcHandler:say('Hmm, can I help you with something else?', cid)
            Topic[cid] = nil
        else
            count[cid] = math.min(500, getCount(msg))
            npcHandler:say('So you would like me to change ' .. count[cid] .. ' of your platinum coins into ' .. count[cid] * 100 .. ' gold coins for you?', cid)
            Topic[cid] = 12
        end
    elseif Topic[cid] == 12 then
        if msgcontains(msg, 'yes') then
            if doPlayerRemoveItem(cid, 2152, count[cid]) then
                npcHandler:say('Here you are.', cid)
                doPlayerAddItem(cid, 2148, count[cid] * 100)
            else
                npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
            end
        else
            npcHandler:say('Well, can I help you with something else?', cid)
        end
        Topic[cid] = nil
    elseif Topic[cid] == 13 then
        if getCount(msg) < 1 then
            npcHandler:say('Hmm, can I help you with something else?', cid)
            Topic[cid] = nil
        else
            count[cid] = math.min(500, getCount(msg))
            npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your platinum coins into ' .. count[cid] .. ' crystal coins for you?', cid)
            Topic[cid] = 14
        end
    elseif Topic[cid] == 14 then
        if msgcontains(msg, 'yes') then
            if doPlayerRemoveItem(cid, 2152, count[cid] * 100) then
                npcHandler:say('Here you are.', cid)
                doPlayerAddItem(cid, 2160, count[cid])
            else
                npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
            end
        else
            npcHandler:say('Well, can I help you with something else?', cid)
        end
        Topic[cid] = nil
    elseif msgcontains(msg, 'change crystal') then
        npcHandler:say('How many crystal coins would you like to change into platinum?', cid)
        Topic[cid] = 15
    elseif Topic[cid] == 15 then
        if getCount(msg) == -1 or getCount(msg) == 0 then
            npcHandler:say('Hmm, can I help you with something else?', cid)
            Topic[cid] = nil
        else
            count[cid] = math.min(500, getCount(msg))
            npcHandler:say('So you would like me to change ' .. count[cid] .. ' of your crystal coins into ' .. count[cid] * 100 .. ' platinum coins for you?', cid)
            Topic[cid] = 16
        end
    elseif Topic[cid] == 16 then
        if msgcontains(msg, 'yes') then
            if doPlayerRemoveItem(cid, 2160, count[cid]) then
                npcHandler:say('Here you are.', cid)
                doPlayerAddItem(cid, 2152, count[cid] * 100)
            else
                npcHandler:say('Sorry, you do not have enough crystal coins.', cid)
            end
        else
            npcHandler:say('Well, can I help you with something else?', cid)
        end
        Topic[cid] = nil
    elseif msgcontains(msg, 'change') then
        npcHandler:say('There are three different coin types in Tibia: 100 gold coins equal 1 platinum coin, 100 platinum coins equal 1 crystal coin. So if you\'d like to change 100 gold into 1 platinum, simply say \'{change gold}\' and then \'1 platinum\'.', cid)
        Topic[cid] = nil
    elseif msgcontains(msg, 'bank') then
        npcHandler:say('We can change money for you. You can also access your bank account.', cid)
        Topic[cid] = nil
    end
    return true
end

npcHandler:setCallback(CALLBACK_GREET, greet)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

 

Editado por DkAngel
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...