minertrade/item_atm.lua

311 lines
13 KiB
Lua
Raw Normal View History

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")