Função de Transferência. (Não testada)

This commit is contained in:
Lunovox 2022-06-06 13:28:02 -03:00
parent cd8c75e3e2
commit 2aac65d875

View file

@ -1,4 +1,7 @@
minetest.register_privilege("developer", {
description=modMinerTrade.translate("Can access evolving ATM functions."),
give_to_singleplayer=false,
})
modMinerTrade.getUrlDatabase = function()
--Extensao '.tbl' ou '.db'
@ -160,6 +163,61 @@ modMinerTrade.getStatement = function(playername)
end
end
modMinerTrade.getSalt_Hash = function()
if modMinerTrade.bank.salt_hash == nil then
modMinerTrade.bank.salt_hash = minetest.encode_base64(os.date("%Y-%B-%d %Hh:%Mm:%Ss"))
end
return modMinerTrade.bank.salt_hash
end
modMinerTrade.getProofStack = function(playername, accountname, txtBeneficiary, txtValue, txtDescription)
local player = minetest.get_player_by_name(playername)
if player ~= nil and player:is_player() then
local max_text_size = 10000
local max_title_size = 80
local short_title_size = 35
local invPlayer = player:get_inventory()
local objProof = ItemStack("default:book_written")
--local data = objProof:get_meta():to_table().fields
local data = {}
--data.title = fields.title:sub(1, max_title_size)
data.title = modMinerTrade.translate("TRANSFER PROOF"):sub(1, max_title_size)
data.owner = "Minetest Bank"
local short_title = data.title
-- Don't bother triming the title if the trailing dots would make it longer
if #short_title > short_title_size + 3 then
short_title = short_title:sub(1, short_title_size) .. "..."
end
data.description = S("\"@1\" by @2", short_title, data.owner)
local when = os.date("%Y-%B-%d %Hh:%Mm:%Ss")
local myDocument = ""
.."\nDocument Type: TRANSFER PROOF"
.."\nPlayer: "..playername
.."\nAccount Holder: "..accountname
.."\nBeneficiary: "..txtBeneficiary
.."\nWhen: "..when
.."\nValue: "..txtValue.." minercash"
.."\nDescription: "..txtDescription
local Auth = minetest.get_password_hash(
modMinerTrade.getSalt_Hash(),
minetest.encode_base64(myDocument)
)
local data.text = ""
.."\n"..myDocument
.."\n----------------------------------"
.."\n"..Auth
data.text = data.text:sub(1, max_text_size)
data.text = data.text:gsub("\r\n", "\n"):gsub("\r", "\n")
data.page = 1
data.page_max = math.ceil((#data.text:gsub("[^\n]", "") + 1) / lpp)
objProof:get_meta():from_table({ fields = data })
return objProof
end
end
modMinerTrade.checkValidStack = function(stack)
local cashtypes= modMinerTrade.getCashTypes()
for i, item in pairs(cashtypes) do
@ -564,7 +622,7 @@ modMinerTrade.showAccountBank = {
minetest.show_formspec(playername, "frmAtmDeposits", formspec)
end,
frmTransfer = function(playername, txtBeneficiary, txtValue, msgDetails) --FORMULÁRIO: SAQUE
frmTransfer = function(playername, txtBeneficiary, txtValue, txtDescription, msgDetails) --FORMULÁRIO: SAQUE
local accountname = modMinerTrade.bank.player[playername].focused_accountname
modMinerTrade.debug("modMinerTrade.showAccountBank.frmGiveCash() >>> playername = "..playername.." | txtValue = "..dump(txtValue).." | msgDetails = "..dump(msgDetails))
@ -805,21 +863,97 @@ modMinerTrade.onReceiveFields = function(player, formname, fields)
end
end
elseif formname == "frmTransfer" then
if fields.btnWithdrawals ~= nil then
modMinerTrade.doSoundPlayer(playername, "sfx_atm", 5)
modMinerTrade.showAccountBank.frmTransfer(playername)
elseif fields.btnAtmGive ~= nil
and fields.txtBeneficiary ~= nil
and type(fields.txtBeneficiarytxtBeneficiary) == "string"
and fields.txtBeneficiary ~= ""
and fields.txtBeneficiary ~= playername
if fields.btnAtmTransfer ~= nil
local player = minetest.get_player_by_name(playername)
if player ~= nil and player:is_player() then
local accountname = modMinerTrade.bank.player[playername].focused_accountname
if modMinerTrade.isExistAcount(accountname) then
if
fields.txtBeneficiary ~= nil
and type(fields.txtBeneficiarytxtBeneficiary) == "string"
and fields.txtBeneficiary ~= ""
and fields.txtValue ~= nil
and tonumber(fields.txtValue) ~= nil
and type(tonumber(fields.txtValue))=="number"
and tonumber(fields.txtValue) >= 1
then
and fields.txtValue ~= nil
and tonumber(fields.txtValue) ~= nil
and type(tonumber(fields.txtValue))=="number"
and tonumber(fields.txtValue) >= 1
then
local txtBeneficiary = fields.txtBeneficiary
local txtValue = tonumber(fields.txtValue)
local txtDescription = ""
if fields.txtDescription ~= nil
and type(fields.txtDescription))=="string"
and fields.txtDescription:trim() ~= ""
then
--txtDescription = string.format("%-150s",fields.txtDescription:trim()):trim() --max 150 craracters
txtDescription = fields.txtDescription:trim():sub(1, 150) --max 150 craracters
else
txtDescription = modMinerTrade.translate("Transfer for undeclared reason!")
end
if modMinerTrade.isExistAcount(txtBeneficiary) then
if accountname ~= txtBeneficiary then
local thisBalance = modMinerTrade.getBalance(accountname)
if txtValue <= thisBalance then
modMinerTrade.addBalance(txtBeneficiary, txtValue)
modMinerTrade.addStatement(txtBeneficiary, txtValue, txtDescription)
modMinerTrade.addBalance(accountname, 0 - txtValue)
modMinerTrade.addStatement(accountname, 0 - txtValue, txtDescription)
local objProof = modMinerTrade.getProofStack(playername, accountname, txtBeneficiary, txtValue, txtDescription)
if invPlayer:room_for_item("main", objProof) then-- verifica se compartimento de Recebimento de pagamento do vendedor tem espaço
invPlayer:add_item("main", objProof)
minetest.chat_send_player(playername,
core.colorize("#00FF00", "["..modMinerTrade.translate("ATM").."]: ")
modMinerTrade.translate("Transfer successful!")
)
else
minetest.add_item(player:get_pos(), objProof)
minetest.chat_send_player(playername,
core.colorize("#00FF00", "["..modMinerTrade.translate("ATM").."]: ")
..core.colorize("#FF0000",
modMinerTrade.translate("The Transfer Proof was left on the floor because '%s' inventory has no free space."):format(playername)
)
)
end
--modMinerTrade.doSoundPlayer(playername, "sfx_atm", 5)
--modMinerTrade.showAccountBank.frmTransfer(playername, txtBeneficiary, txtValue, txtDescription, msgDetails) --FORMULÁRIO: SAQUE
modMinerTrade.doSoundPlayer(playername, "sfx_cash_register", 5)
modMinerTrade.showAccountBank.frmMain(playername)
else
modMinerTrade.doSoundPlayer(playername, "sfx_failure", 5)
modMinerTrade.showAccountBank.frmTransfer(
playername, txtBeneficiary, txtValue, txtDescription,
modMinerTrade.translate("The bank account holder '%s' does not have enough balance to make this requested transfer."):format(accountname)
)
end
else
modMinerTrade.doSoundPlayer(playername, "sfx_failure", 5)
modMinerTrade.showAccountBank.frmTransfer(
playername, txtBeneficiary, txtValue, txtDescription,
modMinerTrade.translate("Account holder '%s' cannot be a beneficiary of itself."):format(accountname)
)
end
else
modMinerTrade.doSoundPlayer(playername, "sfx_failure", 5)
modMinerTrade.showAccountBank.frmTransfer(
playername, txtBeneficiary, txtValue, txtDescription,
modMinerTrade.translate("The beneficiary '%s' does not have a current account with this bank."):format(txtBeneficiary)
)
end
else
modMinerTrade.doSoundPlayer(playername, "sfx_failure", 5)
modMinerTrade.showAccountBank.frmTransfer(playername)
end
else
--modMinerTrade.doSoundPlayer(playername, "sfx_failure", 5)
--modMinerTrade.showAccountBank.frmTransfer(playername)
modMinerTrade.doSoundPlayer(playername, "sfx_failure", 5)
modMinerTrade.showAccountBank.frmTransfer(
playername, nil, nil, nil,
modMinerTrade.translate("There is no account holder '%s' in this bank."):format(accountname)
)
end
end --Final of: if player ~= nil and player:is_player() then
end
end
end