Para permitir que os jogadores usem o dinheiro em seu banco para comprar itens de NPCs, você precisará modificar o arquivo modules/shop/shop.lua. Vamos supor que você tenha uma tabela player_data que armazena as informações do banco do jogador.
Primeiro, você precisará adicionar uma nova função que verifica se o jogador tem dinheiro suficiente no banco para comprar um item. Adicione este código ao final do arquivo shop.lua:
function getPlayerBankBalance(cid)
local resultId = db.storeQuery("SELECT `balance` FROM `player_data` WHERE `id` = " .. getPlayerGUID(cid))
if resultId == false then
return false
end
local balance = result.getNumber(resultId, "balance")
result.free(resultId)
return balance
end
function getPlayerBankBalanceString(cid)
local balance = getPlayerBankBalance(cid)
if balance == false then
return "Not available"
else
return formatNumber(balance) .. " gold coins"
end
end
function doPlayerWithdrawFromBank(cid, amount)
if amount <= 0 then
return false
end
local balance = getPlayerBankBalance(cid)
if balance == false or balance < amount then
return false
end
db.query("UPDATE `player_data` SET `balance` = `balance` - " .. amount .. " WHERE `id` = " .. getPlayerGUID(cid))
doPlayerAddMoney(cid, amount)
return true
end
Agora, você precisará modificar a função onBuy para permitir que o jogador compre o item usando o dinheiro do banco. Aqui está o código modificado:
function onBuy(cid, item, subType, amount, ignoreCap, inBackpacks)
local cost = getItemPrice(item.itemid) * amount
if(getPlayerMoney(cid) + getPlayerBalance(cid) < cost) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You do not have enough money.")
end
if(inBackpacks) then
local container = doPlayerAddItem(cid, 2000, 1)
if(container == 0) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You do not have any container to put the item.")
end
doAddContainerItem(container, item.itemid, amount)
item = container
else
doPlayerAddItem(cid, item.itemid, amount)
end
doPlayerRemoveMoney(cid, cost - getPlayerBalance(cid))
doPlayerRemoveBalance(cid, math.min(cost, getPlayerBalance(cid)))
doSendAnimatedText(getThingPos(cid), "$-"..cost, TEXTCOLOR_ORANGE)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You bought ".. amount .." ".. getItemNameById(item.itemid) .." for ".. cost .." gold.")
return true
end
Agora que você identificou onde o dinheiro do jogador está sendo verificado, você pode fazer a seguinte modificação:
Antes:
if getPlayerMoney(cid) < item.price then npcHandler:say('Desculpe, você não tem dinheiro suficiente.', cid) return false end
Depois:
if getPlayerMoney(cid) + getPlayerBalance(cid) < item.price then npcHandler:say('Desculpe, você não tem dinheiro suficiente.', cid) return false end