mirror of
https://gitlab.com/lunovox/minertrade.git
synced 2025-03-21 16:01:22 +00:00
Função de Transferência. (Não testada)
This commit is contained in:
parent
cd8c75e3e2
commit
2aac65d875
1 changed files with 150 additions and 16 deletions
166
item_atm.lua
166
item_atm.lua
|
@ -1,4 +1,7 @@
|
||||||
|
minetest.register_privilege("developer", {
|
||||||
|
description=modMinerTrade.translate("Can access evolving ATM functions."),
|
||||||
|
give_to_singleplayer=false,
|
||||||
|
})
|
||||||
|
|
||||||
modMinerTrade.getUrlDatabase = function()
|
modMinerTrade.getUrlDatabase = function()
|
||||||
--Extensao '.tbl' ou '.db'
|
--Extensao '.tbl' ou '.db'
|
||||||
|
@ -160,6 +163,61 @@ modMinerTrade.getStatement = function(playername)
|
||||||
end
|
end
|
||||||
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)
|
modMinerTrade.checkValidStack = function(stack)
|
||||||
local cashtypes= modMinerTrade.getCashTypes()
|
local cashtypes= modMinerTrade.getCashTypes()
|
||||||
for i, item in pairs(cashtypes) do
|
for i, item in pairs(cashtypes) do
|
||||||
|
@ -564,7 +622,7 @@ modMinerTrade.showAccountBank = {
|
||||||
|
|
||||||
minetest.show_formspec(playername, "frmAtmDeposits", formspec)
|
minetest.show_formspec(playername, "frmAtmDeposits", formspec)
|
||||||
end,
|
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
|
local accountname = modMinerTrade.bank.player[playername].focused_accountname
|
||||||
modMinerTrade.debug("modMinerTrade.showAccountBank.frmGiveCash() >>> playername = "..playername.." | txtValue = "..dump(txtValue).." | msgDetails = "..dump(msgDetails))
|
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
|
||||||
end
|
end
|
||||||
elseif formname == "frmTransfer" then
|
elseif formname == "frmTransfer" then
|
||||||
if fields.btnWithdrawals ~= nil then
|
if fields.btnAtmTransfer ~= nil
|
||||||
modMinerTrade.doSoundPlayer(playername, "sfx_atm", 5)
|
local player = minetest.get_player_by_name(playername)
|
||||||
modMinerTrade.showAccountBank.frmTransfer(playername)
|
if player ~= nil and player:is_player() then
|
||||||
elseif fields.btnAtmGive ~= nil
|
local accountname = modMinerTrade.bank.player[playername].focused_accountname
|
||||||
and fields.txtBeneficiary ~= nil
|
if modMinerTrade.isExistAcount(accountname) then
|
||||||
and type(fields.txtBeneficiarytxtBeneficiary) == "string"
|
if
|
||||||
and fields.txtBeneficiary ~= ""
|
fields.txtBeneficiary ~= nil
|
||||||
and fields.txtBeneficiary ~= playername
|
and type(fields.txtBeneficiarytxtBeneficiary) == "string"
|
||||||
|
and fields.txtBeneficiary ~= ""
|
||||||
|
|
||||||
and fields.txtValue ~= nil
|
and fields.txtValue ~= nil
|
||||||
and tonumber(fields.txtValue) ~= nil
|
and tonumber(fields.txtValue) ~= nil
|
||||||
and type(tonumber(fields.txtValue))=="number"
|
and type(tonumber(fields.txtValue))=="number"
|
||||||
and tonumber(fields.txtValue) >= 1
|
and tonumber(fields.txtValue) >= 1
|
||||||
then
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue