diff --git a/api.lua b/api.lua index 6e121bb..3e71f9d 100644 --- a/api.lua +++ b/api.lua @@ -1,11 +1,11 @@ --FONTE: https://forum.minetest.net/viewtopic.php?pid=48124 +--[[ minetest.register_privilege("checkchest", { description=modMinerTrade.translate("Permission to open locked chests of other players"), give_to_singleplayer=false, }) - -modMinerTrade.safe = {} +--]] modMinerTrade.getNodesInRange = function(pos, search_distance, node_name) if pos==nil then return 0 end @@ -21,39 +21,33 @@ modMinerTrade.getNodesInRange = function(pos, search_distance, node_name) return #nodes end -modMinerTrade.doSave = function() - local file = io.open(modMinerTrade.urlTabela, "w") - if file then - file:write(minetest.serialize(modMinerTrade.safe)) - 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.doLoad = function() - local file = io.open(modMinerTrade.urlTabela, "r") - if file then - modMinerTrade.safe = minetest.deserialize(file:read("*all")) - file:close() - if not modMinerTrade.safe or type(modMinerTrade.safe) ~= "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)) + +modMinerTrade.doSoundPlayer = function(playername, sfxFile, intDistace) + if intDistace == nil or (type(intDistace) == "number" and intDistace>= 0) then + if type(playername) == "string" and type(sfxFile) == "string" and playername ~= "" and sfxFile ~= "" then + local player = minetest.get_player_by_name(playername) + if player ~=nil and player:is_player() then + return minetest.sound_play(sfxFile, { + object = player, --Se retirar esta linha tocará para todos. (Provavelmente ¬¬) + gain = 1.0, -- 1.0 = Volume total + max_hear_distance = intDistace, + loop = false, + }) + end end end end +--[[ modMinerTrade.setSafeInventory = function(playername, tblListInventory) --local newInv = minetest.create_detached_inventory_raw("safe_"..playername) local newInv = core.create_detached_inventory_raw("safe_"..playername, playername) newInv:set_list("safe", tblListInventory) local tamanho = newInv:get_size("safe") - modMinerTrade.safe[playername] = { } + modMinerTrade.bank[playername] = { } for i=1,tamanho do - modMinerTrade.safe[playername][i] = newInv:get_stack("safe", i):to_table() + modMinerTrade.bank[playername][i] = newInv:get_stack("safe", i):to_table() end end @@ -64,8 +58,8 @@ modMinerTrade.getSafeInventory = function(playername) newInv:set_size("safe", modMinerTrade.size.width*modMinerTrade.size.height) --local listInventory = { } for i=1,(modMinerTrade.size.width*modMinerTrade.size.height) do - if modMinerTrade.safe and modMinerTrade.safe[playername] and modMinerTrade.safe[playername][i] then - newInv:set_stack("safe", i, ItemStack(modMinerTrade.safe[playername][i])) + if modMinerTrade.bank and modMinerTrade.bank[playername] and modMinerTrade.bank[playername][i] then + newInv:set_stack("safe", i, ItemStack(modMinerTrade.bank[playername][i])) else newInv:set_stack("safe", i, nil) end @@ -106,8 +100,9 @@ modMinerTrade.getFormspec = function(playername, ownername, title) .."listring[current_player;main]" return formspec end +--]] -modMinerTrade.isOpen = function(meta, player) +modMinerTrade.canInteract = function(meta, player) if player:get_player_name() == meta:get_string("owner") or minetest.get_player_privs(player:get_player_name()).server or minetest.get_player_privs(player:get_player_name()).checkchest @@ -118,6 +113,7 @@ modMinerTrade.isOpen = function(meta, player) return false end +--[[ modMinerTrade.getDetachedInventory = function(playername) -- playername = player:get_player_name() local newInv = minetest.create_detached_inventory("safe_"..playername, { --trunk @@ -211,7 +207,6 @@ modMinerTrade.doRemoveAll = function(player, ownername) minetest.sound_play("sfx_failure", {object=player, max_hear_distance=5.0,}) break end - --]] end --for i, item in pairs(safe) do modMinerTrade.setSafeInventory(ownername, invOwner:get_list("safe")) else @@ -268,7 +263,6 @@ modMinerTrade.doDepositAll = function(player, ownername) minetest.sound_play("sfx_failure", {object=player, max_hear_distance=5.0,}) break end - --]] end --for i, item in pairs(safe) do modMinerTrade.setSafeInventory(ownername, invOwner:get_list("safe")) else @@ -293,8 +287,7 @@ modMinerTrade.doDepositAll = function(player, ownername) end end - -minetest.register_on_player_receive_fields(function(sender, formname, fields) +modMinerTrade.onReceiveFields = function(sender, formname, fields) local sendername = sender:get_player_name() --minetest.chat_send_player(sendername, "formname="..formname.." fields="..dump(fields)) if formname == "safe_"..sendername then -- This is your form name @@ -308,9 +301,11 @@ minetest.register_on_player_receive_fields(function(sender, formname, fields) minetest.log('action',"[STRONGBOX] "..modMinerTrade.translate("Saving strongbox from all players in the file '%s'!"):format(modMinerTrade.urlTabela)) end end -end) +end +--]] + + ---############################################################################## modMinerTrade.floor_pos = function(pos) return { x=math.floor(pos.x), diff --git a/config.lua b/config.lua index 3d7b8d6..421c528 100644 --- a/config.lua +++ b/config.lua @@ -1,8 +1,6 @@ -modMinerTrade = { - urlTabela = minetest.get_worldpath().."/minertrade.db", --Extensao '.tbl' ou '.db' - delayConstruct = 1800, -- Após colocar o atm ou o strongbox no chão existe um intervalo 1800 segundos para começar a utilizá-los. - size = { - width = 8, --Slots number of atm and strongbox (Default:6 Max:8) - height = 4, --Slots number of atm and strongbox (Default:2 Max:4) - }, +modMinerTrade.bank = { + filesave = minetest.get_worldpath().."/minertrade.db", --Extensao '.tbl' ou '.db' + acounts = 0, + player = { }, } + diff --git a/init.lua b/init.lua index 6b4d5ef..be97f5d 100644 --- a/init.lua +++ b/init.lua @@ -1,21 +1,25 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) +modMinerTrade = { + modName = minetest.get_current_modname(), + modPath = minetest.get_modpath(minetest.get_current_modname()), +} -dofile(modpath.."/config.lua") -- <== Antes de carregar tudo! -dofile(modpath.."/translate.lua") -- <== Antes de 'api.lua'! -dofile(modpath.."/api.lua") -dofile(modpath.."/item_atm.lua") -dofile(modpath.."/item_strongbox.lua") ---dofile(modpath.."/item_strongbox_old.lua") +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(modpath.."/item_miner_cash.lua") -dofile(modpath.."/item_exchange_table.lua") -dofile(modpath.."/item_dispensing_machine.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") -- --dofile(path.."/item_rent_door.lua") +--dofile(modMinerTrade.modPath.."/payday.lua") +--dofile(modMinerTrade.modPath.."/commands.lua") + +if modMinerTrade.doAtmLoad ~= nil then + modMinerTrade.doAtmLoad() +end -dofile(modpath.."/payday.lua") -- <== Pay diary per playing in server. -dofile(modpath.."/commands.lua") -dofile(modpath.."/on_final.lua") -- <== Only after load all code! minetest.log('action',"["..modname:upper().."] Loaded!") diff --git a/item_atm.lua b/item_atm.lua index eff9ab8..de2ef73 100644 --- a/item_atm.lua +++ b/item_atm.lua @@ -1,116 +1,147 @@ -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", +modMinerTrade.doBankSave = function() + local file = io.open(modMinerTrade.urlTabela, "w") + if file then + file:write(minetest.serialize(modMinerTrade.bank)) + 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() + local file = io.open(modMinerTrade.urlTabela, "r") + if file then + 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)) + 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 - --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", - }, + return modMinerTrade.bank.player[playername].balance +end - on_place = function(itemstack, placer, pointed_thing) - local playername = placer:get_player_name() +modMinerTrade.getBalance = function(playername) + if modMinerTrade.isExistAcount(playername) then + return modMinerTrade.bank.player[playername].balance + end +end - 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 +modMinerTrade.showAtm = { + frmMain = function(playername) --FORMULÁRIO: PRINCIPAL / RAIZ + 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;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"))).."]" - 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) + 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) end + + local formspec = "size[9.5,10.5]" + --.."bgcolor[#636D76FF;false]" + --..default.gui_bg + --..default.gui_bg_img + --..default.gui_slots - 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) + --.."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)).."]" + + modMinerTrade.doSoundPlayer(playername, "sfx_atm", 5) + minetest.show_formspec(playername, "frmAtmBalance", formspec) + 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"))).."]" + + modMinerTrade.doSoundPlayer(playername, "sfx_atm", 5) + minetest.show_formspec(playername, "frmAtmWithdrawals", formspec) + end, + +} + +modMinerTrade.onReceiveFields = function(sender, formname, fields) + local sendername = sender:get_player_name() + if fields.btnAtmMain ~= nil then + modMinerTrade.showAtm.frmMain(playername) + else + if formname == "frmAtmMain" then + if fields.btnSaldo ~= nil then + modMinerTrade.showAtm.frmBalance(playername) + elseif fields.btnWithdrawals ~= nil then + modMinerTrade.showAtm.frmWithdrawals(playername) 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 playername = 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(playername).server then - modMinerTrade.showInventory( - clicker, - playername, - modMinerTrade.translate("PUBLIC ATM - Account of '%s':"):format(playername) - ) - else - minetest.sound_play("sfx_failure", {object=clicker, max_hear_distance=5.0,}) - minetest.chat_send_player(playername, - core.colorize("#00ff00", "["..modMinerTrade.translate("ATM").."]: ") - ..modMinerTrade.translate("The ATM will only run %02d seconds after it is installed!"):format(opentime-now) - ) - end - end, -}) + end +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( - modMinerTrade.translate("atm"), - "minertrade:atm" -) +minetest.register_on_player_receive_fields(function(sender, formname, fields) + return modMinerTrade.onReceiveFields(sender, formname, fields) +end) + +minetest.register_on_leaveplayer(function(player) + modMinerTrade.doBankSave() +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 diff --git a/old_item_atm.lua b/old_item_atm.lua new file mode 100644 index 0000000..eff9ab8 --- /dev/null +++ b/old_item_atm.lua @@ -0,0 +1,116 @@ +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", + }, + + 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 playername = 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(playername).server then + modMinerTrade.showInventory( + clicker, + playername, + modMinerTrade.translate("PUBLIC ATM - Account of '%s':"):format(playername) + ) + else + minetest.sound_play("sfx_failure", {object=clicker, max_hear_distance=5.0,}) + minetest.chat_send_player(playername, + core.colorize("#00ff00", "["..modMinerTrade.translate("ATM").."]: ") + ..modMinerTrade.translate("The ATM will only run %02d seconds after it is installed!"):format(opentime-now) + ) + end + 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( + modMinerTrade.translate("atm"), + "minertrade:atm" +) diff --git a/old_item_miner_cash.lua b/old_item_miner_cash.lua new file mode 100644 index 0000000..f598af7 --- /dev/null +++ b/old_item_miner_cash.lua @@ -0,0 +1,165 @@ + + +--######################################################################################### + +minetest.register_craftitem("minertrade:minercoin", { + description = modMinerTrade.translate("MINERCOIN\n* Basic craftable money with gold and steel."), + inventory_image = "obj_minecoin.png", + stack_max=9, --Acumula 9 por slot + groups = {cash=1, trade=1}, +}) + +minetest.register_craft({ + output = "minertrade:minercoin", + recipe = { + {"default:gold_ingot","default:steel_ingot","default:gold_ingot"}, + }, + --https://github.com/minetest/minetest_game/blob/master/mods/default/craftitems.lua +}) + +minetest.register_craft({ + type = "cooking", + output = "default:gold_ingot", + recipe = "minertrade:minercoin", + cooktime = 5, +}) + +minetest.register_alias( + modMinerTrade.translate("minercoin"), + "minertrade:minercoin" +) + +--########################################################################################################## + +minetest.register_craftitem("minertrade:minermoney", { + description = modMinerTrade.translate("MINERMONEY\n* equals 09 Minercoins."), + inventory_image = "obj_minemoney.png", + stack_max=9, --Acumula 9 por slot + groups = {cash=1, trade=1}, +}) + +minetest.register_craft({ + output = "minertrade:minermoney", + recipe = { + {"minertrade:minercoin", "minertrade:minercoin", "minertrade:minercoin"}, + {"minertrade:minercoin", "minertrade:minercoin", "minertrade:minercoin"}, + {"minertrade:minercoin", "minertrade:minercoin", "minertrade:minercoin"} + }, +}) + +minetest.register_craft({ + output = "minertrade:minercoin 9", + recipe = { + {"minertrade:minermoney"}, + }, +}) + + +minetest.register_alias( + modMinerTrade.translate("minermoney"), + "minertrade:minermoney" +) + +--########################################################################################################## + + +minetest.register_craftitem("minertrade:checkbank", { + description = modMinerTrade.translate("CHECK BANK\n* equals 09 Minermoneys."), + inventory_image = "obj_bank_check.png", + stack_max=9, --Acumula 9 por slot + groups = {cash=1, trade=1}, +}) + +minetest.register_craft({ + output = "minertrade:checkbank", + recipe = { + {"minertrade:minermoney", "minertrade:minermoney", "minertrade:minermoney"}, + {"minertrade:minermoney", "minertrade:minermoney", "minertrade:minermoney"}, + {"minertrade:minermoney", "minertrade:minermoney", "minertrade:minermoney"} + }, +}) + +minetest.register_craft({ + output = "minertrade:minermoney 9", + recipe = { + {"minertrade:checkbank"}, + }, +}) + + +minetest.register_alias( + modMinerTrade.translate("checkbank"), + "minertrade:checkbank" +) + +--########################################################################################################## + +minetest.register_craftitem("minertrade:creditcard", { + description = modMinerTrade.translate("CREDIT CARD (Unowned)\n* equals 09 Check Banks.\n* Allows you to access the bank account of the credit card owner anywhere in the world."), + inventory_image = "obj_credit_card.png", + --stack_max=9, --Acumula 9 por slot + groups = {cash=1, trade=1}, + on_use = function(itemstack, player) + local playername = player:get_player_name() + local meta = itemstack:get_meta() + local old_data = minetest.deserialize(itemstack:get_metadata()) + if old_data then + meta:from_table({ fields = old_data }) + end + local tmpDatabase = meta:to_table().fields + + if type(tmpDatabase.ownername)~="string" or tmpDatabase.ownername=="" then + tmpDatabase.ownername = playername + tmpDatabase.description = modMinerTrade.translate("CREDIT CARD of '%s'"):format(tmpDatabase.ownername) + local invPlayer = player:get_inventory() + local new_stack + local count = itemstack:get_count() + itemstack:set_count(count - 1) + new_stack = ItemStack("minertrade:creditcard") + new_stack:get_meta():from_table({ fields = tmpDatabase }) + if invPlayer:room_for_item("main", new_stack) then + invPlayer:add_item("main", new_stack) + else + minetest.add_item(player:get_pos(), new_stack) + end + minetest.chat_send_player(playername, + core.colorize("#00ff00", "["..modMinerTrade.translate("CREDIT CARD").."]: ") + ..modMinerTrade.translate("Your name has been saved to this credit card. Anyone using this credit card will be able to access the '%s' bank account."):format(tmpDatabase.ownername) + ) + minetest.sound_play("sfx_alert", {object=player, max_hear_distance=5.0,}) + return itemstack + end + modMinerTrade.showInventory( + player, + tmpDatabase.ownername, + modMinerTrade.translate("ACCOUNT BANK of '%s':"):format(tmpDatabase.ownername) + ) + return itemstack + end, +}) + +minetest.register_craft({ + output = "minertrade:creditcard", + recipe = { + {"minertrade:checkbank", "minertrade:checkbank", "minertrade:checkbank"}, + {"minertrade:checkbank", "minertrade:checkbank", "minertrade:checkbank"}, + {"minertrade:checkbank", "minertrade:checkbank", "minertrade:checkbank"} + }, +}) + +minetest.register_craft({ + output = "minertrade:checkbank 9", + recipe = { + {"minertrade:creditcard"}, + }, +}) + + +minetest.register_alias( + modMinerTrade.translate("creditcard"), + "minertrade:creditcard" +) + +--########################################################################################################## + + diff --git a/old_item_strongbox.lua b/old_item_strongbox.lua new file mode 100644 index 0000000..6b6e3e8 --- /dev/null +++ b/old_item_strongbox.lua @@ -0,0 +1,79 @@ +minetest.register_node("minertrade:strongbox", { + description = modMinerTrade.translate("STRONGBOX\n* Save your money in this safe and withdraw your money at any shop that has an ATM."), + --inventory_image = "safe_front.png", + + paramtype = "light", + sunlight_propagates = true, + light_source = default.LIGHT_MAX, + paramtype2 = "facedir", + + is_ground_content = false, + groups = {cracky=1}, + tiles = { + "safe_side.png", + "safe_side.png", + "safe_side.png", + "safe_side.png", + "safe_side.png", + "safe_front.png", + }, + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + local ownername = placer:get_player_name() or "" + meta:set_string("owner", ownername) + meta:set_string("infotext", modMinerTrade.translate("STRONGBOX (Property of '%s')\n* Save your money in this safe and withdraw your money at any shop that has an ATM."):format(ownername)) + local now = os.time() --Em milisegundos + meta:set_string("opentime", now+modMinerTrade.delayConstruct) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + if modMinerTrade.isOpen(meta, player) then + return true + else + return false + end + end, + on_rightclick = function(pos, node, clicker) + local playername = clicker:get_player_name() + local meta = minetest.get_meta(pos) + local ownername = meta:get_string("owner") + meta:set_string("infotext", modMinerTrade.translate("STRONGBOX (Property of '%s')\n* Save your money in this safe and withdraw your money at any shop that has an ATM."):format(ownername)) + if modMinerTrade.isOpen(meta, clicker) then + local opentime = tonumber(meta:get_string("opentime")) or 0 + local now = os.time() --Em milisegundos + if now >= opentime or minetest.get_player_privs(playername).server then + modMinerTrade.showInventory( + clicker, + ownername, + modMinerTrade.translate("STRONGBOX owned by '%s':"):format(ownername) + ) + else + minetest.sound_play("sfx_failure", {object=clicker, max_hear_distance=5.0,}) + minetest.chat_send_player(playername, + core.colorize("#00ff00", "["..modMinerTrade.translate("STRONGBOX").."]: ") + ..modMinerTrade.translate("The safe is going to work %02d seconds after it is installed!"):format(opentime-now) + ) + end + else + minetest.sound_play("sfx_failure", {object=clicker, max_hear_distance=5.0,}) + minetest.chat_send_player(playername, + core.colorize("#00ff00", "["..modMinerTrade.translate("STRONGBOX").."]: ") + ..modMinerTrade.translate("You do not have access to the safe belonging to '%s'!"):format(ownername) + ) + end + end, +}) + +minetest.register_craft({ + output = 'minertrade:strongbox', + recipe = { + {"default:steel_ingot" ,"default:steel_ingot" ,"default:steel_ingot"}, + {"default:steel_ingot" ,"" ,"default:mese_crystal"}, + {"default:steel_ingot" ,"default:steel_ingot" ,"default:steel_ingot"}, + } +}) + +minetest.register_alias( + modMinerTrade.translate("strongbox"), + "minertrade:strongbox" +) diff --git a/old_payday.lua b/old_payday.lua new file mode 100644 index 0000000..df7bc61 --- /dev/null +++ b/old_payday.lua @@ -0,0 +1,78 @@ +minetest.register_privilege("salary", { + description=modMinerTrade.translate("Only players with this privilege will receive a daily payment."), + give_to_singleplayer=false, +}) + +modMinerTrade.payday = { + salary = (minetest.setting_get("minertrade.payday.salary") or "minertrade:minercoin 1"), + interval = (tonumber(minetest.setting_get("minertrade.payday.interval")) or 60) +} + +minetest.after(3.5, function() + modMinerTrade.payday.time = 0 + minetest.register_globalstep(function(dtime) + modMinerTrade.payday.time = modMinerTrade.payday.time + dtime + if modMinerTrade.payday.time >= modMinerTrade.payday.interval then + modMinerTrade.payday.time = 0 + local dc = minetest.get_day_count() + local players = minetest.get_connected_players() + if #players >= 1 then + for _, player in ipairs(players) do + local lp = tonumber(player:get_meta():get_int("last_pay")) or 0 + if lp ~= dc then + local playername = player:get_player_name() + if minetest.get_player_privs(playername).salary then + local nameInvList = "safe" + local inv = modMinerTrade.getDetachedInventory(playername) + --minetest.chat_send_player(playername, "vazio = "..dump(inv:is_empty(nameInvList))) + local stack = ItemStack(modMinerTrade.payday.salary) + local leftover = inv:add_item(nameInvList, stack) + modMinerTrade.setSafeInventory(playername, inv:get_list(nameInvList)) + modMinerTrade.delSafeInventory(playername) + if leftover:get_count() > 0 then + minetest.chat_send_player( + playername, + core.colorize("#00ff00", "["..modMinerTrade.translate("CITY HALL").."]: ") + ..modMinerTrade.translate("Your Strongbox is full! %2d items weren't added in your bank account."):format(leftover:get_count()) + ) + minetest.sound_play("sfx_alert", {object=player, max_hear_distance=5.0,}) + else + minetest.chat_send_player( + playername, + core.colorize("#00ff00", "["..modMinerTrade.translate("CITY HALL").."]: ") + ..modMinerTrade.translate("The city hall deposited the %2d° salary in your bank account!"):format(dc) + ) + minetest.sound_play("sfx_cash_register", {object=player, max_hear_distance=5.0,}) + end + end + player:get_meta():set_int("last_pay",dc) + end + end + end + end + end) +end) + + + + + + + +--[[ +minetest.after(3.5, function() + modMinerTrade.payday = { + interval = (60 *24) / (tonumber(minetest.setting_get("time_speed")) or 72), + time = 0 + } + modMinerTrade.payday.interval = 1 + minetest.register_globalstep(function(dtime) + modMinerTrade.payday.time = modMinerTrade.payday.time + dtime + if modMinerTrade.payday.time >= modMinerTrade.payday.interval then + + end + end) +end) +--]] + + diff --git a/sounds/sfx_alert.ogg b/sounds/sfx_atm.ogg similarity index 100% rename from sounds/sfx_alert.ogg rename to sounds/sfx_atm.ogg