Version 0.5.0
[minetest_easyvend.git] / init.lua
blobe9879a3d60c85f90d7a7d0e99ecb780b212001e2
1 --[[
2 Easy Vending Machines [easyvend]
3 Copyright (C) 2012 Bad_Command, 2016 Wuzzy
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 easyvend = {}
21 easyvend.VERSION = {}
22 easyvend.VERSION.MAJOR = 0
23 easyvend.VERSION.MINOR = 5
24 easyvend.VERSION.PATCH = 0
25 easyvend.VERSION.STRING = easyvend.VERSION.MAJOR .. "." .. easyvend.VERSION.MINOR .. "." .. easyvend.VERSION.PATCH
27 -- Set item which is used as payment for vending and depositing machines
28 easyvend.currency = minetest.setting_get("easyvend_currency")
29 if easyvend.currency == nil or minetest.registered_items[easyvend.currency] == nil then
30 -- Default currency
31 easyvend.currency = "default:gold_ingot"
32 end
34 -- Number of currency items required to earn for awarding “Pro Seller” award
35 easyvend.powerseller = 1000
37 if minetest.registered_items[easyvend.currency] == nil then
38 minetest.log("error", "[easyvend] Unknown currency item “"..tostring(easyvend.currency).."”!")
39 easyvend.currency = "unknown"
40 easyvend.currency_desc = "unknown"
41 else
42 easyvend.currency_desc = minetest.registered_items[easyvend.currency].description
43 if easyvend.currency_desc == nil or easyvend.currency_desc == "" then
44 easyvend.currency_desc = easyvend.currency
45 end
46 end
48 dofile(minetest.get_modpath("easyvend") .. "/easyvend.lua")
50 local sounds
51 local soundsplus = {
52 place = { name = "easyvend_disable", gain = 1 },
53 dug = { name = "easyvend_disable", gain = 1 }, }
54 if minetest.get_modpath("default") ~= nil then
55 sounds = default.node_sound_wood_defaults(soundsplus)
56 else
57 sounds = soundsplus
58 end
60 local machine_template = {
61 paramtype2 = "facedir",
62 groups = {choppy=2,oddly_breakable_by_hand=2},
63 is_ground_content = false,
65 after_place_node = easyvend.after_place_node,
66 can_dig = easyvend.can_dig,
67 on_receive_fields = easyvend.on_receive_fields,
68 sounds = sounds,
70 allow_metadata_inventory_put = easyvend.allow_metadata_inventory_put,
71 allow_metadata_inventory_take = easyvend.allow_metadata_inventory_take,
72 allow_metadata_inventory_move = easyvend.allow_metadata_inventory_move,
73 on_punch = easyvend.machine_check,
76 if minetest.get_modpath("screwdriver") ~= nil then
77 machine_template.on_rotate = screwdriver.rotate_simple
78 end
80 local vendor_on = table.copy(machine_template)
81 vendor_on.description = "Vending Machine"
82 vendor_on.tiles ={"easyvend_vendor_bottom.png", "easyvend_vendor_bottom.png", "easyvend_vendor_side.png",
83 "easyvend_vendor_side.png", "easyvend_vendor_side.png", "easyvend_vendor_front_on.png"}
84 vendor_on.groups.not_in_creative_inventory = 1
85 vendor_on._doc_items_create_entry = false
86 vendor_on.drop = "easyvend:vendor"
88 local vendor_off = table.copy(machine_template)
89 vendor_off.description = vendor_on.description
90 vendor_off._doc_items_longdesc = string.format("A vending machine allows its owner to offer a certain item in exchange for money (%s). The users can pay with money and will some items in return.", easyvend.currency_desc)
91 vendor_off._doc_items_usagehelp = "For customers: The vending machine has to be ready to be used, which is the case if the green LED lights up. Point the vending machine to see its owner and what it has to offer and at which price (item count first). Rightclick it to open the buying menu. You can pay with the number of items shown at “Price” and you will get the item at “Offered item” in return. Click on “Buy” to buy this offer once, repeat this as often as you like.\nFor owners: First, place a locked chest and fill it with the item you want to sell, make sure you leave some inventory slots empty for the price. Place the vending machine above or below the locked chest. Any locked chest connected in a unbroken vertical line of locked chests, vending machines and depositing machines will be accessed as storage. Rightclick the machine. Set the offered item by moving an item from your invenory into the slot. The price item can not be changed. Now set the number of items per sale and their price and click on “Confirm” to confirm. Check the message and status for any errors. If the status is “Ready.”, the machine works properly. All other status messages are errors. The earnings of the vending machine can be retrieved from the locked chest."
92 vendor_off.tiles = table.copy(vendor_on.tiles)
93 vendor_off.tiles[6] = "easyvend_vendor_front_off.png"
95 local depositor_on = table.copy(machine_template)
96 depositor_on.description = "Depositing Machine"
97 depositor_on.tiles ={"easyvend_depositor_bottom.png", "easyvend_depositor_bottom.png", "easyvend_depositor_side.png",
98 "easyvend_depositor_side.png", "easyvend_depositor_side.png", "easyvend_depositor_front_on.png"}
99 depositor_on.groups.not_in_creative_inventory = 1
100 depositor_on._doc_items_create_entry = false
101 depositor_on.drop = "easyvend:depositor"
103 local depositor_off = table.copy(machine_template)
104 depositor_off.description = depositor_on.description
105 depositor_off._doc_items_longdesc = string.format("A depositing machine allows its owner to offer money (%s) in exchange for a certain item. The users can supply the depositing machine with the requested item and will get money in return.", easyvend.currency_desc)
106 depositor_off._doc_items_usagehelp = "For users: The depositing machine has to be ready to be used, which is the case if the green LED lights up. Point the depositing machine to see its owner and what item it asks for and at which payment (item count first). Rightclick it to open the selling menu. You can give the number of items shown at “Requested item” and you will get the items at “Payment” in return. Click on “Sell” to exchange items, repeat this as often as you like.\nFor owners: First, place a locked chest and supply it with the payment item, make sure you leave some inventory slots empty for the items you want to retrieve. Place the depositing machine above or below the locked chest. Any chest connected in a unbroken vertical stack of locked chests, vending machines and depositing machines will be accessed as storage. Rightclick the machine. Set the requested item by moving an item from your invenory into the slot. The payment item can not be changed. Now set the number of requested items and how much you pay for them and click on “Confirm” to confirm. Check the message and status for any errors. If the status is “Ready.”, the machine works properly, all other status messages are errors. The deposited items can be retrieved from the locked chest."
107 depositor_off.tiles = table.copy(depositor_on.tiles)
108 depositor_off.tiles[6] = "easyvend_depositor_front_off.png"
110 minetest.register_node("easyvend:vendor", vendor_off)
111 minetest.register_node("easyvend:vendor_on", vendor_on)
112 minetest.register_node("easyvend:depositor", depositor_off)
113 minetest.register_node("easyvend:depositor_on", depositor_on)
115 if minetest.get_modpath("default") ~= nil then
116 minetest.register_craft({
117 output = 'easyvend:vendor',
118 recipe = {
119 {'group:wood', 'group:wood', 'group:wood'},
120 {'group:wood', 'default:steel_ingot', 'group:wood'},
121 {'group:wood', 'default:steel_ingot', 'group:wood'},
125 minetest.register_craft({
126 output = 'easyvend:depositor',
127 recipe = {
128 {'group:wood', 'default:steel_ingot', 'group:wood'},
129 {'group:wood', 'default:steel_ingot', 'group:wood'},
130 {'group:wood', 'group:wood', 'group:wood'},
135 if minetest.get_modpath("doc") ~= nil and minetest.get_modpath("doc_items") ~= nil then
136 doc.add_entry_alias("nodes", "easyvend:vendor", "nodes", "easyvend:vendor_on")
137 doc.add_entry_alias("nodes", "easyvend:depositor", "nodes", "easyvend:depositor_on")