From 1c8b6395e5914e2d1be17a40f2271c108026eb21 Mon Sep 17 00:00:00 2001 From: Lunovox Heavenfinder Date: Wed, 8 Apr 2020 23:52:00 -0300 Subject: [PATCH] =?UTF-8?q?BUG=20DE=20N=C3=83O=20CARREGAMENTO=20DE=20CAIXA?= =?UTF-8?q?=20ELETRONICO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit \![](https://disroot.org/upload/EEE8zxgjmPMM7zN-/screenshot_20200406_181005.png) O Animetrom me pediu para tentar corrigir este bug. Mas, não estou conseguindo porque parece que é um bug do proprio jogo minetest. Pois o comando 'newInv:set_size' da linha 62 do api.lua esta voltando o resultado antes de salvar o resultado dentro do inventario. E nas versões anteriores isso não ocorria. Felizmente esse bug não é crítico. Pois, o jogador consegue abrir o caixa eletrônico se insistir em abré-lo. (e o lag ajudar). Mais tarde tentarei mais uma vez corrigir este bug. --- api.lua | 10 ++++++++ item_atm.lua | 11 +++----- item_miner_cash.lua | 62 +++++++++++++++++++++------------------------ item_strongbox.lua | 14 +++++----- 4 files changed, 49 insertions(+), 48 deletions(-) diff --git a/api.lua b/api.lua index fad7029..7888b53 100644 --- a/api.lua +++ b/api.lua @@ -146,3 +146,13 @@ modMinerTrade.getDetachedInventory = function(playername) return newInv end + +modMinerTrade.showInventory = function(playername, ownername, title) + local inv = modMinerTrade.getDetachedInventory(ownername) + minetest.sound_play("sfx_alert", {player=playername, max_hear_distance=5.0,}) + minetest.show_formspec( + playername, + "safe_"..ownername, + modMinerTrade.getFormspec(ownername, title) + ) +end diff --git a/item_atm.lua b/item_atm.lua index fd8332e..1babe05 100644 --- a/item_atm.lua +++ b/item_atm.lua @@ -86,16 +86,13 @@ minetest.register_node("minertrade:atm", { 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 - local inv = modMinerTrade.getDetachedInventory(playername) - minetest.show_formspec( - playername, - "safe_"..playername, - modMinerTrade.getFormspec( - playername, + modMinerTrade.showInventory( + playername, + playername, modMinerTrade.translate("PUBLIC ATM - Account of '%s':"):format(playername) ) - ) else + minetest.sound_play("sfx_failure", {player=playername, 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) diff --git a/item_miner_cash.lua b/item_miner_cash.lua index 1a3d9ec..2b4a295 100644 --- a/item_miner_cash.lua +++ b/item_miner_cash.lua @@ -99,46 +99,42 @@ minetest.register_craftitem("minertrade:creditcard", { inventory_image = "obj_credit_card.png", --stack_max=9, --Acumula 9 por slot groups = {cash=1, trade=1}, -on_use = function(itemstack, player) + on_use = function(itemstack, player) local playername = player:get_player_name() -local meta = itemstack:get_meta() + 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 - - local inv = modMinerTrade.getDetachedInventory(tmpDatabase.ownername) - minetest.show_formspec( - playername, - "safe_"..tmpDatabase.ownername, - modMinerTrade.getFormspec( - tmpDatabase.ownername, - modMinerTrade.translate("ACCOUNT BANK of '%s':"):format(tmpDatabase.ownername) - ) + + 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) ) - --return itemstack + minetest.sound_play("sfx_alert", {object=player, max_hear_distance=5.0,}) + return itemstack + end + modMinerTrade.showInventory( + playername, + tmpDatabase.ownername, + modMinerTrade.translate("ACCOUNT BANK of '%s':"):format(tmpDatabase.ownername) + ) + return itemstack end, }) diff --git a/item_strongbox.lua b/item_strongbox.lua index 63cc710..775a244 100644 --- a/item_strongbox.lua +++ b/item_strongbox.lua @@ -42,22 +42,20 @@ minetest.register_node("minertrade:strongbox", { 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 - local inv = modMinerTrade.getDetachedInventory(ownername) - minetest.show_formspec( - playername, - "safe_"..ownername, - modMinerTrade.getFormspec( - ownername, - modMinerTrade.translate("STRONGBOX owned by '%s':"):format(ownername) - ) + modMinerTrade.showInventory( + playername, + ownername, + modMinerTrade.translate("STRONGBOX owned by '%s':"):format(ownername) ) else + minetest.sound_play("sfx_failure", {player=playername, 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", {player=playername, 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)