From 6992da9663c28fdc8110e268f0b31fe908518132 Mon Sep 17 00:00:00 2001 From: James Stevenson Date: Fri, 10 Jun 2016 10:21:31 -0400 Subject: [PATCH] Initial commit. --- .init.lua.swp | Bin 0 -> 24576 bytes depends.txt | 1 + init.lua | 185 +++++++++++++++++++++++++++++++++++++++++ textures/shop_coin.png | Bin 0 -> 2982 bytes 4 files changed, 186 insertions(+) create mode 100644 .init.lua.swp create mode 100644 depends.txt create mode 100644 init.lua create mode 100644 textures/shop_coin.png diff --git a/.init.lua.swp b/.init.lua.swp new file mode 100644 index 0000000000000000000000000000000000000000..9f689875c16d2d1c6adf476d38b824d685f6a743 GIT binary patch literal 24576 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 literal 0 HcmV?d00001 diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/depends.txt @@ -0,0 +1 @@ +default diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..806f3ce --- /dev/null +++ b/init.lua @@ -0,0 +1,185 @@ +local function get_register_formspec(pos) + local meta = minetest.get_meta(pos) + local spos = pos.x.. "," ..pos.y .. "," .. pos.z + local formspec = + "size[8,6.5]" .. + default.gui_bg_img .. + default.gui_slots .. + "label[2.1,0;Sell]" .. + "label[5.15,0;For]" .. + "button[0,1.5;1.75,1;stock;Stock]" .. + "button[6.25,1.5;1.75,1;register;Register]" .. + "button[3.5,1.25;1,1;ok;OK]" .. + "list[nodemeta:" .. spos .. ";sell;2,0.5;1,1;]" .. + "list[nodemeta:" .. spos .. ";buy;5,0.5;1,1;]" .. + "list[current_player;main;0,2.75;8,4;]" + return formspec +end + +local formspec_register = + "size[8,9]" .. + default.gui_bg_img .. + default.gui_slots .. + "label[0,0;Register]" .. + "list[current_name;register;0,0.75;8,4;]" .. + "list[current_player;main;0,5.25;8,4;]" .. + "listring[]" + +local formspec_stock = + "size[8,9]" .. + default.gui_bg_img .. + default.gui_slots .. + "label[0,0;Stock]" .. + "list[current_name;stock;0,0.75;8,4;]" .. + "list[current_player;main;0,5.25;8,4;]" .. + "listring[]" + +minetest.register_privilege("shop_admin", "Shop administration and maintainence") + +minetest.register_node("shop:shop", { + description = "Shop", + tiles = { + "default_wood.png^shop_coin.png", + "default_wood.png", + "default_wood.png^shop_coin.png", + "default_wood.png^shop_coin.png", + "default_wood.png^shop_coin.png", + "default_wood.png^shop_coin.png" + }, + groups = {choppy = 3}, + paramtype2 = "facedir", + after_place_node = function(pos, placer, itemstack, pointed_thing) + local meta = minetest.get_meta(pos) + local owner = placer:get_player_name() + + meta:set_string("owner", owner) + meta:set_string("infotext", "Shop (Owned by " .. owner .. ")") + meta:set_string("formspec", get_register_formspec(pos)) + + local inv = meta:get_inventory() + inv:set_size("buy", 1) + inv:set_size("sell", 1) + inv:set_size("stock", 8*4) + inv:set_size("register", 8*4) + end, + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local player = sender:get_player_name() + local inv = meta:get_inventory() + local s = inv:get_list("sell") + local b = inv:get_list("buy") + local stk = inv:get_list("stock") + local reg = inv:get_list("register") + local pinv = sender:get_inventory() + + if fields.register then + if player ~= owner and (not minetest.check_player_privs(player, "shop_admin")) then + minetest.chat_send_player(player, "Only the shop owner can open the register.") + return + else + minetest.show_formspec(player, "shop:shop", formspec_register) + end + elseif fields.stock then + minetest.show_formspec(player, "shop:shop", formspec_stock) + return + elseif fields.ok then + if inv:is_empty("sell") or + inv:is_empty("buy") or + (not inv:room_for_item("register", b[1])) then + minetest.chat_send_player(player, "Shop closed.") + return + end + + if (pinv:contains_item("main", b[1]) or + pinv:contains_item("funds", b[1])) and + inv:contains_item("stock", s[1]) and + pinv:room_for_item("main", s[1]) then + pinv:remove_item("main", b[1]) + inv:add_item("register", b[1]) + inv:remove_item("stock", s[1]) + pinv:add_item("main", s[1]) + else + minetest.chat_send_player(player, "No funds.") + end + end + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local inv = meta:get_inventory() + local s = inv:get_list("sell") + local n = stack:get_name() + local playername = player:get_player_name() + if playername ~= owner and + (not minetest.check_player_privs(playername, "shop_admin")) then + return 0 + else + return stack:get_count() + end + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local playername = player:get_player_name() + if playername ~= owner and + (not minetest.check_player_privs(playername, "shop_admin"))then + return 0 + else + return stack:get_count() + end + end, + allow_metadata_inventory_move = function(pos, _, _, _, _, count, player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local playername = player:get_player_name() + if playername ~= owner and + (not minetest.check_player_privs(playername, "shop_admin")) then + return 0 + else + return count + end + end, + can_dig = function(pos, player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local inv = meta:get_inventory() + return player:get_player_name() == owner and + inv:is_empty("register") and + inv:is_empty("stock") and + inv:is_empty("buy") and + inv:is_empty("sell") + end, + +}) + +minetest.register_craftitem("shop:coin", { + + description = "Gold Coin", + inventory_image = "shop_coin.png", +}) + +minetest.register_craft({ + output = "shop:coin 9", + recipe = { + {"default:gold_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:gold_ingot", + recipe = { + {"shop:coin", "shop:coin", "shop:coin"}, + {"shop:coin", "shop:coin", "shop:coin"}, + {"shop:coin", "shop:coin", "shop:coin"} + } +}) + +minetest.register_craft({ + output = "shop:shop", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"group:wood", "default:goldblock", "group:wood"}, + {"group:wood", "group:wood", "group:wood"} + } +}) diff --git a/textures/shop_coin.png b/textures/shop_coin.png new file mode 100644 index 0000000000000000000000000000000000000000..58f2500cdc62969bde32ca01e40135c2997ac5ab GIT binary patch literal 2982 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 c!Tal literal 0 HcmV?d00001