diff --git a/api.lua b/api.lua new file mode 100644 index 0000000..396fc72 --- /dev/null +++ b/api.lua @@ -0,0 +1,149 @@ +--FONTE: https://forum.minetest.net/viewtopic.php?pid=48124 + +minetest.register_privilege("checkchest", { + description="O poder abrir os baus trancados de outros jogadores", + give_to_singleplayer=false, +}) + +modMinerTrade.safe = {} + +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 + if pos.y==nil or type(pos.y)~="number" then return 0 end + if pos.z==nil or type(pos.z)~="number" then return 0 end + if search_distance==nil or type(search_distance)~="number" and search_distance<=0 then return 0 end + if node_name==nil or type(node_name)~="string" and node_name=="" then return 0 end + + local minp = {x=pos.x-search_distance,y=pos.y-search_distance, z=pos.z-search_distance} + local maxp = {x=pos.x+search_distance,y=pos.y+search_distance, z=pos.z+search_distance} + local nodes = minetest.env:find_nodes_in_area(minp, maxp, 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] O arquivo '"..modMinerTrade.urlTabela.."' não esta no formato de tabela!") + 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] O arquivo '"..modMinerTrade.urlTabela.."' não esta no formato de tabela!") + return { } + else + minetest.log('action',"[MINERTRADE] Abrindo '"..modMinerTrade.urlTabela.."' !") + end + end +end + +modMinerTrade.setSafeInventory = function(playername, tblListInventory) + local newInv = minetest.create_detached_inventory_raw("safe_"..playername) + newInv:set_list("safe", tblListInventory) + local tamanho = newInv:get_size("safe") + modMinerTrade.safe[playername] = { } + for i=1,tamanho do + modMinerTrade.safe[playername][i] = newInv:get_stack("safe", i):to_table() + end +end + + +modMinerTrade.getSafeInventory = function(playername) + local newInv = minetest.create_detached_inventory_raw("safe_"..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])) + else + newInv:set_stack("safe", i, nil) + end + end + return newInv:get_list("safe") +end + + +modMinerTrade.getFormspec = function(playername) + --local playername = player:get_player_name() + local formspec = "size[8,9]" + .."bgcolor[#636D76FF;false]" + --..default.gui_bg + --..default.gui_bg_img + ..default.gui_slots + --.."list[detached:safe_"..playername .. ";safe;1,1;"..modMinerTrade.size.width..","..modMinerTrade.size.height..";]" -- <= ATENCAO: Nao pode esquecer o prefixo 'detached:xxxxxxx' + + .."list[detached:safe_"..playername .. ";safe;" + ..((8 - modMinerTrade.size.width)/2)..","..((4 - modMinerTrade.size.height)/2)..";" + ..modMinerTrade.size.width..","..modMinerTrade.size.height + ..";]" -- <= ATENCAO: Nao pode esquecer o prefixo 'detached:xxxxxxx' + .."list[current_player;main;0,5;8,4;]" + + .."listring[detached:safe_"..playername .. ";safe]" + .."listring[current_player;main]" + return formspec +end + +modMinerTrade.isOpen = 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 + or (minetest.get_modpath("tradelands") and modTradeLands.canInteract(player:getpos(), player:get_player_name())) + then + return true + end + 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',playername.." colocou "..stack:get_count().." '"..stack:get_name().."' em seu cofre!") + end, + on_take = function(inv, listname, index, stack, player) + modMinerTrade.setSafeInventory(playername, inv:get_list("safe")) + minetest.log('action',playername.." retirou "..stack:get_count().." '"..stack:get_name().."' de seu cofre!") + 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 diff --git a/commands.lua b/commands.lua new file mode 100644 index 0000000..0a0477e --- /dev/null +++ b/commands.lua @@ -0,0 +1,52 @@ +minetest.register_privilege("checkchest", { + description="Jogador pode usar cheat", + give_to_singleplayer=false, +}) + +modMinerTrade.doCheckStrongBox = function(playername, param) + local targetname = string.match(param, "^([^ ]+)$") + if type(targetname)=="string" and targetname~="" then + if modMinerTrade.safe and modMinerTrade.safe[targetname] then + + local inv = modMinerTrade.getDetachedInventory(targetname) + minetest.show_formspec( + playername, + "safe_"..targetname, + modMinerTrade.getFormspec(targetname) + ) + return true + else + minetest.chat_send_player(playername, "[STRONGBOX:ERRO] O cofre de "..dump(targetname).." nao foi criado ainda!") + end + else + minetest.chat_send_player(playername, "[STRONGBOX:ERRO] /checkstrongbox ") + end + return false +end + +minetest.register_chatcommand("checkstrongbox", { + params = "", + description = "verifica o Cofre do jogador alvo", + privs = {checkchest=true}, + func = function(playername, param) + return modMinerTrade.doCheckStrongBox(playername, param) + end, +}) + +minetest.register_chatcommand("csb", { + params = "", + description = "verifica o Cofre do jogador alvo", + privs = {checkchest=true}, + func = function(playername, param) + return modMinerTrade.doCheckStrongBox(playername, param) + end, +}) + +minetest.register_chatcommand("checarcofre", { + params = "", + description = "verifica o Cofre do jogador alvo", + privs = {checkchest=true}, + func = function(playername, param) + return modMinerTrade.doCheckStrongBox(playername, param) + end, +}) diff --git a/config.lua b/config.lua new file mode 100644 index 0000000..f267490 --- /dev/null +++ b/config.lua @@ -0,0 +1,8 @@ +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 = 6, --Slots number of atm and strongbox (Default:6 Max:8) + height = 2, --Slots number of atm and strongbox (Default:2 Max:4) + }, +} diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..7950e42 --- /dev/null +++ b/depends.txt @@ -0,0 +1,5 @@ +default +doors? +lunomods? +lunotrades? +tradelands? diff --git a/depends2.txt b/depends2.txt new file mode 100644 index 0000000..e69de29 diff --git a/description.txt b/description.txt new file mode 100644 index 0000000..c22b0ba --- /dev/null +++ b/description.txt @@ -0,0 +1,10 @@ +Habilita itens: + * Minemoedas + * Mesa de Escambo (P2P) + * Maquina de Escambo + +Licence: + * GNU AGPL: https://pt.wikipedia.org/wiki/GNU_Affero_General_Public_License + +Developers: + * Lunovox diff --git a/description2.txt b/description2.txt new file mode 100644 index 0000000..2a721a4 --- /dev/null +++ b/description2.txt @@ -0,0 +1,10 @@ +Adiciona cofre interligado com o caixa eletronico para guardar seu dinheiros e pertences valiosos. O cofre precisa de 30 minutos para serem ativados apos seu posicionamento no mapa para evitar que os jogadores levem o cofre para sua exploracao do mapa. Se o mod lunotrades estiver ativado, o Caixa Eletronico so pode ser posicionado proximo a uma maquina de escambo. + +Licence: + * GNU AGPL: https://pt.wikipedia.org/wiki/GNU_Affero_General_Public_License + +Developers: + * Lunovox + +Comandos: + * /csb ou /checkstrongbox -- Exibe o que um jogador tem no inventario (necessita de priv 'server'). diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..d32a297 --- /dev/null +++ b/init.lua @@ -0,0 +1,32 @@ +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) + + + +dofile(modpath.."/config.lua") +dofile(modpath.."/api.lua") +dofile(modpath.."/commands.lua") +dofile(modpath.."/item_atm.lua") +dofile(modpath.."/item_strongbox.lua") +--dofile(modpath.."/item_strongbox_old.lua") + + +dofile(modpath.."/item_miner_cash.lua") +-- dofile(modpath.."/item_barter_table.lua") +dofile(modpath.."/item_dispensing_machine.lua") +-- --dofile(path.."/item_rent_door.lua") + + + +modMinerTrade.doLoad() + +minetest.register_on_leaveplayer(function(player) + modMinerTrade.doSave() +end) + +minetest.register_on_shutdown(function() + modMinerTrade.doSave() + minetest.log('action',"[STRONGBOX] Salvando cofre de todos os jogadores no arquivo '"..modMinerTrade.urlTabela.."'!") +end) + +minetest.log('action',"["..modname:upper().."] Carregado!") diff --git a/init2.lua b/init2.lua new file mode 100644 index 0000000..e69de29 diff --git a/item_atm.lua b/item_atm.lua new file mode 100644 index 0000000..f0ea7fd --- /dev/null +++ b/item_atm.lua @@ -0,0 +1,99 @@ +minetest.register_node("minertrade:atm", { + description = "Caixa Eletronico (ATM) - Guarde o seu dinheiro neste Caixa Eletrônico, e retire seu dinheiro em seu Cofre Pessoal ou qualquer outro Caixa Eletrônico espalhado pelo mapa.", + --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! + tiles = { + "default_wood.png", + "default_wood.png", + "default_wood.png", + "default_wood.png", + "default_wood.png", + "text_atm_front_1.png", + }, + is_ground_content = false, + --groups = {cracky=1}, + groups = {cracky=3,oddly_breakable_by_hand=3}, + --sounds = default.node_sound_glass_defaults(), + + 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", "Caixa Eletronico (ATM) - Guarde o seu dinheiro neste Caixa Eletrônico, e retire seu dinheiro em seu Cofre Pessoal ou qualquer outro Caixa Eletrônico espalhado pelo mapa.") + 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, "[ATM] Voce nao pode por este caixa eletronico muito longe de uma Maquina Dispensadora!") + --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) + 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) + ) + else + minetest.chat_send_player(playername, "[ATM] O Caixa Eletronico so vai funcionar "..(opentime-now).." segundos depois de instalado!") + end + end, +}) + +minetest.register_craft({ + output = 'minertrade:atm', + recipe = { + {"default:wood" ,"default:wood" ,"default:wood"}, + {"default:wood" ,"default:obsidian_glass" ,"default:wood"}, + {"default:wood" ,"default:mese" ,"default:wood"}, + } +}) + +minetest.register_alias("atm" ,"minertrade:atm") +minetest.register_alias("atmbox" ,"minertrade:atm") +minetest.register_alias("caixaeletronico" ,"minertrade:atm") diff --git a/item_barter_table.lua b/item_barter_table.lua new file mode 100644 index 0000000..cf99967 --- /dev/null +++ b/item_barter_table.lua @@ -0,0 +1,205 @@ +lunotrades.balcaodeescambo = {} +lunotrades.balcaodeescambo.formspec = { +--[[ + main = "size[8,9]".. + "list[current_name;pl1;0,0;3,4;]".. + "list[current_name;pl2;5,0;3,4;]".. + "list[current_player;main;0,5;8,4;]", + pl1 = { + start = "button[3,1;2,1;pl1_start;Oferecer]", + player = function(name) return "label[3,0;"..name.."]" end, + accept1 = "button[3,1;2,1;pl1_accept1;Confirmar]".. + "button[3,2;2,1;pl1_cancel;Cancelar]", + accept2 = "button[3,1;2,1;pl1_accept2;Trocar]".. + "button[3,2;2,1;pl1_cancel;Cancelar]", + }, + pl2 = { + start = "button[4,1;2,1;pl2_start;Oferecer]", + player = function(name) return "label[4,0;"..name.."]" end, + accept1 = "button[4,1;2,1;pl2_accept1;Confirmar]".. + "button[4,2;2,1;pl2_cancel;Cancelar]", + accept2 = "button[4,1;2,1;pl2_accept2;Trocar]".. + "button[4,2;2,1;pl2_cancel;Cancelar]", + }, +--]] + main = "size[10,9.5]".. + "label[3.5,0;MESA DE ESCAMBO (P2P)]".. + "list[current_name;pl1;0,1;3,4;]".. + "list[current_name;pl2;7,1;3,4;]".. + "label[1,5;Seu inventario:]".. + "list[current_player;main;1,5.5;8,4;]", + pl1 = { + start = "button[3,1;2.0,1;pl1_start;Abrir]", + player = function(name) return "label[0,0.5;"..name.." oferece:]" end, + accept1 = "button[3,1;2,1;pl1_accept1;Oferecer]".. + "button[3,2;2,1;pl1_cancel;Cancelar]", + accept2 = "button[3,1;2,1;pl1_accept2;Confirmar]".. + "button[3,2;2,1;pl1_cancel;Cancelar]", + }, + pl2 = { + start = "button[5,1;2.0,1;pl2_start;Abrir]", + player = function(name) return "label[7,0.5;"..name.." oferece:]" end, + accept1 = "button[5,1;2,1;pl2_accept1;Oferecer]".. + "button[5,2;2,1;pl2_cancel;Cancelar]", + accept2 = "button[5,1;2,1;pl2_accept2;Confirmar]".. + "button[5,2;2,1;pl2_cancel;Cancelar]", + }, +} + +lunotrades.balcaodeescambo.getPrivilegios = function(listname,playername,meta) + if listname == "pl1" then + if playername ~= meta:get_string("pl1") then + return false + elseif meta:get_int("pl1step") ~= 1 then + return false + end + end + if listname == "pl2" then + if playername ~= meta:get_string("pl2") then + return false + elseif meta:get_int("pl2step") ~= 1 then + return false + end + end + return true +end + +lunotrades.balcaodeescambo.update_formspec = function(meta) + local formspec = lunotrades.balcaodeescambo.formspec.main --10:18:33: ERROR[ServerThread]: Assignment to undeclared global "formspec" inside a function at /home/lunovox/.minetest/mods/lunotrades/balcaodeescambo.lua:68. + local pl_formspec = function (n) + if meta:get_int(n.."step")==0 then + formspec = formspec .. lunotrades.balcaodeescambo.formspec[n].start + else + formspec = formspec .. lunotrades.balcaodeescambo.formspec[n].player(meta:get_string(n)) + if meta:get_int(n.."step") == 1 then + formspec = formspec .. lunotrades.balcaodeescambo.formspec[n].accept1 + elseif meta:get_int(n.."step") == 2 then + formspec = formspec .. lunotrades.balcaodeescambo.formspec[n].accept2 + end + end + end + pl_formspec("pl1") --10:18:33: ERROR[ServerThread]: Assignment to undeclared global "pl_formspec" inside a function at /home/lunovox/.minetest/mods/lunotrades/balcaodeescambo.lua:80. + pl_formspec("pl2") + meta:set_string("formspec",formspec) +end + +lunotrades.balcaodeescambo.getInventario = function(inv,list,playername) + local player = minetest.env:get_player_by_name(playername) + if player then + for k,v in ipairs(inv:get_list(list)) do + player:get_inventory():add_item("main",v) + inv:remove_item(list,v) + end + end +end + +lunotrades.balcaodeescambo.cancel = function(meta) + lunotrades.balcaodeescambo.getInventario(meta:get_inventory(),"pl1",meta:get_string("pl1")) + lunotrades.balcaodeescambo.getInventario(meta:get_inventory(),"pl2",meta:get_string("pl2")) + meta:set_string("pl1","") + meta:set_string("pl2","") + meta:set_int("pl1step",0) + meta:set_int("pl2step",0) +end + +lunotrades.balcaodeescambo.exchange = function(meta) + lunotrades.balcaodeescambo.getInventario(meta:get_inventory(),"pl1",meta:get_string("pl2")) + lunotrades.balcaodeescambo.getInventario(meta:get_inventory(),"pl2",meta:get_string("pl1")) + meta:set_string("pl1","") + meta:set_string("pl2","") + meta:set_int("pl1step",0) + meta:set_int("pl2step",0) +end + +minetest.register_node("lunotrades:balcaodeescambo", { + description = "Mesa de Escambo (Player to Player)", + tiles = {"balcao_topo.png", "balcao1_baixo.png", "balcao1_lado.png"}, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("infotext", "Mesa de Escambo (Player to Player)") + meta:set_string("pl1","") + meta:set_string("pl2","") + lunotrades.balcaodeescambo.update_formspec(meta) + local inv = meta:get_inventory() + inv:set_size("pl1", 3*4) + inv:set_size("pl2", 3*4) + end, + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.env:get_meta(pos) + local pl_receive_fields = function(n) + if fields[n.."_start"] and meta:get_string(n) == "" then + minetest.sound_play("sfx_alert", {object=sender, max_hear_distance=5.0,}) + meta:set_string(n,sender:get_player_name()) + end + if meta:get_string(n) == "" then + meta:set_int(n.."step",0) + elseif meta:get_int(n.."step")==0 then + meta:set_int(n.."step",1) + end + if sender:get_player_name() == meta:get_string(n) then + if meta:get_int(n.."step")==1 and fields[n.."_accept1"] then + minetest.sound_play("sfx_alert", {object=sender, max_hear_distance=5.0,}) + meta:set_int(n.."step",2) + end + if meta:get_int(n.."step")==2 and fields[n.."_accept2"] then + minetest.sound_play("sfx_alert", {object=sender, max_hear_distance=5.0,}) + meta:set_int(n.."step",3) + if n == "pl1" and meta:get_int("pl2step") == 3 then lunotrades.balcaodeescambo.exchange(meta) end + if n == "pl2" and meta:get_int("pl1step") == 3 then lunotrades.balcaodeescambo.exchange(meta) end + end + if fields[n.."_cancel"] then + minetest.sound_play("sfx_alert", {object=sender, max_hear_distance=5.0,}) + lunotrades.balcaodeescambo.cancel(meta) + end + end + end + pl_receive_fields("pl1") --10:18:33: ERROR[ServerThread]: Assignment to undeclared global "pl_receive_fields" inside a function at /home/lunovox/.minetest/mods/lunotrades/balcaodeescambo.lua:156. + pl_receive_fields("pl2") + -- End + lunotrades.balcaodeescambo.update_formspec(meta) + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.env:get_meta(pos) + if not lunotrades.balcaodeescambo.getPrivilegios(from_list,player:get_player_name(),meta) then return 0 end + if not lunotrades.balcaodeescambo.getPrivilegios(to_list,player:get_player_name(),meta) then return 0 end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.env:get_meta(pos) + if not lunotrades.balcaodeescambo.getPrivilegios(listname,player:get_player_name(),meta) then return 0 end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.env:get_meta(pos) + if not lunotrades.balcaodeescambo.getPrivilegios(listname,player:get_player_name(),meta) then return 0 end + return stack:get_count() + end, +}) + + +--[[ +minetest.register_craft({ + output = 'lunotrades:balcaodeescambo', + recipe = { + {"group:wood" ,"group:wood" ,"group:wood"}, + {"default:stick" ,"wool:red" ,"default:stick"}, + {"default:stick" ,"wool:red" ,"default:stick"}, + } +}) +]]-- +minetest.register_craft({ + output = 'lunotrades:balcaodeescambo', + recipe = { + {"group:wood" ,"group:wood"}, + {"group:wood" ,"group:wood"}, + } +}) + + + +minetest.register_alias("balcaodeescambo" , "lunotrades:balcaodeescambo") +minetest.register_alias("balcaodetroca" , "lunotrades:balcaodeescambo") +minetest.register_alias("mesadeescambo" , "lunotrades:balcaodeescambo") +minetest.register_alias("mesadetroca" , "lunotrades:balcaodeescambo") diff --git a/item_dispensing_machine.lua b/item_dispensing_machine.lua new file mode 100644 index 0000000..4cbfe84 --- /dev/null +++ b/item_dispensing_machine.lua @@ -0,0 +1,310 @@ +modMinerTrade.dispensing = { + loja_atual = {} +} +modMinerTrade.dispensing.formspec = { + customer = function(pos) + local list_name = "nodemeta:"..pos.x..','..pos.y..','..pos.z + local formspec = "size[8,10.5]" + --..default.gui_bg + --..default.gui_bg_img + --..default.gui_slots + .."bgcolor[#004400DD;false]" + --.."background[-0.5,0;8.5,11;dispensador_frente.png]" + --listcolors[slot_bg_normal;slot_bg_hover;slot_border;tooltip_bgcolor;tooltip_fontcolor] + .."listcolors[#00000055;#008800;#FFFFFF]" + + .."label[2,-0.25;MÁQUINA DE DISPENSADORA]" + .."label[0,0.25;"..minetest.formspec_escape("* "..minetest.env:get_meta(pos):get_string("offer")).."]" + + .."label[0,1.0;O Cliente Oferece:]" + .."list[current_player;customer_gives;0,1.5;3,2;]" + + .."label[0,3.5;O Cliente Recebe:]" + .."list[current_player;customer_gets;0,4.0;3,2;]" + + .."button[3,2.0;2,1;exchange;ACEITAR]" + + .."label[0,6.0;Inventario atual do cliente:]" + .."list[current_player;main;0,6.5;8,4;]" + + + + .."label[5,1.0;A Maquina Precisa:]" + .."list["..list_name..";owner_wants;5,1.5;3,2;]" + + .."label[5,3.5;A Maquina Oferece:]" + .."list["..list_name..";owner_gives;5,4.0;3,2;]" + + --.."listcolors[#00000000;#00000022;#00000000;#00000033;#FFFFFFFF]" + --.."listcolors[#00000000;#00000033]" + + return formspec + end, + owner = function(pos) + local list_name = "nodemeta:"..pos.x..','..pos.y..','..pos.z + local formspec = "size[8,11]" + .."bgcolor[#000000CC;false]" + --listcolors[slot_bg_normal;slot_bg_hover;slot_border;tooltip_bgcolor;tooltip_fontcolor] + .."listcolors[#88888844;#888888;#FFFFFF]" + .."label[0,0;Itens Recebido (Seu Lucro):]" + .."list["..list_name..";customers_gave;0,0.5;3,2;]" + .."label[0,2.5;Estoque a Oferetar:]" + .."list["..list_name..";stock;0,3;3,2;]" + .."label[5,0;Voce Precisa:]" + .."list["..list_name..";owner_wants;5,0.5;3,2;]" + .."label[5,2.5;Voce Oferece:]" + .."list["..list_name..";owner_gives;5,3;3,2;]" + --.."label[0,5;Proprietario: Pressione (E) + Botao(RMB) no Mouse para a interface com o cliente]" + --.."label[0,5;Vendedor: Evite o estoque baixo e guardar lucros no balcao.]" + .."field[0.29,5.75;8,0.85;txtOffer;" + .."Faça um anúncio sobre o que esta máquina dispensará:;" + ..minetest.formspec_escape( + minetest.env:get_meta(pos):get_string("offer") + ).."]" + .."label[0,6.25;Inventario atual do vendedor:]" + .."list[current_player;main;0,6.75.0;8,4;]" + .."label[2,10.75;(CTRL + Mouse = Interface do Cliente)]" + return formspec + end, +} + +modMinerTrade.dispensing.getPrivilegio = function(listname,playername,meta) + --[[if listname == "pl1" then + if playername ~= meta:get_string("pl1") then + return false + elseif meta:get_int("pl1step") ~= 1 then + return false + end + end + if listname == "pl2" then + if playername ~= meta:get_string("pl2") then + return false + elseif meta:get_int("pl2step") ~= 1 then + return false + end + end]] + return true +end + + +modMinerTrade.dispensing.getInventario = function(inv,list,playername) + player = minetest.env:get_player_by_name(playername) + if player then + for k,v in ipairs(inv:get_list(list)) do + player:get_inventory():add_item("main",v) + inv:remove_item(list,v) + end + end +end + +modMinerTrade.dispensing.cancel = function(meta) + --[[modMinerTrade.dispensing.getInventario(meta:get_inventory(),"pl1",meta:get_string("pl1")) + modMinerTrade.dispensing.getInventario(meta:get_inventory(),"pl2",meta:get_string("pl2")) + meta:set_string("pl1","") + meta:set_string("pl2","") + meta:set_int("pl1step",0) + meta:set_int("pl2step",0)]] +end + +modMinerTrade.dispensing.exchange = function(meta) + --[[modMinerTrade.dispensing.getInventario(meta:get_inventory(),"pl1",meta:get_string("pl2")) + modMinerTrade.dispensing.getInventario(meta:get_inventory(),"pl2",meta:get_string("pl1")) + meta:set_string("pl1","") + meta:set_string("pl2","") + meta:set_int("pl1step",0) + meta:set_int("pl2step",0)]] +end + +modMinerTrade.dispensing.canOpen = function(pos, playername) + local meta = minetest.env:get_meta(pos) + if + meta:get_string("owner")==playername + or (minetest.get_modpath("tradelands") and modTradeLands.canInteract(pos, playername)) + then + return true + end + return false +end + +local box_format = { + type = "fixed", + fixed = { {-.5,-.5,-.3125, .5,.5+1/3,.3125} } +} + +minetest.register_node("minertrade:dispensingmachine", { + description = "Maquina Dispensadora (Vende itens por você)", + --tiles = {"balcao_topo.png", "balcao2_baixo.png", "balcao2_lado.png"}, + + drawtype = "nodebox", + paramtype = "light", --Nao sei pq, mas o blco nao aceita a luz se nao tiver esta propriedade + paramtype2 = "facedir", + sunlight_propagates = true, + light_source = LIGHT_MAX, + node_box = box_format, + selection_box = box_format, + tiles = { + "dispensador_cima.png", + "dispensador_baixo.png", + "dispensador_esquerda.png", + "dispensador_direita.png", + "dispensador_traz.png", + "dispensador_frente_grande.png"--.."^[transformfx" + }, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer, itemstack) + local owner = placer:get_player_name() + local meta = minetest.env:get_meta(pos) + meta:set_string("infotext", "Maquina Dispensadora de '"..owner.."'") + meta:set_string("owner",owner) + --[[meta:set_string("pl1","") + meta:set_string("pl2","")]] + local inv = meta:get_inventory() + inv:set_size("customers_gave", 3*2) + inv:set_size("stock", 3*2) + inv:set_size("owner_wants", 3*2) + inv:set_size("owner_gives", 3*2) + end, + on_rightclick = function(pos, node, clicker, itemstack) + --print("minertrade:dispensing.on_rightclick aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") + clicker:get_inventory():set_size("customer_gives", 3*2) + clicker:get_inventory():set_size("customer_gets", 3*2) + modMinerTrade.dispensing.loja_atual[clicker:get_player_name()] = pos + local meta = minetest.env:get_meta(pos) + local clickername = clicker:get_player_name() + if modMinerTrade.dispensing.canOpen(pos, clickername) and not clicker:get_player_control().aux1 then + minetest.show_formspec(clickername,"modMinerTrade.balcaodeloja_formspec",modMinerTrade.dispensing.formspec.owner(pos)) + else + minetest.show_formspec(clickername,"modMinerTrade.balcaodeloja_formspec",modMinerTrade.dispensing.formspec.customer(pos)) + end + --return itemstack + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local playername = player:get_player_name() + local meta = minetest.env:get_meta(pos) + if not modMinerTrade.dispensing.canOpen(pos, playername) then return 0 end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local playername = player:get_player_name() + local meta = minetest.env:get_meta(pos) + if not modMinerTrade.dispensing.canOpen(pos, playername) then return 0 end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local playername = player:get_player_name() + local meta = minetest.env:get_meta(pos) + if not modMinerTrade.dispensing.canOpen(pos, playername) then return 0 end + return stack:get_count() + end, + can_dig = function(pos, player) + local playername = player:get_player_name() + local meta = minetest.env:get_meta(pos) + local inv = meta:get_inventory() + local isCanDig = inv:is_empty("stock") and inv:is_empty("customers_gave") and inv:is_empty("owner_wants") and inv:is_empty("owner_gives") + if isCanDig~=true then + minetest.chat_send_player(playername,"[AVISO]: A Máquina Dispensadora não pode ser retirada antes de ser esvaziada!") + minetest.sound_play("sfx_alert", {object=player, max_hear_distance=5.0,}) + end + return isCanDig + end +}) + +minetest.register_on_player_receive_fields(function(sender, formname, fields) + if formname == "modMinerTrade.balcaodeloja_formspec" then + local name = sender:get_player_name() + local pos = modMinerTrade.dispensing.loja_atual[name] + local meta = minetest.env:get_meta(pos) + local owner = meta:get_string("owner") + --minetest.chat_send_player(name,"owner('"..owner.."') == name('"..name.."')") + + + + + if modMinerTrade.dispensing.canOpen(pos, name) and sender:get_player_control().aux1 then + minetest.chat_send_player(name,"Voce nao pode trocar na sua propria maquina!") + minetest.sound_play("sfx_alert", {object=sender, max_hear_distance=5.0,}) + return + else + --minetest.chat_send_player(name,"fields="..dump(fields)) + if fields.txtOffer ~= nil then + if fields.txtOffer ~= "" then + meta:set_string("offer", fields.txtOffer) + meta:set_string("infotext", + "Maquina Dispensadora de '"..owner.."'.\n\n" + --.."Oferta: \n".. + .." * "..fields.txtOffer + ) + else + meta:set_string("offer", "") + meta:set_string("infotext", "Maquina Dispensadora de '"..owner.."'.") + end + end + + + local minv = meta:get_inventory() + local pinv = sender:get_inventory() + local invlist_tostring = function(invlist) + local out = {} + for i, item in pairs(invlist) do + out[i] = item:to_string() + end + return out + end + local wants = minv:get_list("owner_wants") + local gives = minv:get_list("owner_gives") + if wants == nil or gives == nil then return end -- do not crash the server + -- Check if we can exchange + local can_exchange = true + local owners_fault = false + for i, item in pairs(wants) do + if not pinv:contains_item("customer_gives",item) then + can_exchange = false + end + end + for i, item in pairs(gives) do + if not minv:contains_item("stock",item) then + can_exchange = false + owners_fault = true + end + end + if can_exchange then + for i, item in pairs(wants) do + pinv:remove_item("customer_gives",item) + minv:add_item("customers_gave",item) + end + for i, item in pairs(gives) do + minv:remove_item("stock",item) + pinv:add_item("customer_gets",item) + end + minetest.chat_send_player(name,"Escambo feito!") + minetest.sound_play("sfx_cash_register", {object=sender, max_hear_distance=5.0,}) + elseif fields.quit==nil then + if owners_fault then + minetest.chat_send_player(name,"O estoque de '"..owner.."' acabou. Contacte-o!") + else + minetest.chat_send_player(name,"O escambo nao pode ser feito. Verifique se voce ofereceu o que a maquina pede!") + end + minetest.sound_play("sfx_alert", {object=sender, max_hear_distance=5.0,}) + end + end + end +end) + +minetest.register_craft({ + output = 'minertrade:dispensingmachine', + recipe = { + {"dye:dark_green" ,"default:steel_ingot" ,"default:steel_ingot"}, + {"default:glass" ,"" ,"default:steel_ingot"}, + {"dye:dark_green" ,"default:steel_ingot" ,"default:mese"}, + --COMENTaRIO: dye:dark_green = dye:blue[B2] + dye:yellow[C2] + } +}) + + +minetest.register_alias("maquinadispensadora" ,"minertrade:dispensingmachine") +minetest.register_alias("dispensadora" ,"minertrade:dispensingmachine") +minetest.register_alias("maquinadeloja" ,"minertrade:dispensingmachine") +minetest.register_alias("balcaodeloja" ,"minertrade:dispensingmachine") +minetest.register_alias("caixadeloja" ,"minertrade:dispensingmachine") +minetest.register_alias("loja" ,"minertrade:dispensingmachine") diff --git a/item_miner_cash.lua b/item_miner_cash.lua new file mode 100644 index 0000000..56d755f --- /dev/null +++ b/item_miner_cash.lua @@ -0,0 +1,120 @@ + + +--######################################################################################### + +minetest.register_craftitem("minertrade:minecoin", { + description = "Minermoeda (Dinheiro Craftável)", + inventory_image = "obj_minecoin.png", + stack_max=9, --Acumula 9 por slot + groups = { mobs=1 }, +}) + +minetest.register_craft({ + output = "minertrade:minecoin", + 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:minecoin", + cooktime = 5, +}) + +minetest.register_alias("minecoin", "minertrade:minecoin") +minetest.register_alias("minemoeda", "minertrade:minecoin") + +--########################################################################################################## + +minetest.register_craftitem("minertrade:minemoney", { + description = "Minercedula (Vale 9 Minermoedas)", + inventory_image = "obj_minemoney.png", + stack_max=9, --Acumula 9 por slot + groups = { mobs=1 }, +}) + +minetest.register_craft({ + output = "minertrade:minemoney", + recipe = { + {"minertrade:minecoin", "minertrade:minecoin", "minertrade:minecoin"}, + {"minertrade:minecoin", "minertrade:minecoin", "minertrade:minecoin"}, + {"minertrade:minecoin", "minertrade:minecoin", "minertrade:minecoin"} + }, +}) + +minetest.register_craft({ + output = "minertrade:minecoin 9", + recipe = { + {"minertrade:minemoney"}, + }, +}) + + +minetest.register_alias("minemoney", "minertrade:minemoney") +minetest.register_alias("minedinheiro", "minertrade:minemoney") + +--########################################################################################################## + + +minetest.register_craftitem("minertrade:piggybank", { + description = "Cofre Porquinho (Vale 9 Minercedulas)", + inventory_image = "obj_piggy_bank.png", + stack_max=9, --Acumula 9 por slot + groups = { mobs=1 }, +}) + +minetest.register_craft({ + output = "minertrade:piggybank", + recipe = { + {"minertrade:minemoney", "minertrade:minemoney", "minertrade:minemoney"}, + {"minertrade:minemoney", "minertrade:minemoney", "minertrade:minemoney"}, + {"minertrade:minemoney", "minertrade:minemoney", "minertrade:minemoney"} + }, +}) + +minetest.register_craft({ + output = "minertrade:minemoney 9", + recipe = { + {"minertrade:piggybank"}, + }, +}) + + +minetest.register_alias("piggybank" , "minertrade:piggybank") +minetest.register_alias("cofreporquinho" , "minertrade:piggybank") + +--########################################################################################################## + +minetest.register_craftitem("minertrade:creditcard", { + description = "Cartão de Crédito (Vale 9 Cofre-Porquinhos)", + inventory_image = "obj_credit_card.png", + stack_max=9, --Acumula 9 por slot + groups = { mobs=1 }, +}) + +minetest.register_craft({ + output = "minertrade:creditcard", + recipe = { + {"minertrade:piggybank", "minertrade:piggybank", "minertrade:piggybank"}, + {"minertrade:piggybank", "minertrade:piggybank", "minertrade:piggybank"}, + {"minertrade:piggybank", "minertrade:piggybank", "minertrade:piggybank"} + }, +}) + +minetest.register_craft({ + output = "minertrade:piggybank 9", + recipe = { + {"minertrade:creditcard"}, + }, +}) + + +minetest.register_alias("creditcard" , "minertrade:creditcard") +minetest.register_alias("cataodecredito" , "minertrade:creditcard") + +--########################################################################################################## + + diff --git a/item_rent_door.lua b/item_rent_door.lua new file mode 100644 index 0000000..0330cc2 --- /dev/null +++ b/item_rent_door.lua @@ -0,0 +1,234 @@ +lunotrades.rentdoorformspec = { + renter = function(pos) + local list_name = "nodemeta:"..pos.x..','..pos.y..','..pos.z + local formspec = "size[8,10]".. + "label[2.5,0;PORTAL DE ALUGUEL]".. + + --"label[0,0.5;O Locatador Oferece:]".. + --"list[current_player;customer_gives;0,1;3,2;]".. + --"label[0,3;O Cliente Recebe:]".. + --"list[current_player;customer_gets;0,3.5;3,2;]".. + + "button[3,1.5;2,1;exchange;ACEITAR]".. + + "label[5,0.5;O Locatario Precisa:]".. + "list["..list_name..";owner_wants;5,1;3,2;]".. + --"label[5,3;A Maquina Oferece:]".. + --"list["..list_name..";owner_gives;5,3.5;3,2;]".. + + "label[0,5.5;Inventario atual do cliente:]".. + "list[current_player;main;0,6.0;8,4;]" + + return formspec + end, + owner = function(pos) + local list_name = "nodemeta:"..pos.x..','..pos.y..','..pos.z + local formspec = "size[8,10]".. + + "label[0,0;Voce Recebe (Seu Lucro):]".. + "list["..list_name..";customers_gave;0,0.5;3,2;]".. + + --"label[0,2.5;Estoque a Oferetar:]".. + --"list["..list_name..";stock;0,3;3,2;]".. + + "label[5,0;Voce aluga por:]".. + "list["..list_name..";owner_wants;5,0.5;3,2;]".. + + --"label[5,2.5;Voce Oferece:]".. + --"list["..list_name..";owner_gives;5,3;3,2;]".. + + --"label[2,5;(CTRL + Mouse = Interface do Cliente)]".. + "label[0,5.5;Inventario atual do locatario:]".. + "list[current_player;main;0,6;8,4;]" + return formspec + end, +} + +function lunotrades.doCTRLRightClick(pos, node, clicker) + if ( + minetest.get_modpath("landrush") + and type(landrush.get_owner)=="function" + and landrush.get_owner(pos)~=nil + and landrush.get_owner(pos)~="" + ) then + + clicker:get_inventory():set_size("customer_gives", 3*2) + clicker:get_inventory():set_size("customer_gets", 3*2) + lunotrades.balcaodeloja.loja_atual[clicker:get_player_name()] = pos + local meta = minetest.env:get_meta(pos) + + local inv = meta:get_inventory() + if inv:is_empty("customers_gave") then + inv:set_size("customers_gave", 3*2) + end + --inv:set_size("stock", 3*2) + if inv:is_empty("owner_wants") then + inv:set_size("owner_wants", 3*2) + end + --inv:set_size("owner_gives", 3*2) + + if landrush.get_owner(pos)~=clicker:get_player_name() then + --minetest.chat_send_player(clicker:get_player_name(), "aaaaa Vc nao ser o proprietario!") + minetest.show_formspec(clicker:get_player_name(),"lunotrades.rentdoor_formspec",lunotrades.rentdoorformspec.renter(pos)) + else + --minetest.chat_send_player(clicker:get_player_name(), "bbbbb Vc SER o proprietario!") + minetest.show_formspec(clicker:get_player_name(),"lunotrades.rentdoor_formspec",lunotrades.rentdoorformspec.owner(pos)) + end + end +end + +function lunotrades.ifOpenDoor(pos, clicker) + if ( + not minetest.get_modpath("landrush") + or type(landrush.get_owner)~="function" + or landrush.get_owner(pos)==nil + or landrush.get_owner(pos)=="" + or landrush.get_owner(pos)==clicker:get_player_name() + ) then + return true + else + local playername = clicker:get_player_name() + local meta = minetest.get_meta(pos) + local renter = meta:get_string("renter") --Jogador locatario + local expiration = meta:get_string("expiration") --Jogador locatario + local now = os.time() + + --minetest.chat_send_player(clicker:get_player_name(), "Proprietario '"..dump(landrush.get_owner(pos)).."'!") + + + if expiration==nil or expiration=="" or now <= expiration then + if renter == playername then + return true + else + minetest.chat_send_player(clicker:get_player_name(), "Voce nao pode abrir esta porta alugada por '"..renter.."'!") + minetest.sound_play("sfx_falha", {object = clicker, gain = 2.0, max_hear_distance = 10}) + end + else + minetest.chat_send_player( + clicker:get_player_name(), + "Seu tempo de aluguel desta porta acabou. Favor segure CTRL e clique sobre a porta para pagar nova temporada de aluguel para '"..dump(landrush.get_owner(pos)).."'!" + ) + minetest.sound_play("sfx_falha", {object = clicker, gain = 2.0, max_hear_distance = 10}) + end + return false + + --[[ + meta:set_string("infotext", "Owned by "..playername) + meta = minetest.get_meta(pt2) + meta:set_string("doors_owner", playername) + meta:set_string("infotext", "Owned by "..playername) + + minetest.chat_send_player(clicker:get_player_name(), "Essa comeia nao pertece a voce!") + minetest.sound_play("sfx_falha", {object = clicker, gain = 2.0, max_hear_distance = 10}) + ]]-- + end +end + +function lunotrades.doOpenDoor(pos, dir, replace, replace_dir, params) + local p2 = minetest.get_node(pos).param2 + p2 = params[p2+1] + + local meta = minetest.get_meta(pos):to_table() + minetest.set_node(pos, {name=replace_dir, param2=p2}) + minetest.get_meta(pos):from_table(meta) + + pos.y = pos.y-dir + meta = minetest.get_meta(pos):to_table() + minetest.set_node(pos, {name=replace, param2=p2}) + minetest.get_meta(pos):from_table(meta) +end + +function lunotrades.on_rightclick(pos, dir, check_name, replace, replace_dir, params) + pos.y = pos.y+dir + if not minetest.get_node(pos).name == check_name then + return + end + lunotrades.doOpenDoor(pos, dir, replace, replace_dir, params) +end + +doors.register_door("lunotrades:rent_door", { + description = "Porta de Aluguel (Aux+RightClick para Alugar)", + inventory_image = "rent_door_inv.png", + --groups = {snappy=1,bendy=2,cracky=1,melty=2,level=2,door=1}, + groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,door=1}, + tiles_bottom = {"rent_door_b.png", "rent_door_side.png"}, + tiles_top = {"rent_door_a.png", "rent_door_side.png"}, + sounds = default.node_sound_wood_defaults(), + sound_open_door = "sfx_door_open", + sound_close_door = "sfx_door_close", + sunlight = false, +}) + +local instancias = {"lunotrades:rent_door_b_1", "lunotrades:rent_door_t_1", "lunotrades:rent_door_b_2", "lunotrades:rent_door_t_2"} + +for _,ItemID in ipairs(instancias) do + print("rent_door.ItemID="..ItemID) + if minetest.registered_items[ItemID] ~= nil then + local props = minetest.registered_items[ItemID] + --[[ + props.allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local playername = player:get_player_name() + local meta = minetest.env:get_meta(pos) + if player:get_player_name() ~= meta:get_string("owner") then return 0 end + return count + end, + props.allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local playername = player:get_player_name() + local meta = minetest.env:get_meta(pos) + if player:get_player_name() ~= meta:get_string("owner") then return 0 end + return stack:get_count() + end, + props.allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local playername = player:get_player_name() + local meta = minetest.env:get_meta(pos) + if player:get_player_name() ~= meta:get_string("owner") then return 0 end + return stack:get_count() + end, + ]]-- + minetest.register_node(":"..ItemID, props) + end +end + +minetest.register_craft({ + output = 'lunotrades:rent_door', + recipe = { + {'default:steel_ingot','default:steel_ingot',''}, + {'default:steel_ingot','lunotrades:moneybag"',''}, + {'default:steel_ingot','default:steel_ingot',''} + } +}) + +minetest.registered_nodes['lunotrades:rent_door_b_1'].on_rightclick = function(pos, node, clicker) + if not clicker:get_player_control().aux1 then + if lunotrades.ifOpenDoor(pos, clicker) then + lunotrades.on_rightclick(pos, 1, "lunotrades:rent_door_t_1", "lunotrades:rent_door_b_2", "lunotrades:rent_door_t_2", {1,2,3,0}) + end + else + lunotrades.doCTRLRightClick(pos, node, clicker) + end +end + +minetest.registered_nodes['lunotrades:rent_door_t_1'].on_rightclick = function(pos, node, clicker) + if not clicker:get_player_control().aux1 then + if lunotrades.ifOpenDoor(pos, clicker) then + lunotrades.on_rightclick(pos, -1, "lunotrades:rent_door_b_1", "lunotrades:rent_door_t_2", "lunotrades:rent_door_b_2", {1,2,3,0}) + end + else + lunotrades.doCTRLRightClick(pos, node, clicker) + end +end + +-- Fix for duplicating Bug! +-- Bug was caused, because the reverse order of the on_rightclick was not taken into account + +minetest.registered_nodes['lunotrades:rent_door_b_2'].on_rightclick = function(pos, node, clicker) + if not minetest.get_modpath("landrush") or landrush.can_interact(pos,clicker:get_player_name()) then + lunotrades.on_rightclick(pos, 1, "lunotrades:rent_door_t_2", "lunotrades:rent_door_b_1", "lunotrades:rent_door_t_1", {3,0,1,2}) + end +end + +minetest.registered_nodes['lunotrades:rent_door_t_2'].on_rightclick = function(pos, node, clicker) + if not minetest.get_modpath("landrush") or landrush.can_interact(pos,clicker:get_player_name()) then + lunotrades.on_rightclick(pos, -1, "lunotrades:rent_door_b_2", "lunotrades:rent_door_t_1", "lunotrades:rent_door_b_1", {3,0,1,2}) + end +end diff --git a/item_strongbox.lua b/item_strongbox.lua new file mode 100644 index 0000000..5714b70 --- /dev/null +++ b/item_strongbox.lua @@ -0,0 +1,69 @@ +minetest.register_node("minertrade:strongbox", { + description = "Cofre - Guarde seu dinheiro neste cofre e retire seu dinheiro em qualquer loja que possua um Caixa Eletrônico", + --inventory_image = "safe_front.png", + paramtype = "light", + paramtype2 = "facedir", + tiles = { + "safe_side.png", + "safe_side.png", + "safe_side.png", + "safe_side.png", + "safe_side.png", + "safe_front.png", + }, + is_ground_content = false, + groups = {cracky=1}, + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Cofre (Propriedade de "..meta:get_string("owner")..") - Guarde seu dinheiro neste cofre e retire seu dinheiro em qualquer loja que possua um Caixa Eletrônico.") + 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 + --local inv = meta:get_inventory() + --inv:set_list("safe", { }) + --return inv:is_empty("main") and modMinerTrade.isOpen(meta, player) + 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") + 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 + local inv = modMinerTrade.getDetachedInventory(ownername) + minetest.show_formspec( + playername, + "safe_"..ownername, + modMinerTrade.getFormspec(ownername) + ) + else + minetest.chat_send_player(playername, "[COFRE] O cofre so vai funcionar "..(opentime-now).." segundos depois de instalado!") + end + else + minetest.chat_send_player(playername, "[COFRE] Este cofre pertence a '"..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("strongbox" ,"minertrade:strongbox") +minetest.register_alias("cofre" ,"minertrade:strongbox") +minetest.register_alias("cofreforte" ,"minertrade:strongbox") +minetest.register_alias("caixaforte" ,"minertrade:strongbox") diff --git a/item_strongbox_old.lua b/item_strongbox_old.lua new file mode 100644 index 0000000..f4c196b --- /dev/null +++ b/item_strongbox_old.lua @@ -0,0 +1,104 @@ +minetest.register_node("strongbox:safe", { + description = "Cofre (12 Espacos)", + --inventory_image = "safe_front.png", + paramtype = "light", + paramtype2 = "facedir", + tiles = { + "safe_side.png", + "safe_side.png", + "safe_side.png", + "safe_side.png", + "safe_side.png", + "safe_front.png", + }, + is_ground_content = false, + groups = {cracky=1}, + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Cofre (Propriedade de "..meta:get_string("owner")..")") + end, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("owner", "") + meta:set_string("infotext", "Cofre") + local inv = meta:get_inventory() + inv:set_size("main", 6*2) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and strongbox.isOpen(meta, player) + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + if not strongbox.isOpen(meta, player) then + minetest.log("action", + player:get_player_name().." tentou mover um objeto no cofre de "..meta:get_string("owner").." em "..minetest.pos_to_string(pos) + ) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not strongbox.isOpen(meta, player) then + minetest.log("action", player:get_player_name().. + " tentou por um objeto no cofre de ".. + meta:get_string("owner").." em ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not strongbox.isOpen(meta, player) then + minetest.log("action", player:get_player_name().. + " tentou pegar um objeto no cofre de ".. + meta:get_string("owner").." em ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moveu um item no cofre em "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " colocou um item no cofre em "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " removeu um item no cofre em "..minetest.pos_to_string(pos)) + end, + on_rightclick = function(pos, node, clicker) + local meta = minetest.get_meta(pos) + if strongbox.isOpen(meta, clicker) then + minetest.show_formspec( + clicker:get_player_name(), + "strongbox:safe", + strongbox.getFormspec(pos) + ) + end + end, +}) + +minetest.register_craft({ + output = 'strongbox:safe', + recipe = { + {"default:steelblock" ,"default:steelblock" ,"default:steelblock"}, + {"default:steelblock" ,"" ,"default:mese"}, + {"default:steelblock" ,"default:steelblock" ,"default:steelblock"}, + } +}) + +minetest.register_alias("strongbox" ,"strongbox:safe") +minetest.register_alias("safe" ,"strongbox:safe") +minetest.register_alias("safeall" ,"strongbox:safe") +minetest.register_alias("safe-all" ,"strongbox:safe") +minetest.register_alias("caixaforte" ,"strongbox:safe") +minetest.register_alias("cofreforte" ,"strongbox:safe") +minetest.register_alias("cofre" ,"strongbox:safe") diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000..a9ce05f Binary files /dev/null and b/screenshot.png differ diff --git a/screenshot2.png b/screenshot2.png new file mode 100644 index 0000000..de7892f Binary files /dev/null and b/screenshot2.png differ diff --git a/sounds/sfx_alert.ogg b/sounds/sfx_alert.ogg new file mode 100644 index 0000000..fb841ca Binary files /dev/null and b/sounds/sfx_alert.ogg differ diff --git a/sounds/sfx_cash_register.ogg b/sounds/sfx_cash_register.ogg new file mode 100644 index 0000000..bceedbc Binary files /dev/null and b/sounds/sfx_cash_register.ogg differ diff --git a/textures/balcao1_baixo.png b/textures/balcao1_baixo.png new file mode 100644 index 0000000..722c37f Binary files /dev/null and b/textures/balcao1_baixo.png differ diff --git a/textures/balcao1_lado.png b/textures/balcao1_lado.png new file mode 100644 index 0000000..af63c63 Binary files /dev/null and b/textures/balcao1_lado.png differ diff --git a/textures/balcao2_baixo.png b/textures/balcao2_baixo.png new file mode 100644 index 0000000..66b6fbb Binary files /dev/null and b/textures/balcao2_baixo.png differ diff --git a/textures/balcao2_lado.png b/textures/balcao2_lado.png new file mode 100644 index 0000000..70ebb89 Binary files /dev/null and b/textures/balcao2_lado.png differ diff --git a/textures/balcao_topo.png b/textures/balcao_topo.png new file mode 100644 index 0000000..c79a898 Binary files /dev/null and b/textures/balcao_topo.png differ diff --git a/textures/dispensador_baixo.png b/textures/dispensador_baixo.png new file mode 100644 index 0000000..b6a7b93 Binary files /dev/null and b/textures/dispensador_baixo.png differ diff --git a/textures/dispensador_cima.png b/textures/dispensador_cima.png new file mode 100644 index 0000000..74dcdc3 Binary files /dev/null and b/textures/dispensador_cima.png differ diff --git a/textures/dispensador_direita.png b/textures/dispensador_direita.png new file mode 100644 index 0000000..c8b2fd0 Binary files /dev/null and b/textures/dispensador_direita.png differ diff --git a/textures/dispensador_esquerda.png b/textures/dispensador_esquerda.png new file mode 100644 index 0000000..e86432a Binary files /dev/null and b/textures/dispensador_esquerda.png differ diff --git a/textures/dispensador_frente_grande.png b/textures/dispensador_frente_grande.png new file mode 100644 index 0000000..efaad1a Binary files /dev/null and b/textures/dispensador_frente_grande.png differ diff --git a/textures/dispensador_frente_pequeno.png b/textures/dispensador_frente_pequeno.png new file mode 100644 index 0000000..a99beb1 Binary files /dev/null and b/textures/dispensador_frente_pequeno.png differ diff --git a/textures/dispensador_traz.png b/textures/dispensador_traz.png new file mode 100644 index 0000000..2838728 Binary files /dev/null and b/textures/dispensador_traz.png differ diff --git a/textures/obj_credit_card.png b/textures/obj_credit_card.png new file mode 100644 index 0000000..e77faca Binary files /dev/null and b/textures/obj_credit_card.png differ diff --git a/textures/obj_minecoin.png b/textures/obj_minecoin.png new file mode 100644 index 0000000..0a183d7 Binary files /dev/null and b/textures/obj_minecoin.png differ diff --git a/textures/obj_minecoin.xcf b/textures/obj_minecoin.xcf new file mode 100644 index 0000000..5732d00 Binary files /dev/null and b/textures/obj_minecoin.xcf differ diff --git a/textures/obj_minemoney.png b/textures/obj_minemoney.png new file mode 100644 index 0000000..97830ca Binary files /dev/null and b/textures/obj_minemoney.png differ diff --git a/textures/obj_piggy_bank.png b/textures/obj_piggy_bank.png new file mode 100644 index 0000000..b512102 Binary files /dev/null and b/textures/obj_piggy_bank.png differ diff --git a/textures/rascunhos/balcao2_baixo.png b/textures/rascunhos/balcao2_baixo.png new file mode 100644 index 0000000..66b6fbb Binary files /dev/null and b/textures/rascunhos/balcao2_baixo.png differ diff --git a/textures/rascunhos/balcao2_lado.png b/textures/rascunhos/balcao2_lado.png new file mode 100644 index 0000000..70ebb89 Binary files /dev/null and b/textures/rascunhos/balcao2_lado.png differ diff --git a/textures/rascunhos/c2e1e4b438132024a883e8c115684371.jpg b/textures/rascunhos/c2e1e4b438132024a883e8c115684371.jpg new file mode 100644 index 0000000..833cc9e Binary files /dev/null and b/textures/rascunhos/c2e1e4b438132024a883e8c115684371.jpg differ diff --git a/textures/rascunhos/coca-cola.jpg b/textures/rascunhos/coca-cola.jpg new file mode 100644 index 0000000..c2ff2e7 Binary files /dev/null and b/textures/rascunhos/coca-cola.jpg differ diff --git a/textures/rascunhos/dispensador_frente_a.png b/textures/rascunhos/dispensador_frente_a.png new file mode 100644 index 0000000..7ca4ea5 Binary files /dev/null and b/textures/rascunhos/dispensador_frente_a.png differ diff --git a/textures/rascunhos/dispensador_frente_b.png b/textures/rascunhos/dispensador_frente_b.png new file mode 100644 index 0000000..fb72317 Binary files /dev/null and b/textures/rascunhos/dispensador_frente_b.png differ diff --git a/textures/rascunhos/dispensador_frente_grande.xcf b/textures/rascunhos/dispensador_frente_grande.xcf new file mode 100644 index 0000000..ff03a1d Binary files /dev/null and b/textures/rascunhos/dispensador_frente_grande.xcf differ diff --git a/textures/rascunhos/dispensador_traz_a.png b/textures/rascunhos/dispensador_traz_a.png new file mode 100644 index 0000000..fb47d48 Binary files /dev/null and b/textures/rascunhos/dispensador_traz_a.png differ diff --git a/textures/rascunhos/dispensador_traz_b.png b/textures/rascunhos/dispensador_traz_b.png new file mode 100644 index 0000000..a39e517 Binary files /dev/null and b/textures/rascunhos/dispensador_traz_b.png differ diff --git a/textures/rascunhos/obj_check_bank.png b/textures/rascunhos/obj_check_bank.png new file mode 100644 index 0000000..02ed045 Binary files /dev/null and b/textures/rascunhos/obj_check_bank.png differ diff --git a/textures/rascunhos/obj_moneybag.png b/textures/rascunhos/obj_moneybag.png new file mode 100644 index 0000000..249ca37 Binary files /dev/null and b/textures/rascunhos/obj_moneybag.png differ diff --git a/textures/rascunhos/obj_moneybag.xcf b/textures/rascunhos/obj_moneybag.xcf new file mode 100644 index 0000000..cd77b19 Binary files /dev/null and b/textures/rascunhos/obj_moneybag.xcf differ diff --git a/textures/rascunhos/obj_moneybag2.png b/textures/rascunhos/obj_moneybag2.png new file mode 100644 index 0000000..582b2d2 Binary files /dev/null and b/textures/rascunhos/obj_moneybag2.png differ diff --git a/textures/rascunhos/obj_moneysuitcase.png b/textures/rascunhos/obj_moneysuitcase.png new file mode 100644 index 0000000..5e2ed02 Binary files /dev/null and b/textures/rascunhos/obj_moneysuitcase.png differ diff --git a/textures/rascunhos/obj_moneysuitcase.xcf b/textures/rascunhos/obj_moneysuitcase.xcf new file mode 100644 index 0000000..bf27ff5 Binary files /dev/null and b/textures/rascunhos/obj_moneysuitcase.xcf differ diff --git a/textures/rent_door_a.png b/textures/rent_door_a.png new file mode 100644 index 0000000..ec72cbd Binary files /dev/null and b/textures/rent_door_a.png differ diff --git a/textures/rent_door_b.png b/textures/rent_door_b.png new file mode 100644 index 0000000..9b53e6b Binary files /dev/null and b/textures/rent_door_b.png differ diff --git a/textures/rent_door_inv.png b/textures/rent_door_inv.png new file mode 100644 index 0000000..3f5328c Binary files /dev/null and b/textures/rent_door_inv.png differ diff --git a/textures/rent_door_side.png b/textures/rent_door_side.png new file mode 100644 index 0000000..969aefa Binary files /dev/null and b/textures/rent_door_side.png differ diff --git a/textures/safe_front.png b/textures/safe_front.png new file mode 100644 index 0000000..a7b9177 Binary files /dev/null and b/textures/safe_front.png differ diff --git a/textures/safe_side.png b/textures/safe_side.png new file mode 100644 index 0000000..fe98ee8 Binary files /dev/null and b/textures/safe_side.png differ diff --git a/textures/text_atm_front_0.png b/textures/text_atm_front_0.png new file mode 100644 index 0000000..f5aed7b Binary files /dev/null and b/textures/text_atm_front_0.png differ diff --git a/textures/text_atm_front_1.png b/textures/text_atm_front_1.png new file mode 100644 index 0000000..1de79de Binary files /dev/null and b/textures/text_atm_front_1.png differ