TENTATIVA DE OTIMIZAÇÃO DE MEMÓRIA

Agora é possível apagar inventário desatarraxado quando o jogador fecha o formulário. isso provavelmente otimizará o uso da memória RAM.

Mais tarde precisarei fazer o mesmo nos mods "tradelands" e "checkinventoryplayer".
This commit is contained in:
Lunovox 2020-04-16 15:00:01 -03:00
parent 8fe7da0293
commit 2284201672
3 changed files with 28 additions and 19 deletions

28
api.lua
View file

@ -47,7 +47,8 @@ modMinerTrade.doLoad = function()
end end
modMinerTrade.setSafeInventory = function(playername, tblListInventory) modMinerTrade.setSafeInventory = function(playername, tblListInventory)
local newInv = minetest.create_detached_inventory_raw("safe_"..playername) --local newInv = minetest.create_detached_inventory_raw("safe_"..playername)
local newInv = core.create_detached_inventory_raw("safe_"..playername, playername)
newInv:set_list("safe", tblListInventory) newInv:set_list("safe", tblListInventory)
local tamanho = newInv:get_size("safe") local tamanho = newInv:get_size("safe")
modMinerTrade.safe[playername] = { } modMinerTrade.safe[playername] = { }
@ -58,7 +59,8 @@ end
modMinerTrade.getSafeInventory = function(playername) modMinerTrade.getSafeInventory = function(playername)
local newInv = minetest.create_detached_inventory_raw("safe_"..playername) --local newInv = minetest.create_detached_inventory_raw("safe_"..playername)
local newInv = core.create_detached_inventory_raw("safe_"..playername, playername)
newInv:set_size("safe", modMinerTrade.size.width*modMinerTrade.size.height) newInv:set_size("safe", modMinerTrade.size.width*modMinerTrade.size.height)
--local listInventory = { } --local listInventory = { }
for i=1,(modMinerTrade.size.width*modMinerTrade.size.height) do for i=1,(modMinerTrade.size.width*modMinerTrade.size.height) do
@ -170,6 +172,24 @@ modMinerTrade.showInventory = function(player, ownername, title)
) )
end end
modMinerTrade.delSafeInventory = function(ownername)
--core.detached_inventories["safe_"..ownername] = nil
return core.remove_detached_inventory_raw("safe_"..ownername)
--return minetest.remove_detached_inventory_raw("safe_"..ownername)
end
minetest.register_on_player_receive_fields(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
if fields.quit then
modMinerTrade.doSave()
modMinerTrade.delSafeInventory(sendername)
minetest.log('action',"[STRONGBOX] "..modMinerTrade.translate("Saving strongbox from all players in the file '%s'!"):format(modMinerTrade.urlTabela))
end
end
end)
--############################################################################## --##############################################################################
modMinerTrade.floor_pos = function(pos) modMinerTrade.floor_pos = function(pos)
return { return {
@ -275,7 +295,7 @@ modMinerTrade.sendMailMachine = function(posMachine, ownername, message)
end --if minetest.get_modpath("correio") then end --if minetest.get_modpath("correio") then
end end
minetest.errorDispensing = function(erroMessage, player, pos, ownername) modMinerTrade.errorDispensing = function(erroMessage, player, pos, ownername)
if type(erroMessage)=="string" and erroMessage:trim()~="" then if type(erroMessage)=="string" and erroMessage:trim()~="" then
if player:is_player() then if player:is_player() then
local playername = player:get_player_name() local playername = player:get_player_name()
@ -287,7 +307,7 @@ minetest.errorDispensing = function(erroMessage, player, pos, ownername)
end end
else else
minetest.log( minetest.log(
"error",("[minetest.errorDispensing(erroMessage='%s', player, pos, ownername)] "):format(dump(erroMessage)) "error",("[modMinerTrade.errorDispensing(erroMessage='%s', player, pos, ownername)] "):format(dump(erroMessage))
..modMinerTrade.translate("The '%s' parameter must be of the non-empty string type!"):format("erroMessage") ..modMinerTrade.translate("The '%s' parameter must be of the non-empty string type!"):format("erroMessage")
) )
end end

View file

@ -300,7 +300,7 @@ minetest.register_on_player_receive_fields(function(sender, formname, fields)
modMinerTrade.setMachineFlagsAlert(pos, 0)--0 = Can send new emails modMinerTrade.setMachineFlagsAlert(pos, 0)--0 = Can send new emails
else else
if error_name == "owners_fault" then if error_name == "owners_fault" then
minetest.errorDispensing( modMinerTrade.errorDispensing(
modMinerTrade.translate( modMinerTrade.translate(
--"The stock of '%s' is gone." --"The stock of '%s' is gone."
"The Dispensing Machine with offer '%s' cannot deliver more items to '%s' because stock of '%s' is empty!" "The Dispensing Machine with offer '%s' cannot deliver more items to '%s' because stock of '%s' is empty!"
@ -308,19 +308,19 @@ minetest.register_on_player_receive_fields(function(sender, formname, fields)
,sender ,pos ,ownername ,sender ,pos ,ownername
) )
elseif error_name == "without_space_to_profit" then elseif error_name == "without_space_to_profit" then
minetest.errorDispensing( modMinerTrade.errorDispensing(
modMinerTrade.translate( modMinerTrade.translate(
"The Dispensing Machine with offer '%s' is out of space to receive customer item '%s'." "The Dispensing Machine with offer '%s' is out of space to receive customer item '%s'."
):format(offer, sendername) ):format(offer, sendername)
,sender ,pos ,ownername ,sender ,pos ,ownername
) )
elseif error_name == "without_space_to_offer" then elseif error_name == "without_space_to_offer" then
minetest.errorDispensing( modMinerTrade.errorDispensing(
modMinerTrade.translate("Without enough space in Dispensing Machine to receive the seller's item. (Please, empty the receiving box!)") modMinerTrade.translate("Without enough space in Dispensing Machine to receive the seller's item. (Please, empty the receiving box!)")
,sender ,sender
) )
else else
minetest.errorDispensing( modMinerTrade.errorDispensing(
modMinerTrade.translate("The dispending can not be done. Make sure you offer what the machine asks for!") modMinerTrade.translate("The dispending can not be done. Make sure you offer what the machine asks for!")
,sender ,sender
) )

View file

@ -64,17 +64,6 @@ minetest.register_node("minertrade:strongbox", {
end, end,
}) })
minetest.register_on_player_receive_fields(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
if fields.quit then
modMinerTrade.doSave()
minetest.log('action',"[STRONGBOX] "..modMinerTrade.translate("Saving strongbox from all players in the file '%s'!"):format(modMinerTrade.urlTabela))
end
end
end)
minetest.register_craft({ minetest.register_craft({
output = 'minertrade:strongbox', output = 'minertrade:strongbox',
recipe = { recipe = {