No script Lua do NPC que lida com transações comerciais (geralmente dentro da pasta data/npc/scripts/), você deve incluir verificações do saldo bancário do jogador, além de verificar o dinheiro que ele tem em mãos.
Usar a função getBankBalance:
Use a função getPlayerBalance(cid) para verificar o saldo bancário do jogador. Se o jogador não tiver dinheiro suficiente em mãos, mas tiver saldo no banco, o NPC pode debitar diretamente do banco.
Exemplo de implementação: Aqui está um exemplo básico de como ajustar o código de um NPC para verificar o saldo bancário:
local function playerHasMoney(cid, amount)
local money = getPlayerMoney(cid) -- Dinheiro que o jogador tem na mochila
local bankBalance = getPlayerBalance(cid) -- Saldo do banco
-- Verifica se o jogador tem dinheiro suficiente na mochila ou no banco
return (money + bankBalance) >= amount
end
local function removePlayerMoney(cid, amount)
local money = getPlayerMoney(cid)
if money >= amount then
-- Se o jogador tiver dinheiro suficiente na mochila, remover da mochila
doPlayerRemoveMoney(cid, amount)
else
-- Se não, remover o que tem na mochila e o restante do banco
doPlayerRemoveMoney(cid, money)
doPlayerSetBalance(cid, getPlayerBalance(cid) - (amount - money))
end
end
-- Exemplo de função de venda de item
local function sellItem(cid, itemId, amount, cost)
if not playerHasMoney(cid, cost) then
npcHandler:say("Você não tem dinheiro suficiente.", cid)
return false
end
-- Se o jogador tiver dinheiro suficiente, remover o dinheiro e dar o item
removePlayerMoney(cid, cost)
doPlayerAddItem(cid, itemId, amount)
npcHandler:say("Aqui está o seu item!", cid)
return true
end
-- Exemplo de uso no script de NPC
local tradeItems = {
{name = "sword", id = 2376, price = 100}, -- Exemplo de item para vender
}
function onCreatureSay(cid, type, msg)
if msgcontains(msg, 'trade') then
npcHandler:say("Gostaria de comprar algo?", cid)
openShopWindow(cid, tradeItems) -- Abre a janela de trade
end
end
Explicação:
playerHasMoney(cid, amount): Verifica se o jogador tem dinheiro suficiente na mochila e/ou no banco.
removePlayerMoney(cid, amount): Deduz a quantia necessária primeiro da mochila e depois, se necessário, do banco.
Adicionar ao sistema de NPC existente:
Certifique-se de ajustar os nomes das funções e estruturas de diálogo do NPC para o formato usado no seu servidor.
Você pode integrar essa lógica com o sistema de eventos de NPCHandler que já está no OTX2.
sellItem: Implementa a lógica de venda de um item, removendo o dinheiro do jogador e entregando o item.