From 3966b90b108634b7b507f2e58c0c84ab8fd7c37d Mon Sep 17 00:00:00 2001 From: Vanessa Dannenberg Date: Fri, 21 Sep 2018 18:43:13 -0400 Subject: update currency mod --- currency/barter.lua | 338 ++++++++++++++++++++++++++-------------------------- 1 file changed, 169 insertions(+), 169 deletions(-) (limited to 'currency/barter.lua') diff --git a/currency/barter.lua b/currency/barter.lua index 1fb4f1b..d4763e6 100644 --- a/currency/barter.lua +++ b/currency/barter.lua @@ -1,169 +1,169 @@ -barter = {} - --- internationalization boilerplate -local MP = minetest.get_modpath(minetest.get_current_modname()) -local S, NS = dofile(MP.."/intllib.lua") - -barter.chest = {} -barter.chest.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;1,1;pl1_start;" .. S("Start") .. "]", - player = function(name) return "label[3,0;"..name.."]" end, - accept1 = "button[3,1;1,1;pl1_accept1;" .. S("Confirm") .. "]".. - "button[3,2;1,1;pl1_cancel;" .. S("Cancel") .. "]", - accept2 = "button[3,1;1,1;pl1_accept2;" .. S("Exchange") .. "]".. - "button[3,2;1,1;pl1_cancel;" .. S("Cancel") .. "]", - }, - pl2 = { - start = "button[4,1;1,1;pl2_start;" .. S("Start") .. "]", - player = function(name) return "label[4,0;"..name.."]" end, - accept1 = "button[4,1;1,1;pl2_accept1;" .. S("Confirm") .. "]".. - "button[4,2;1,1;pl2_cancel;" .. S("Cancel") .. "]", - accept2 = "button[4,1;1,1;pl2_accept2;" .. S("Exchange") .. "]".. - "button[4,2;1,1;pl2_cancel;" .. S("Cancel") .. "]", - }, -} - -barter.chest.check_privilege = 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 - -barter.chest.update_formspec = function(meta) - formspec = barter.chest.formspec.main - pl_formspec = function (n) - if meta:get_int(n.."step")==0 then - formspec = formspec .. barter.chest.formspec[n].start - else - formspec = formspec .. barter.chest.formspec[n].player(meta:get_string(n)) - if meta:get_int(n.."step") == 1 then - formspec = formspec .. barter.chest.formspec[n].accept1 - elseif meta:get_int(n.."step") == 2 then - formspec = formspec .. barter.chest.formspec[n].accept2 - end - end - end - pl_formspec("pl1") pl_formspec("pl2") - meta:set_string("formspec",formspec) -end - -barter.chest.give_inventory = function(inv,list,playername) - player = minetest.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 - -barter.chest.cancel = function(meta) - barter.chest.give_inventory(meta:get_inventory(),"pl1",meta:get_string("pl1")) - barter.chest.give_inventory(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 - -barter.chest.exchange = function(meta) - barter.chest.give_inventory(meta:get_inventory(),"pl1",meta:get_string("pl2")) - barter.chest.give_inventory(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("currency:barter", { - drawtype = "nodebox", - description = S("Barter Table"), - paramtype = "light", - paramtype2 = "facedir", - tiles = {"barter_top.png", - "barter_base.png", - "barter_side.png"}, - inventory_image = "barter_top.png", - node_box = { - type = "fixed", - fixed = { - {-0.500000,0.312500,-0.500000,0.500000,0.500000,0.500000}, - {-0.437500,-0.500000,-0.437500,-0.250000,0.500000,-0.250000}, - {-0.437500,-0.500000,0.250000,-0.250000,0.500000,0.437500}, - {0.250000,-0.500000,-0.437500,0.437500,0.500000,-0.250000}, - {0.250000,-0.500000,0.250000,0.437500,0.500000,0.447500}, - }, - }, - groups = {choppy=2,oddly_breakable_by_hand=2}, - sounds = default.node_sound_wood_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("infotext", S("Barter Table")) - meta:set_string("pl1","") - meta:set_string("pl2","") - barter.chest.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.get_meta(pos) - pl_receive_fields = function(n) - if fields[n.."_start"] and meta:get_string(n) == "" then - 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 - meta:set_int(n.."step",2) - end - if meta:get_int(n.."step")==2 and fields[n.."_accept2"] then - meta:set_int(n.."step",3) - if n == "pl1" and meta:get_int("pl2step") == 3 then barter.chest.exchange(meta) end - if n == "pl2" and meta:get_int("pl1step") == 3 then barter.chest.exchange(meta) end - end - if fields[n.."_cancel"] then barter.chest.cancel(meta) end - end - end - pl_receive_fields("pl1") pl_receive_fields("pl2") - -- End - barter.chest.update_formspec(meta) - 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 barter.chest.check_privilege(from_list,player:get_player_name(),meta) then return 0 end - if not barter.chest.check_privilege(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.get_meta(pos) - if not barter.chest.check_privilege(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.get_meta(pos) - if not barter.chest.check_privilege(listname,player:get_player_name(),meta) then return 0 end - return stack:get_count() - end, -}) +barter = {} + +-- internationalization boilerplate +local MP = minetest.get_modpath(minetest.get_current_modname()) +local S, NS = dofile(MP.."/intllib.lua") + +barter.chest = {} +barter.chest.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;1,1;pl1_start;" .. S("Start") .. "]", + player = function(name) return "label[3,0;"..name.."]" end, + accept1 = "button[3,1;1,1;pl1_accept1;" .. S("Confirm") .. "]".. + "button[3,2;1,1;pl1_cancel;" .. S("Cancel") .. "]", + accept2 = "button[3,1;1,1;pl1_accept2;" .. S("Exchange") .. "]".. + "button[3,2;1,1;pl1_cancel;" .. S("Cancel") .. "]", + }, + pl2 = { + start = "button[4,1;1,1;pl2_start;" .. S("Start") .. "]", + player = function(name) return "label[4,0;"..name.."]" end, + accept1 = "button[4,1;1,1;pl2_accept1;" .. S("Confirm") .. "]".. + "button[4,2;1,1;pl2_cancel;" .. S("Cancel") .. "]", + accept2 = "button[4,1;1,1;pl2_accept2;" .. S("Exchange") .. "]".. + "button[4,2;1,1;pl2_cancel;" .. S("Cancel") .. "]", + }, +} + +barter.chest.check_privilege = 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 + +barter.chest.update_formspec = function(meta) + formspec = barter.chest.formspec.main + pl_formspec = function (n) + if meta:get_int(n.."step")==0 then + formspec = formspec .. barter.chest.formspec[n].start + else + formspec = formspec .. barter.chest.formspec[n].player(meta:get_string(n)) + if meta:get_int(n.."step") == 1 then + formspec = formspec .. barter.chest.formspec[n].accept1 + elseif meta:get_int(n.."step") == 2 then + formspec = formspec .. barter.chest.formspec[n].accept2 + end + end + end + pl_formspec("pl1") pl_formspec("pl2") + meta:set_string("formspec",formspec) +end + +barter.chest.give_inventory = function(inv,list,playername) + player = minetest.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 + +barter.chest.cancel = function(meta) + barter.chest.give_inventory(meta:get_inventory(),"pl1",meta:get_string("pl1")) + barter.chest.give_inventory(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 + +barter.chest.exchange = function(meta) + barter.chest.give_inventory(meta:get_inventory(),"pl1",meta:get_string("pl2")) + barter.chest.give_inventory(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("currency:barter", { + drawtype = "nodebox", + description = S("Barter Table"), + paramtype = "light", + paramtype2 = "facedir", + tiles = {"barter_top.png", + "barter_base.png", + "barter_side.png"}, + inventory_image = "barter_top.png", + node_box = { + type = "fixed", + fixed = { + {-0.500000,0.312500,-0.500000,0.500000,0.500000,0.500000}, + {-0.437500,-0.500000,-0.437500,-0.250000,0.500000,-0.250000}, + {-0.437500,-0.500000,0.250000,-0.250000,0.500000,0.437500}, + {0.250000,-0.500000,-0.437500,0.437500,0.500000,-0.250000}, + {0.250000,-0.500000,0.250000,0.437500,0.500000,0.447500}, + }, + }, + groups = {choppy=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("Barter Table")) + meta:set_string("pl1","") + meta:set_string("pl2","") + barter.chest.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.get_meta(pos) + pl_receive_fields = function(n) + if fields[n.."_start"] and meta:get_string(n) == "" then + 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 + meta:set_int(n.."step",2) + end + if meta:get_int(n.."step")==2 and fields[n.."_accept2"] then + meta:set_int(n.."step",3) + if n == "pl1" and meta:get_int("pl2step") == 3 then barter.chest.exchange(meta) end + if n == "pl2" and meta:get_int("pl1step") == 3 then barter.chest.exchange(meta) end + end + if fields[n.."_cancel"] then barter.chest.cancel(meta) end + end + end + pl_receive_fields("pl1") pl_receive_fields("pl2") + -- End + barter.chest.update_formspec(meta) + 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 barter.chest.check_privilege(from_list,player:get_player_name(),meta) then return 0 end + if not barter.chest.check_privilege(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.get_meta(pos) + if not barter.chest.check_privilege(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.get_meta(pos) + if not barter.chest.check_privilege(listname,player:get_player_name(),meta) then return 0 end + return stack:get_count() + end, +}) -- cgit v1.2.3