From 15a2cdfa5317c31a7e277ed3f5aad2ebfb44f5b5 Mon Sep 17 00:00:00 2001 From: Bad-Command Date: Fri, 14 Sep 2012 19:51:58 -0400 Subject: [PATCH] Updated form, fixed bugs, added more error/status messages. --- vendor/init.lua | 4 +-- vendor/vendor.lua | 74 +++++++++++++++++++++++++++++++---------------- 2 files changed, 51 insertions(+), 27 deletions(-) diff --git a/vendor/init.lua b/vendor/init.lua index 9771c21..5572113 100644 --- a/vendor/init.lua +++ b/vendor/init.lua @@ -1,5 +1,5 @@ --- ---vendor 1.00 +--vendor 1.01 --Copyright (C) 2012 Bad_Command -- --This library is free software; you can redistribute it and/or @@ -18,7 +18,7 @@ --- vendor = {} -vendor.version = 1.00 +vendor.version = 1.01 dofile(minetest.get_modpath("vendor") .. "/vendor.lua") diff --git a/vendor/vendor.lua b/vendor/vendor.lua index d97eb05..45f6d8b 100644 --- a/vendor/vendor.lua +++ b/vendor/vendor.lua @@ -26,28 +26,41 @@ vendor.traversable_node_types = { vendor.formspec = function(pos, player) local meta = minetest.env:get_meta(pos) - local description = minetest.registered_nodes[minetest.env:get_node(pos).name].description; + local meta = minetest.env:get_meta(pos) + local node = minetest.env:get_node(pos) + local description = minetest.registered_nodes[node.name].description; + local buysell = "sell" + if ( node.name == "vendor:depositor" ) then + buysell = "buy" + end + 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]" + local formspec = "size[9,7;]" + .."label[0,0;Configure " .. description .. "]" + .."field[2,1.5;2,1;number;Count:;" .. number .. "]" + .."label[4,1.25;How many to bundle together]" + .."field[2,3.0;2,1;cost;Price:;" .. cost .. "]" + .."label[4,2.75;Price of a bundle]" + .."field[2,4.5;2,1;limit;Sale Limit:;" .. limit .. "]" + .."label[4,4.15;Number of bundles to "..buysell.."]" + .."label[4,4.45; (0 for no limit)]" + .."button[1.5,6;3,0.5;save;Save]" + .."button_exit[4.5.5,6;3,0.5;close;Save & Close]" return formspec end vendor.after_place_node = function(pos, placer) local meta = minetest.env:get_meta(pos) - meta:set_string("formspec", vendor.formspec(pos, placer)) + meta:set_string("itemtype", "") + meta:set_int("number", 0) + meta:set_int("cost", 0) + meta:set_int("limit", 0) meta:set_string("owner", placer:get_player_name() or "") - vendor.disable(pos, "New Machine") + meta:set_string("formspec", vendor.formspec(pos, placer)) + local description = minetest.registered_nodes[minetest.env:get_node(pos).name].description; + vendor.disable(pos, "New " .. description) end vendor.can_dig = function(pos,player) @@ -61,10 +74,12 @@ 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 node = minetest.env:get_node(pos) + local description = minetest.registered_nodes[node.name].description; local meta = minetest.env:get_meta(pos) local owner = meta:get_string("owner") if sender:get_player_name() ~= owner then + minetest.chat_send_player(sender:get_player_name(), "vendor: Cannot configure machine. The " .. description .. " belongs to " .. owner ..".") return end @@ -72,22 +87,26 @@ vendor.on_receive_fields = function(pos, formname, fields, sender) local cost = tonumber(fields.cost) local limit = tonumber(fields.limit) - if ( number < 1 or number > 99) then - vendor.disable(pos, "Number is invalid") + if ( number == nil or number < 1 or number > 99) then + minetest.chat_send_player(owner, "vendor: Invalid count. You must enter a count between 1 and 99.") + vendor.disable(pos, "Misconfigured") return end - if ( cost < 0 ) then - vendor.disable(pos, "Cost is invalid") + if ( cost == nil or cost < 0 ) then + minetest.chat_send_player(owner, "vendor: Invalid price. You must enter a positive number for the price.") + vendor.disable(pos, "Misconfigured") return end - if ( limit < 0 ) then - vendor.disable(pos, "Limit is invalid") + if ( limit == nil or limit < 0 ) then + minetest.chat_send_player(owner, "vendor: Invalid sales limit. You must enter a positive number (or zero) for the limit.") + vendor.disable(pos, "Misconfigured") return end local inv = vendor.find_connected_chest_inv(owner, pos, nil, nil, nil) if ( inv == nil ) then + minetest.chat_send_player(owner, "vendor: Inventory is misconfigured. It must be connected in a line to a locked chest that has items to sell") vendor.disable(pos, "No Inventory/Improper Attachments") return end @@ -107,7 +126,12 @@ vendor.on_receive_fields = function(pos, formname, fields, sender) 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!") + + local buysell = "selling" + if ( node.name == "vendor:depositor" ) then + buysell = "buying" + end + minetest.chat_send_player(owner, "vendor: " .. description .. " is now " .. buysell .. " " .. number .. " " .. vendor.get_item_desc(itemname) .. " for " .. cost .. money.currency_name) vendor.sound_activate(pos) vendor.refresh(pos) end @@ -117,10 +141,10 @@ vendor.disable = function(pos, desc) vendor.sound_deactivate(pos) local meta = minetest.env:get_meta(pos) local owner = meta:get_string("owner") + local description = minetest.registered_nodes[minetest.env:get_node(pos).name].description; if ( desc == nil ) then - desc = "Disabled Machine" + desc = "Disabled " .. description end - minetest.chat_send_player(owner, "vendor: " .. desc) meta:set_string("infotext", ""..desc..", Owned By: " .. owner .. "") meta:set_int("enabled", 0) end @@ -161,9 +185,9 @@ vendor.refresh = function(pos, err) end if ( node.name == "vendor:vendor" ) then - infotext = err .. owner .. " sells " .. number .. " " .. vendor.get_item_desc(itemtype) .. " for " .. cost .. money.currency_name .. limit_text .. per_text + infotext = err .. owner .. " Sells " .. number .. " " .. vendor.get_item_desc(itemtype) .. " for " .. cost .. money.currency_name .. limit_text .. per_text else - infotext = err .. owner .. " buys " .. number .. " " .. vendor.get_item_desc(itemtype) .. " for " .. cost .. money.currency_name .. limit_text .. per_text + infotext = err .. owner .. " Buys " .. number .. " " .. vendor.get_item_desc(itemtype) .. " for " .. cost .. money.currency_name .. limit_text .. per_text end if ( meta:get_string("infotext") ~= infotext ) then