From bc78b062950f5f9eb2e5b7942cd71be58c872a66 Mon Sep 17 00:00:00 2001 From: Brett O'Donnell Date: Fri, 14 Sep 2012 18:03:31 +0930 Subject: [PATCH] provide a formspec form for entering sales info --- vendor/init.lua | 10 ++++---- vendor/vendor.lua | 58 +++++++++++++++++++++++++++++------------------ 2 files changed, 40 insertions(+), 28 deletions(-) diff --git a/vendor/init.lua b/vendor/init.lua index b4c53fd..9771c21 100644 --- a/vendor/init.lua +++ b/vendor/init.lua @@ -30,10 +30,10 @@ minetest.register_node("vendor:vendor", { paramtype2 = "facedir", groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, - on_construct = vendor.on_construct, after_place_node = vendor.after_place_node, can_dig = vendor.can_dig, - on_receive_fields = vendor.on_receive_fields + on_receive_fields = vendor.on_receive_fields, + on_punch = vendor.on_punch, }) minetest.register_node("vendor:depositor", { @@ -44,14 +44,12 @@ minetest.register_node("vendor:depositor", { paramtype2 = "facedir", groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, - on_construct = vendor.on_construct, after_place_node = vendor.after_place_node, can_dig = vendor.can_dig, - on_receive_fields = vendor.on_receive_fields + on_receive_fields = vendor.on_receive_fields, + on_punch = vendor.on_punch, }) -minetest.register_on_punchnode(vendor.on_punch) - minetest.register_craft({ output = 'vendor:vendor', recipe = { diff --git a/vendor/vendor.lua b/vendor/vendor.lua index 647bdbe..d97eb05 100644 --- a/vendor/vendor.lua +++ b/vendor/vendor.lua @@ -24,18 +24,30 @@ vendor.traversable_node_types = { "vendor:depositor" } -vendor.after_place_node = function(pos, placer) +vendor.formspec = function(pos, player) local meta = minetest.env:get_meta(pos) - meta:set_string("owner", placer:get_player_name() or "") - vendor.disable(pos, "New Machine") + local description = minetest.registered_nodes[minetest.env:get_node(pos).name].description; + local number = meta:get_int("number") + local cost = meta:get_int("cost") + local limit = meta:get_int("limit") + local formspec = "size[8,7;]" + .."label[0,0;" .. description .. "]" + .."field[2,1.5;2,1;number;Number;" .. number .. "]" + .."label[4,1.0;quantity per batch]" + .."field[2,3.0;2,1;cost;Cost;" .. cost .. "]" + .."label[4,2.5;cost per batch]" + .."field[2,4.5;2,1;limit;Limit;" .. limit .. "]" + .."label[4,4.0;sale limit]" + .."button[1,6;3,0.5;save;Save]" + .."button_exit[4.5,6;3,0.5;close;Save & Close]" + return formspec end -vendor.on_construct = function(pos) +vendor.after_place_node = function(pos, placer) local meta = minetest.env:get_meta(pos) - - meta:set_string("formspec", "hack:sign_text_input") - meta:set_string("text", "0 0 0") - meta:set_string("infotext", "New Vending Machine") + meta:set_string("formspec", vendor.formspec(pos, placer)) + meta:set_string("owner", placer:get_player_name() or "") + vendor.disable(pos, "New Machine") end vendor.can_dig = function(pos,player) @@ -49,28 +61,27 @@ vendor.can_dig = function(pos,player) end vendor.on_receive_fields = function(pos, formname, fields, sender) + local description = minetest.registered_nodes[minetest.env:get_node(pos).name].description; local meta = minetest.env:get_meta(pos) local owner = meta:get_string("owner") if sender:get_player_name() ~= owner then return end - local text = fields.text - meta:set_string("text", text) - - if ( fields.text == nil ) then - vendor.disable(pos, "Misconfigured Machine") + local number = tonumber(fields.number) + local cost = tonumber(fields.cost) + local limit = tonumber(fields.limit) + + if ( number < 1 or number > 99) then + vendor.disable(pos, "Number is invalid") return end - - local number, cost, limit, label = string.match(text, "^(%d+) (%d+) (%d+)$") - number = tonumber(number) - cost = tonumber(cost) - limit = tonumber(limit) - - if ( number == nil or cost == nil or limit == nil or number < 1 or number > 99 or cost < 0 or limit < 0 ) then - minetest.chat_send_player(name, "vendor: You must specify values in the following form: <# per bundle> ") - vendor.disable(pos, "Misconfigured Machine") + if ( cost < 0 ) then + vendor.disable(pos, "Cost is invalid") + return + end + if ( limit < 0 ) then + vendor.disable(pos, "Limit is invalid") return end @@ -95,6 +106,8 @@ vendor.on_receive_fields = function(pos, formname, fields, sender) meta:set_int("cost", cost) meta:set_int("limit", limit) meta:set_int("enabled", 1) + meta:set_string("formspec", vendor.formspec(pos, sender)) + minetest.chat_send_player(owner, "vendor: " .. description .. " is active!") vendor.sound_activate(pos) vendor.refresh(pos) end @@ -107,6 +120,7 @@ vendor.disable = function(pos, desc) if ( desc == nil ) then desc = "Disabled Machine" end + minetest.chat_send_player(owner, "vendor: " .. desc) meta:set_string("infotext", ""..desc..", Owned By: " .. owner .. "") meta:set_int("enabled", 0) end