diff --git a/api.lua b/api.lua index cd15661..e0600b6 100644 --- a/api.lua +++ b/api.lua @@ -1,12 +1,5 @@ --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.debug = function(text, playername) if text ~= nil and type(text) == "string" @@ -55,8 +48,6 @@ modMinerTrade.getNodesInRange = function(pos, search_distance, nodenames) return #nodes end - - 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 @@ -73,69 +64,6 @@ modMinerTrade.doSoundPlayer = function(playername, sfxFile, intDistace) 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.bank[playername] = { } - for i=1,tamanho do - modMinerTrade.bank[playername][i] = newInv:get_stack("safe", i):to_table() - end -end - - -modMinerTrade.getSafeInventory = function(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) - --local listInventory = { } - for i=1,(modMinerTrade.size.width*modMinerTrade.size.height) do - 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 - end - return newInv:get_list("safe") -end - - -modMinerTrade.getFormspec = function(playername, ownername, title) - if not title then title = "" end - 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]" - --listcolors[slot_bg_normal;slot_bg_hover;slot_border;tooltip_bgcolor;tooltip_fontcolor] - .."listcolors[#3a4044CC;#636e7533;#74acd288;#CCCC00;#000000]" - - .."field[0,0;0,0;txtOwnerName;;"..minetest.formspec_escape(ownername).."]" - --.."hidden[ownername;"..minetest.formspec_escape(ownername)..";string]" - - .."label[0,0;"..minetest.formspec_escape(title).."]" - .."list[detached:safe_"..playername .. ";safe;" - ..((9.5 - modMinerTrade.size.width)/2)..","..(((4.6 - modMinerTrade.size.height)/2)+0.62)..";" - ..modMinerTrade.size.width..","..modMinerTrade.size.height - ..";]" -- <= ATENCAO: Nao pode esquecer o prefixo 'detached:xxxxxxx' - .."list[current_player;main;0.75,6.25;8,4;]" - - .."button[0.75,5.25;4,1;btnLootAll;"..minetest.formspec_escape(modMinerTrade.translate("LOOT ALL")).."]" - --.."tooltip[btnLootAll;"..minetest.formspec_escape(modMinerTrade.translate("Button under development (still not working)"))..";#CCCC00;#000000]" - .."button[4.75,5.25;4,1;btnDepositAll;"..minetest.formspec_escape(modMinerTrade.translate("DEPOSIT ALL")).."]" - --.."tooltip[btnDepositAll;"..minetest.formspec_escape(modMinerTrade.translate("Button under development (still not working)"))..";#CCCC00;#000000]" - - .."listring[detached:safe_"..playername .. ";safe]" - .."listring[current_player;main]" - return formspec -end ---]] - modMinerTrade.canInteract = function(meta, player) if player:get_player_name() == meta:get_string("owner") or minetest.get_player_privs(player:get_player_name()).server @@ -147,199 +75,6 @@ modMinerTrade.canInteract = function(meta, player) return false end ---[[ -modMinerTrade.getDetachedInventory = function(playername) - -- playername = player:get_player_name() - local newInv = minetest.create_detached_inventory("safe_"..playername, { --trunk - - -- Called when a player wants to move items inside the inventory - allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) - return count - end, - - -- Called when a player wants to put items into the inventory - allow_put = function(inv, listname, index, stack, player) - return stack:get_count() - end, - - -- Called when a player wants to take items out of the inventory - allow_take = function(inv, listname, index, stack, player) - return stack:get_count() - end, - - -- on_* - no return value - -- Called after the actual action has happened, according to what was allowed. - on_move = function(inv, from_list, from_index, to_list, to_index, count, player) - modMinerTrade.setSafeInventory(playername, inv:get_list("safe")) - --minetest.log('action',playername.." colocou "..stack:get_count().." '"..stack:get_name().."' em seu cofre!") - end, - on_put = function(inv, listname, index, stack, player) - modMinerTrade.setSafeInventory(playername, inv:get_list("safe")) - minetest.log('action',modMinerTrade.translate("Player '%s' has placed %02d '%s' in his safe!"):format(playername, stack:get_count(), stack:get_name())) - end, - on_take = function(inv, listname, index, stack, player) - modMinerTrade.setSafeInventory(playername, inv:get_list("safe")) - minetest.log('action',modMinerTrade.translate("Player '%s' has removed %02d '%s' in his safe!"):format(playername, stack:get_count(), stack:get_name())) - end, - - }) - local invList = modMinerTrade.getSafeInventory(playername) - if invList~=nil and #invList>=1 then - newInv:set_list("safe", invList) - else - newInv:set_size("safe", modMinerTrade.size.width*modMinerTrade.size.height) - end - - return newInv -end - -modMinerTrade.showInventory = function(player, ownername, title) - local playername = player:get_player_name() - local inv = modMinerTrade.getDetachedInventory(ownername) - minetest.sound_play("sfx_alert", {object=player, max_hear_distance=5.0,}) - minetest.show_formspec( - playername, - "safe_"..ownername, - modMinerTrade.getFormspec(ownername, ownername, title) - ) -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 - -modMinerTrade.doRemoveAll = function(player, ownername) - if player and player:is_player() then - local playername = player:get_player_name() - local invPlayer = player:get_inventory() - minetest.log('action',"[STRONGBOX] "..modMinerTrade.translate("The player '%s' pressed the button'%s'!"):format(playername, modMinerTrade.translate("DEPOSIT ALL"))) - if ownername and ownername:trim()~="" then - ownername = ownername:trim() - local invOwner = modMinerTrade.getDetachedInventory(ownername) - if not invOwner:is_empty("safe") then - local safe = invOwner:get_list("safe") - for i, item in pairs(safe) do - if invPlayer:room_for_item("main",item) then - invOwner:remove_item("safe",item) - invPlayer:add_item("main",item) - if invOwner:is_empty("safe") then - minetest.chat_send_player(playername, - core.colorize("#00ff00", "["..modMinerTrade.translate("STRONGBOX").."]: ") - ..modMinerTrade.translate("Loot completed!") - ) - minetest.sound_play("sfx_alert", {object=player, max_hear_distance=5.0,}) - break - end - else - minetest.chat_send_player( - playername, - core.colorize("#FF0000", "["..modMinerTrade.translate("STRONGBOX").."]: ") - ..modMinerTrade.translate("The Inventory of '%s' is full!"):format(playername) - ) - 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 - minetest.chat_send_player( - playername, - core.colorize("#FF0000", "["..modMinerTrade.translate("STRONGBOX").."]: ") - ..modMinerTrade.translate("Everything has been withdrawn!") - ) - minetest.sound_play("sfx_failure", {object=player, max_hear_distance=5.0,}) - end - else - minetest.log( - "error",("[modMinerTrade.doRemoveAll(player='%s', ownername='%s')] "):format(dump(player), dump(ownername)) - ..modMinerTrade.translate("The '%s' parameter must be of the non-empty string type!"):format("ownername") - ) - end - else - minetest.log( - "error",("[modMinerTrade.doRemoveAll(player='%s', ownername='%s')] "):format(dump(player), dump(ownername)) - ..modMinerTrade.translate("The '%s' parameter must be of the player object type!"):format("player") - ) - end -end - -modMinerTrade.doDepositAll = function(player, ownername) - if player and player:is_player() then - local playername = player:get_player_name() - local invPlayer = player:get_inventory() - --minetest.chat_send_player(playername, ">>>"..dump(ownername)) - minetest.log('action',"[STRONGBOX] "..modMinerTrade.translate("The player '%s' pressed the button'%s'!"):format(playername, modMinerTrade.translate("REMOVE ALL"))) - if ownername and ownername:trim()~="" then - ownername = ownername:trim() - local invOwner = modMinerTrade.getDetachedInventory(ownername) - if not invPlayer:is_empty("main") then - local main = invPlayer:get_list("main") - for i, item in pairs(main) do - if invOwner:room_for_item("safe",item) then - invPlayer:remove_item("main",item) - invOwner:add_item("safe",item) - if invPlayer:is_empty("main") then - minetest.chat_send_player(playername, - core.colorize("#00ff00", "["..modMinerTrade.translate("STRONGBOX").."]: ") - ..modMinerTrade.translate("Deposit completed!") - ) - minetest.sound_play("sfx_alert", {object=player, max_hear_distance=5.0,}) - break - end - else - minetest.chat_send_player( - playername, - core.colorize("#FF0000", "["..modMinerTrade.translate("STRONGBOX").."]: ") - ..modMinerTrade.translate("The Safe of '%s' is full!"):format(playername) - ) - 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 - minetest.chat_send_player( - playername, - core.colorize("#FF0000", "["..modMinerTrade.translate("STRONGBOX").."]: ") - ..modMinerTrade.translate("The inventory of '%s' is empty!"):format(playername) - ) - minetest.sound_play("sfx_failure", {object=player, max_hear_distance=5.0,}) - end - else - minetest.log( - "error",("[modMinerTrade.doDepositAll(player='%s', ownername='%s')] "):format(dump(player), dump(ownername)) - ..modMinerTrade.translate("The '%s' parameter must be of the non-empty string type!"):format("ownername") - ) - end - else - minetest.log( - "error",("[modMinerTrade.doDepositAll(player='%s', ownername='%s')] "):format(dump(player), dump(ownername)) - ..modMinerTrade.translate("The '%s' parameter must be of the player object type!"):format("player") - ) - end -end - -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 - if fields.txtOwnerName and fields.txtOwnerName:trim()~="" and fields.btnLootAll then - modMinerTrade.doRemoveAll(sender, fields.txtOwnerName:trim()) - elseif fields.btnDepositAll then - modMinerTrade.doDepositAll(sender, fields.txtOwnerName:trim()) - elseif 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) return { x=math.floor(pos.x),