mirror of
https://gitlab.com/lunovox/minertrade.git
synced 2025-03-15 05:31:20 +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()
|
||||
--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
|
||||
|
|
Loading…
Add table
Reference in a new issue