From ce91e651dbe60cd927e14b957988ea22c0f19419 Mon Sep 17 00:00:00 2001 From: Lunovox Date: Thu, 12 May 2022 17:03:46 -0300 Subject: [PATCH] Saldo Ok! --- api.lua | 33 ++++++++ config.lua | 6 -- init.lua | 12 ++- item_atm.lua | 215 +++++++++++++++++++++++++++++++++++++++++------ minertrade.db | 1 + settingtypes.txt | 17 +++- 6 files changed, 246 insertions(+), 38 deletions(-) create mode 100644 minertrade.db diff --git a/api.lua b/api.lua index 3e71f9d..d706b47 100644 --- a/api.lua +++ b/api.lua @@ -7,6 +7,39 @@ minetest.register_privilege("checkchest", { }) --]] +modMinerTrade.debug = function(text, playername) + if text ~= nil + and type(text) == "string" + and text ~= "" + then + if minetest.settings:get_bool("minertrade.debug") then + if playername ~= nil + and type(playername) == "string" + and playername ~= "" + then + local player = minetest.get_player_by_name(playername) + if player ~=nil and player:is_player() then + minetest.chat_send_player( + playername, text + ) + minetest.log('action',"["..modMinerTrade.modName:upper()..":DEBUG:"..playername.."] "..text) + else + minetest.log('error', + "["..modMinerTrade.modName:upper()..":DEBUG] " + ..modSoundChat.translate( + "Unable to address debug for player '%s'." + ):format(dump(playername)) + ) + minetest.log('action',"["..modMinerTrade.modName:upper()..":DEBUG] "..text) + end + else + minetest.chat_send_all(text) + minetest.log('action',"["..modMinerTrade.modName:upper()..":DEBUG] "..text) + end + end + end +end + modMinerTrade.getNodesInRange = function(pos, search_distance, node_name) if pos==nil then return 0 end if pos.x==nil or type(pos.x)~="number" then return 0 end diff --git a/config.lua b/config.lua index 421c528..e69de29 100644 --- a/config.lua +++ b/config.lua @@ -1,6 +0,0 @@ -modMinerTrade.bank = { - filesave = minetest.get_worldpath().."/minertrade.db", --Extensao '.tbl' ou '.db' - acounts = 0, - player = { }, -} - diff --git a/init.lua b/init.lua index be97f5d..6906735 100644 --- a/init.lua +++ b/init.lua @@ -1,15 +1,21 @@ modMinerTrade = { modName = minetest.get_current_modname(), modPath = minetest.get_modpath(minetest.get_current_modname()), + urlTabela = minetest.get_worldpath().."/minertrade.db64", --Extensao '.tbl' ou '.db' + delayConstruct = 300, + bank = { + acounts = 0, + player = { }, + }, } -dofile(modMinerTrade.modPath.."/config.lua") -- <== Antes de carregar tudo! +--dofile(modMinerTrade.modPath.."/config.lua") -- <== Antes de carregar tudo! dofile(modMinerTrade.modPath.."/translate.lua") -- <== Antes de 'api.lua'! dofile(modMinerTrade.modPath.."/api.lua") dofile(modMinerTrade.modPath.."/item_exchange_table.lua") dofile(modMinerTrade.modPath.."/item_dispensing_machine.lua") ---dofile(modMinerTrade.modPath.."/item_atm.lua") +dofile(modMinerTrade.modPath.."/item_atm.lua") --dofile(modMinerTrade.modPath.."/item_strongbox.lua") --dofile(modMinerTrade.modPath.."/item_strongbox_old.lua") --dofile(modMinerTrade.modPath.."/item_miner_cash.lua") @@ -22,4 +28,4 @@ if modMinerTrade.doAtmLoad ~= nil then end -minetest.log('action',"["..modname:upper().."] Loaded!") +minetest.log('action',"["..modMinerTrade.modName:upper().."] Loaded!") diff --git a/item_atm.lua b/item_atm.lua index de2ef73..20d9cc5 100644 --- a/item_atm.lua +++ b/item_atm.lua @@ -1,7 +1,11 @@ modMinerTrade.doBankSave = function() + modMinerTrade.debug("modMinerTrade.doBankSave() >>> "..modMinerTrade.urlTabela) local file = io.open(modMinerTrade.urlTabela, "w") if file then - file:write(minetest.serialize(modMinerTrade.bank)) + file:write( + minetest.encode_base64(minetest.serialize(modMinerTrade.bank)) + --minetest.serialize(modMinerTrade.bank) + ) file:close() --minetest.log('action',"[MINERTRADE] Banco de dados salvo !") else @@ -10,9 +14,11 @@ modMinerTrade.doBankSave = function() end modMinerTrade.doBankLoad = function() + modMinerTrade.debug("modMinerTrade.doBankSave() >>> "..modMinerTrade.urlTabela) local file = io.open(modMinerTrade.urlTabela, "r") if file then - modMinerTrade.bank = minetest.deserialize(file:read("*all")) + modMinerTrade.bank = minetest.decode_base64(minetest.deserialize(file:read("*all"))) + --modMinerTrade.bank = minetest.deserialize(file:read("*all")) 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)) @@ -53,24 +59,28 @@ end modMinerTrade.showAtm = { frmMain = function(playername) --FORMULÁRIO: PRINCIPAL / RAIZ - local formspec = "size[9.5,10.5]" + local formspec = "size[15,10]" + .."bgcolor[#636D7688;false]" --.."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;btnBalance;"..minetest.formspec_escape(core.colorize("#FFFFFF", modMinerTrade.translate("BALANCE"))).."]" - --.."button[0,0.5;4,0.5;btnStatement;"..minetest.formspec_escape(core.colorize("#888888", modMinerTrade.translate("STATEMENT"))).."]" - --.."button[0,1.0;4,0.5;btnDeposits;"..minetest.formspec_escape(core.colorize("#888888", modMinerTrade.translate("DEPOSITS"))).."]" - .."button[0,1.5;4,0.5;btnWithdrawals;"..minetest.formspec_escape(core.colorize("#FFFFF", modMinerTrade.translate("WITHDRAWALS [DINHEIRO E CHECK]"))).."]" - --.."button[0,2.0;4,0.5;btnTransfers;"..minetest.formspec_escape(core.colorize("#888888", modMinerTrade.translate("TRANSFERS"))).."]" - --.."button[0,2.0;4,0.5;btnLoans;"..minetest.formspec_escape(core.colorize("#888888", modMinerTrade.translate("LOANS"))).."]" --Emprestimos - --.."button[0,2.5;4,0.5;btnCreditCard;"..minetest.formspec_escape(core.colorize("#888888", modMinerTrade.translate("CARTÃO DE CRÉDITO [EXPEDIR E MUDAR SENHA]"))).."]" - --.."button[0,3.0;4,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,3.5;4,0.5;;"..minetest.formspec_escape(core.colorize("#FFFFFF", modMinerTrade.translate("EXIT"))).."]" - + --.."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]" + modMinerTrade.doSoundPlayer(playername, "sfx_atm", 5) minetest.show_formspec(playername, "frmAtmMain", formspec) end, @@ -82,21 +92,41 @@ modMinerTrade.showAtm = { msgBalance = modMinerTrade.translate("Player '%s' is not an account holder of this bank."):format(playername) end - local formspec = "size[9.5,10.5]" + local formspec = "size[15,10]" + .."bgcolor[#636D7688;false]" --.."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"))).."]" - .."label[5.0,0.0;"..minetest.formspec_escape(core.colorize("#00FFFF", modMinerTrade.translate("BALANCES")..":")).."]" - .."label[5.0,2.0;"..minetest.formspec_escape(core.colorize("#00FFFF", msgBalance)).."]" + --.."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)).."]" + modMinerTrade.doSoundPlayer(playername, "sfx_atm", 5) - minetest.show_formspec(playername, "frmAtmBalance", formspec) + minetest.show_formspec( + playername, + "frmAtmBalance", + formspec + ) end, frmWithdrawals = function(playername) --FORMULÁRIO: EXTRATO local formspec = "size[9.5,10.5]" @@ -116,13 +146,13 @@ modMinerTrade.showAtm = { } -modMinerTrade.onReceiveFields = function(sender, formname, fields) - local sendername = sender:get_player_name() +modMinerTrade.onReceiveFields = function(player, formname, fields) + local playername = player:get_player_name() if fields.btnAtmMain ~= nil then modMinerTrade.showAtm.frmMain(playername) else if formname == "frmAtmMain" then - if fields.btnSaldo ~= nil then + if fields.btnBalance ~= nil then modMinerTrade.showAtm.frmBalance(playername) elseif fields.btnWithdrawals ~= nil then modMinerTrade.showAtm.frmWithdrawals(playername) @@ -144,4 +174,137 @@ end) 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)) -end) \ No newline at end of file +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") diff --git a/minertrade.db b/minertrade.db new file mode 100644 index 0000000..790fb7d --- /dev/null +++ b/minertrade.db @@ -0,0 +1 @@ +return {["player"] = {}, ["acounts"] = 0} \ No newline at end of file diff --git a/settingtypes.txt b/settingtypes.txt index 5067f16..6c4e84e 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -2,11 +2,22 @@ # Only players with "salary" privilege received a daily payment. # MINERTRADE: -# Prize given per virtual day to the online player. -# Default: 'minertrade:minercoin 1' -minertrade.payday.salary (Daily Salary) string minertrade:minercoin 1 +# If server will reward the player daily.. +# Default: true +minertrade.payday.enabled (Daily Salary Enabled) bool true + +# MINERTRADE: +# Value of the prize minercash that each player will receive at the end of the virtual day. +# Default: 1 | Min: 1 +minertrade.payday.value (Daily Salary Value) int 1 1 # MINERTRADE: # Time interval in seconds to check for rewardable players. +# WARNING: Decreasing this value too much can cause server lag. # Deafault: 60 | Min: 1 minertrade.payday.interval (Interval Check Salary) int 60 1 + +# MINERTRADE: +# Allows you to print the debug information of this mod on the screen. +# Default: false +minertrade.debug (Show Minertrade Debug) bool false