2022-05-12 11:32:28 -03:00
modMinerTrade.doBankSave = function ( )
2022-05-12 17:03:46 -03:00
modMinerTrade.debug ( " modMinerTrade.doBankSave() >>> " .. modMinerTrade.urlTabela )
2022-05-12 11:32:28 -03:00
local file = io.open ( modMinerTrade.urlTabela , " w " )
if file then
2022-05-12 17:03:46 -03:00
file : write (
minetest.encode_base64 ( minetest.serialize ( modMinerTrade.bank ) )
--minetest.serialize(modMinerTrade.bank)
)
2022-05-12 11:32:28 -03:00
file : close ( )
--minetest.log('action',"[MINERTRADE] Banco de dados salvo !")
else
minetest.log ( ' error ' , " [MINERTRADE:ERRO] " .. modMinerTrade.translate ( " The file '%s' is not in table format! " ) : format ( modMinerTrade.urlTabela ) )
end
end
modMinerTrade.doBankLoad = function ( )
2022-05-12 17:03:46 -03:00
modMinerTrade.debug ( " modMinerTrade.doBankSave() >>> " .. modMinerTrade.urlTabela )
2022-05-12 11:32:28 -03:00
local file = io.open ( modMinerTrade.urlTabela , " r " )
if file then
2022-05-12 17:03:46 -03:00
modMinerTrade.bank = minetest.decode_base64 ( minetest.deserialize ( file : read ( " *all " ) ) )
--modMinerTrade.bank = minetest.deserialize(file:read("*all"))
2022-05-12 11:32:28 -03:00
file : close ( )
if not modMinerTrade.bank or type ( modMinerTrade.bank ) ~= " table " then
minetest.log ( ' error ' , " [MINERTRADE:ERRO] " .. modMinerTrade.translate ( " The file '%s' is not in table format! " ) : format ( modMinerTrade.urlTabela ) )
return { }
else
minetest.log ( ' action ' , " [MINERTRADE] " .. modMinerTrade.translate ( " Opening '%s'! " ) : format ( modMinerTrade.urlTabela ) )
end
end
end
modMinerTrade.isExistAcount = function ( playername )
if modMinerTrade.bank . player [ playername ] ~= nil then
return true
else
return false
end
end
modMinerTrade.createAcount = function ( playername )
if modMinerTrade.bank . player [ playername ] == nil then
modMinerTrade.bank . player [ playername ] = {
acount_created = os.date ( " %Y/%b/%d %Hh:%Mm:%Ss " ) ,
balance = 0 ,
}
return true
else
return false
end
2017-03-13 18:47:26 -03:00
2022-05-12 11:32:28 -03:00
return modMinerTrade.bank . player [ playername ] . balance
end
2017-03-13 18:26:38 -03:00
2022-05-12 11:32:28 -03:00
modMinerTrade.getBalance = function ( playername )
if modMinerTrade.isExistAcount ( playername ) then
return modMinerTrade.bank . player [ playername ] . balance
end
end
2017-03-13 18:26:38 -03:00
2022-05-12 11:32:28 -03:00
modMinerTrade.showAtm = {
frmMain = function ( playername ) --FORMULÁRIO: PRINCIPAL / RAIZ
2022-05-12 17:03:46 -03:00
local formspec = " size[15,10] "
.. " bgcolor[#636D7688;false] "
2022-05-12 11:32:28 -03:00
--.."bgcolor[#636D76FF;false]"
--..default.gui_bg
--..default.gui_bg_img
--..default.gui_slots
2022-05-12 17:03:46 -03:00
--.."background[5.0,-0.25;10,10;default_steel_block.png^text_atm_front.png]"
.. " box[0.00,0.10;4.50,9.5;#000000] "
.. " button[0.25,0.50;4.00,0.5;btnBalance; " .. minetest.formspec_escape ( core.colorize ( " #FFFFFF " , modMinerTrade.translate ( " BALANCE " ) ) ) .. " ] "
.. " button[0.25,1.25;4.00,0.5;btnStatement; " .. minetest.formspec_escape ( core.colorize ( " #888888 " , modMinerTrade.translate ( " STATEMENT " ) ) ) .. " ] "
.. " button[0.25,2.00;4.00,0.5;btnDeposits; " .. minetest.formspec_escape ( core.colorize ( " #888888 " , modMinerTrade.translate ( " DEPOSITS " ) ) ) .. " ] "
.. " button[0.25,2.75;4.00,0.5;btnWithdrawals; " .. minetest.formspec_escape ( core.colorize ( " #FFFFF " , modMinerTrade.translate ( " WITHDRAWALS " ) ) ) .. " ] " -- [DINHEIRO E CHECK]
.. " button[0.25,3.50;4.00,0.5;btnTransfers; " .. minetest.formspec_escape ( core.colorize ( " #888888 " , modMinerTrade.translate ( " TRANSFERS " ) ) ) .. " ] "
.. " button[0.25,4.25;4.00,0.5;btnLoans; " .. minetest.formspec_escape ( core.colorize ( " #888888 " , modMinerTrade.translate ( " LOANS " ) ) ) .. " ] " --Emprestimos
.. " button[0.25,5.00;4.00,0.5;btnCreditCard; " .. minetest.formspec_escape ( core.colorize ( " #888888 " , modMinerTrade.translate ( " CREDIT CARD " ) ) ) .. " ] " -- [EXPEDIR E MUDAR SENHA]
.. " button[0.25,5.75;4.00,0.5;btnSetings; " .. minetest.formspec_escape ( core.colorize ( " #888888 " , modMinerTrade.translate ( " SETTINGS " ) ) ) .. " ] " --Se quer ou não uma senha, se quer receber uma carta quando houver uma nova movimentacao.
.. " button_exit[0.25,6.50;4.00,0.5;; " .. minetest.formspec_escape ( core.colorize ( " #FFFFFF " , modMinerTrade.translate ( " EXIT " ) ) ) .. " ] "
.. " box " .. " [5.0,0.25;9.5,9.5;#000000] "
.. " background[5.0,0.25;9.5,9.5;text_atm_front.png] "
2022-05-12 11:32:28 -03:00
modMinerTrade.doSoundPlayer ( playername , " sfx_atm " , 5 )
minetest.show_formspec ( playername , " frmAtmMain " , formspec )
end ,
frmBalance = function ( playername ) --FORMULÁRIO: SALDO
local msgBalance = " "
if modMinerTrade.isExistAcount ( playername ) then
msgBalance = modMinerTrade.translate ( " You own %03d minercash " ) : format ( modMinerTrade.getBalance ( playername ) )
else
msgBalance = modMinerTrade.translate ( " Player '%s' is not an account holder of this bank. " ) : format ( playername )
2017-03-13 18:26:38 -03:00
end
2022-05-12 17:03:46 -03:00
local formspec = " size[15,10] "
.. " bgcolor[#636D7688;false] "
2022-05-12 11:32:28 -03:00
--.."bgcolor[#636D76FF;false]"
--..default.gui_bg
--..default.gui_bg_img
--..default.gui_slots
2017-03-13 18:26:38 -03:00
2022-05-12 11:32:28 -03:00
--.."bgcolor[#636D76FF;false]"
2022-05-12 17:03:46 -03:00
--.."background[-0.25,-0.25;10,11;safe_inside.png]"
--.."button[0,0.0;4,0.5;btnAtmMain;"..minetest.formspec_escape(core.colorize("#FFFFFF", modMinerTrade.translate("BACK"))).."]"
--.."button_exit[0,3.0;4,0.5;;"..minetest.formspec_escape(core.colorize("#FFFFFF", modMinerTrade.translate("EXIT"))).."]"
.. " box[0.00,0.10;4.50,9.5;#000000] "
.. " button[0.25,0.50;4.00,0.5;btnAtmMain; " .. minetest.formspec_escape ( core.colorize ( " #FFFFFF " , modMinerTrade.translate ( " BALANCE " ) ) ) .. " ] "
--.. "button[0.25,1.25;4.00,0.5;btnStatement;"..minetest.formspec_escape(core.colorize("#888888", modMinerTrade.translate("STATEMENT"))).."]"
--.. "button[0.25,2.00;4.00,0.5;btnDeposits;"..minetest.formspec_escape(core.colorize("#888888", modMinerTrade.translate("DEPOSITS"))).."]"
--.. "button[0.25,2.75;4.00,0.5;btnWithdrawals;"..minetest.formspec_escape(core.colorize("#FFFFF", modMinerTrade.translate("WITHDRAWALS"))).."]" -- [DINHEIRO E CHECK]
--.. "button[0.25,3.50;4.00,0.5;btnTransfers;"..minetest.formspec_escape(core.colorize("#888888", modMinerTrade.translate("TRANSFERS"))).."]"
--.. "button[0.25,4.25;4.00,0.5;btnLoans;"..minetest.formspec_escape(core.colorize("#888888", modMinerTrade.translate("LOANS"))).."]" --Emprestimos
--.. "button[0.25,5.00;4.00,0.5;btnCreditCard;"..minetest.formspec_escape(core.colorize("#888888", modMinerTrade.translate("CREDIT CARD"))).."]" -- [EXPEDIR E MUDAR SENHA]
--.. "button[0.25,5.75;4.00,0.5;btnSetings;"..minetest.formspec_escape(core.colorize("#888888", modMinerTrade.translate("SETTINGS"))).."]" --Se quer ou não uma senha, se quer receber uma carta quando houver uma nova movimentacao.
.. " button_exit[0.25,6.50;4.00,0.5;; " .. minetest.formspec_escape ( core.colorize ( " #FFFFFF " , modMinerTrade.translate ( " EXIT " ) ) ) .. " ] "
.. " background[5.00,0.25;9.5,9.5;text_atm_front.png] "
.. " box[5.00,0.25;9.5,9.5;#000000CC] "
.. " label[5.25,0.50; " .. minetest.formspec_escape ( core.colorize ( " #00FFFF " , modMinerTrade.translate ( " BALANCES " ) .. " : " ) ) .. " ] "
.. " label[5.25,2.50; " .. minetest.formspec_escape ( core.colorize ( " #00FFFF " , msgBalance ) ) .. " ] "
2017-03-13 18:26:38 -03:00
2022-05-12 11:32:28 -03:00
modMinerTrade.doSoundPlayer ( playername , " sfx_atm " , 5 )
2022-05-12 17:03:46 -03:00
minetest.show_formspec (
playername ,
" frmAtmBalance " ,
formspec
)
2022-05-12 11:32:28 -03:00
end ,
frmWithdrawals = function ( playername ) --FORMULÁRIO: EXTRATO
local formspec = " size[9.5,10.5] "
--.."bgcolor[#636D76FF;false]"
--..default.gui_bg
--..default.gui_bg_img
--..default.gui_slots
--.."bgcolor[#636D76FF;false]"
.. " background[-0.25,-0.25;10,11;safe_inside.png] "
.. " button[0,0.0;4,0.5;btnAtmMain; " .. minetest.formspec_escape ( core.colorize ( " #FFFFFF " , modMinerTrade.translate ( " BACK " ) ) ) .. " ] "
.. " button_exit[0,3.0;4,0.5;; " .. minetest.formspec_escape ( core.colorize ( " #FFFFFF " , modMinerTrade.translate ( " EXIT " ) ) ) .. " ] "
2017-03-13 18:26:38 -03:00
2022-05-12 11:32:28 -03:00
modMinerTrade.doSoundPlayer ( playername , " sfx_atm " , 5 )
minetest.show_formspec ( playername , " frmAtmWithdrawals " , formspec )
2017-03-13 18:26:38 -03:00
end ,
2022-05-12 11:32:28 -03:00
}
2022-05-12 17:03:46 -03:00
modMinerTrade.onReceiveFields = function ( player , formname , fields )
local playername = player : get_player_name ( )
2022-05-12 11:32:28 -03:00
if fields.btnAtmMain ~= nil then
modMinerTrade.showAtm . frmMain ( playername )
else
if formname == " frmAtmMain " then
2022-05-12 17:03:46 -03:00
if fields.btnBalance ~= nil then
2022-05-12 11:32:28 -03:00
modMinerTrade.showAtm . frmBalance ( playername )
elseif fields.btnWithdrawals ~= nil then
modMinerTrade.showAtm . frmWithdrawals ( playername )
end
2017-03-13 18:26:38 -03:00
end
2022-05-12 11:32:28 -03:00
end
end
--###############################################################################################################
minetest.register_on_player_receive_fields ( function ( sender , formname , fields )
return modMinerTrade.onReceiveFields ( sender , formname , fields )
end )
2017-03-13 18:26:38 -03:00
2022-05-12 11:32:28 -03:00
minetest.register_on_leaveplayer ( function ( player )
modMinerTrade.doBankSave ( )
end )
2017-03-13 18:26:38 -03:00
2022-05-12 11:32:28 -03:00
minetest.register_on_shutdown ( function ( )
modMinerTrade.doBankSave ( )
minetest.log ( ' action ' , " [STRONGBOX] " .. modMinerTrade.translate ( " Saving bank from all players in the file '%s'! " ) : format ( modMinerTrade.urlTabela ) )
2022-05-12 17:03:46 -03:00
end )
minetest.register_node ( " minertrade:atm " , {
description = modMinerTrade.translate ( " PUBLIC ATM \n * Save your money in the ATM, and withdraw your money in your Personal Safe or other ATM in the shops scattered around the map. " ) ,
--inventory_image = minetest.inventorycube("text_atm_front_1.png"),
--inventory_image = "text_atm_front_1.png",
paramtype = " light " ,
sunlight_propagates = true ,
light_source = default.LIGHT_MAX ,
paramtype2 = " facedir " ,
--legacy_facedir_simple = true, --<=Nao sei para que serve!
is_ground_content = false ,
groups = { cracky = 1 } ,
--groups = {cracky=3,oddly_breakable_by_hand=3},
--sounds = default.node_sound_glass_defaults(),
tiles = {
--[[
" default_wood.png " ,
" default_wood.png " ,
" default_wood.png " ,
" default_wood.png " ,
" default_wood.png " ,
" text_atm_front_1.png " ,
--]]
--[[
" safe_side.png " ,
" safe_side.png " ,
" safe_side.png " ,
" safe_side.png " ,
" safe_side.png " ,
" safe_side.png^text_atm_front.png " ,
--]]
" default_steel_block.png " ,
" default_steel_block.png " ,
" default_steel_block.png " ,
" default_steel_block.png " ,
" default_steel_block.png " ,
" default_steel_block.png^text_atm_front.png " ,
} ,
on_place = function ( itemstack , placer , pointed_thing )
local playername = placer : get_player_name ( )
if not pointed_thing.type == " node " then
return itemstack
end
local posAbove = pointed_thing.above --acima
local posUnder = pointed_thing.under --abaixo
if not placer or not placer : is_player ( ) or
not minetest.registered_nodes [ minetest.get_node ( posAbove ) . name ] . buildable_to
then --Verifica se pode construir sobre os objetos construiveis
return itemstack
end
local nodeUnder = minetest.get_node ( posUnder )
if minetest.registered_nodes [ nodeUnder.name ] . on_rightclick then --Verifica se o itema na mao do jogador tem funcao rightclick
return minetest.registered_nodes [ nodeUnder.name ] . on_rightclick ( posUnder , nodeUnder , placer , itemstack )
end
if
minetest.get_player_privs ( playername ) . server
or modMinerTrade.getNodesInRange ( posAbove , 2 , " minertrade:dispensingmachine " ) >= 1
then
local facedir = minetest.dir_to_facedir ( placer : get_look_dir ( ) )
--minetest.chat_send_player(playername, "[ATM] aaaaaa")
minetest.set_node ( posAbove , {
name = " minertrade:atm " ,
param2 = facedir ,
} )
local meta = minetest.get_meta ( posAbove )
--meta:set_string("infotext", modMinerTrade.translate("PUBLIC ATM\n* Save your money in the ATM, and withdraw your money in your Personal Safe or other ATM in the shops scattered around the map."))
local now = os.time ( ) --Em milisegundos
if not minetest.get_player_privs ( playername ) . server then
meta : set_string ( " opentime " , now + modMinerTrade.delayConstruct )
else
meta : set_string ( " opentime " , now )
end
itemstack : take_item ( ) -- itemstack:take_item() = Ok
else
minetest.chat_send_player ( playername ,
core.colorize ( " #00ff00 " , " [ " .. modMinerTrade.translate ( " ATM " ) .. " ]: " )
.. modMinerTrade.translate ( " You can not install this 'ATM' too far from a 'Dispensing Machine'! " )
)
--return itemstack -- = Cancel
end
return itemstack
end ,
on_rightclick = function ( pos , node , clicker )
local clickername = clicker : get_player_name ( )
local meta = minetest.get_meta ( pos )
--meta:set_string("infotext", modMinerTrade.translate("PUBLIC ATM\n* Save your money in the ATM, and withdraw your money in your Personal Safe or other ATM in the shops scattered around the map."))
local opentime = tonumber ( meta : get_string ( " opentime " ) ) or 0
local now = os.time ( ) --Em milisegundos
if now >= opentime or minetest.get_player_privs ( clickername ) . server then
--[[
modMinerTrade.showInventory (
clicker ,
clickername ,
modMinerTrade.translate ( " PUBLIC ATM - Account of '%s': " ) : format ( clickername )
)
--]]
modMinerTrade.showAtm . frmMain ( clickername )
else
--minetest.sound_play("sfx_failure", {object=clicker, max_hear_distance=5.0,})
modMinerTrade.doSoundPlayer ( clickername , " sfx_failure " , 5 )
minetest.chat_send_player ( clickername ,
core.colorize ( " #00ff00 " , " [ " .. modMinerTrade.translate ( " ATM " ) .. " ]: " )
.. modMinerTrade.translate (
" The ATM will only run %02d seconds after it is installed! "
) : format ( opentime - now )
)
end
modMinerTrade.debug ( " on_rightclick() >>> " .. modMinerTrade.urlTabela )
end ,
} )
--[[
minetest.register_craft ( {
output = ' minertrade:atm ' ,
recipe = {
{ " default:steel_ingot " , " default:steel_ingot " , " default:steel_ingot " } ,
{ " default:steel_ingot " , " default:obsidian_glass " , " default:steel_ingot " } ,
{ " default:steel_ingot " , " default:mese " , " default:steel_ingot " } ,
}
} )
--]]
minetest.register_alias ( " atm " , " minertrade:atm " )
minetest.register_alias ( modMinerTrade.translate ( " atm " ) , " minertrade:atm " )