Codebase list minetest-mod-currency / 0ebb29d
New upstream version 20210414.1 Julien Puydt 2 years ago
13 changed file(s) with 343 addition(s) and 84 deletion(s). Raw diff Collapse all Expand all
0 barter = {}
0 currency.barter = {}
1 barter = currency.barter -- Kept as a global variable for compatibility
12
23 local S = minetest.get_translator("currency")
34
119120 type = "fixed",
120121 fixed = {
121122 {-0.500000,0.312500,-0.500000,0.500000,0.500000,0.500000},
122 {-0.437500,-0.500000,-0.437500,-0.250000,0.500000,-0.250000},
123 {-0.437500,-0.500000,-0.437500,-0.250000,0.500000,-0.250000},
123124 {-0.437500,-0.500000,0.250000,-0.250000,0.500000,0.437500},
124125 {0.250000,-0.500000,-0.437500,0.437500,0.500000,-0.250000},
125 {0.250000,-0.500000,0.250000,0.437500,0.500000,0.447500},
126 {0.250000,-0.500000,0.250000,0.437500,0.500000,0.447500},
126127 },
127128 },
128129 groups = {choppy=2,oddly_breakable_by_hand=2},
129 sounds = default.node_sound_wood_defaults(),
130 sounds = currency.node_sound_wood_defaults(),
130131 on_construct = function(pos)
131132 local meta = minetest.get_meta(pos)
132133 meta:set_string("infotext", S("Barter Table"))
0 minetest.register_craft({
1 output = 'currency:safe',
2 recipe = {
3 {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
4 {'default:steel_ingot', 'default:mese_crystal', 'default:steel_ingot'},
5 {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
6 }
7 })
0 if minetest.get_modpath("default") then
1 minetest.register_craft({
2 output = "currency:safe",
3 recipe = {
4 {"default:steel_ingot", "default:steel_ingot",
5 "default:steel_ingot"},
6 {"default:steel_ingot", "default:mese_crystal",
7 "default:steel_ingot"},
8 {"default:steel_ingot", "default:steel_ingot",
9 "default:steel_ingot"},
10 }
11 })
812
9 minetest.register_craft({
10 output = 'currency:shop',
11 recipe = {
12 {'default:sign_wall'},
13 {'default:chest_locked'},
14 }
15 })
13 minetest.register_craft({
14 output = "currency:shop",
15 recipe = {
16 {"default:sign_wall"},
17 {"default:chest_locked"},
18 }
19 })
1620
17 minetest.register_craft({
18 output = 'currency:barter',
19 recipe = {
20 {'default:sign_wall'},
21 {'default:chest'},
22 }
23 })
21 minetest.register_craft({
22 output = "currency:barter",
23 recipe = {
24 {"default:sign_wall"},
25 {"default:chest"},
26 }
27 })
28 end
2429
2530 minetest.register_craft({
2631 type = "shapeless",
148153 type = "shapeless",
149154 output = "currency:minegeld_bundle",
150155 recipe = {
151 "group:minegeld",
152 "group:minegeld",
153 "group:minegeld",
154 "group:minegeld",
155 "group:minegeld",
156 "group:minegeld",
157 "group:minegeld",
158 "group:minegeld",
159 "group:minegeld"
156 "group:minegeld_note",
157 "group:minegeld_note",
158 "group:minegeld_note",
159 "group:minegeld_note",
160 "group:minegeld_note",
161 "group:minegeld_note",
162 "group:minegeld_note",
163 "group:minegeld_note",
164 "group:minegeld_note"
160165 },
161166 })
162167
165170 recipe = "currency:minegeld_bundle",
166171 burntime = 1,
167172 })
168
33 description = S("@1 Minegeld cent coin", "5"),
44 inventory_image = "minegeld_cent_5.png",
55 stack_max = 1000,
6 groups = {minegeld = 1}
6 groups = {minegeld = 1, minegeld_coin = 1}
77 })
88
99 minetest.register_craftitem("currency:minegeld_cent_10", {
1010 description = S("@1 Minegeld cent coin", "10"),
1111 inventory_image = "minegeld_cent_10.png",
1212 stack_max = 1000,
13 groups = {minegeld = 1}
13 groups = {minegeld = 1, minegeld_coin = 1}
1414 })
1515
1616 minetest.register_craftitem("currency:minegeld_cent_25", {
1717 description = S("@1 Minegeld cent coin", "25"),
1818 inventory_image = "minegeld_cent_25.png",
1919 stack_max = 1000,
20 groups = {minegeld = 1}
20 groups = {minegeld = 1, minegeld_coin = 1}
2121 })
2222
2323 minetest.register_craftitem("currency:minegeld", {
2424 description = S("@1 Minegeld Note", "1"),
2525 inventory_image = "minegeld.png",
2626 stack_max = 65535,
27 groups = {minegeld = 1}
27 groups = {minegeld = 1, minegeld_note = 1}
2828 })
2929
3030 minetest.register_craftitem("currency:minegeld_5", {
3131 description = S("@1 Minegeld Note", "5"),
3232 inventory_image = "minegeld_5.png",
3333 stack_max = 65535,
34 groups = {minegeld = 1}
34 groups = {minegeld = 1, minegeld_note = 1}
3535 })
3636
3737 minetest.register_craftitem("currency:minegeld_10", {
3838 description = S("@1 Minegeld Note", "10"),
3939 inventory_image = "minegeld_10.png",
4040 stack_max = 65535,
41 groups = {minegeld = 1}
41 groups = {minegeld = 1, minegeld_note = 1}
4242 })
4343
4444 minetest.register_craftitem("currency:minegeld_50", {
4545 description = S("@1 Minegeld Note", "50"),
4646 inventory_image = "minegeld_50.png",
4747 stack_max = 65535,
48 groups = {minegeld = 1}
48 groups = {minegeld = 1, minegeld_note = 1}
4949 })
5050
5151 minetest.register_craftitem("currency:minegeld_100", {
5252 description = S("@1 Minegeld Note", "100"),
5353 inventory_image = "minegeld_100.png",
5454 stack_max = 65535,
55 groups = {minegeld = 1}
55 groups = {minegeld = 1, minegeld_note = 1}
5656 })
5757
5858 minetest.register_craftitem("currency:minegeld_bundle", {
00 local modpath = minetest.get_modpath("currency")
11
22 minetest.log("info", "Currency mod loading...")
3
4 currency = {}
5 if minetest.global_exists("default") then
6 currency.node_sound_wood_defaults = default.node_sound_wood_defaults
7 else
8 currency.node_sound_wood_defaults = function() end
9 end
310
411 dofile(modpath.."/craftitems.lua")
512 minetest.log("info", "[Currency] Craft_items Loaded!")
22
33 ### barter.lua ###
44
5 Barter Table=Tausch Tisch
5 Barter Table=Handelstisch
66 Cancel=Abbruch
77 Confirm=Bestätigen
88 Start=Start
99
1010 ### shop.lua ###
1111
12 Exchange=Tausch
12 Exchange=Tauschen
1313
1414 ### craftitems.lua ###
1515
16 @1 Minegeld Note=@1 Minegeld Banknote
17 @1 Minegeld cent coin=
18 Bundle of random Minegeld notes=Bündel von verschiedenen Minegeld Banknoten
16 @1 Minegeld Note=@1-Minegeld-Banknote
17 @1 Minegeld cent coin=@1-Minegeldcent-Münze
18 Bundle of random Minegeld notes=Bündel mit beliebigen Minegeld-Banknoten
1919
2020 ### safe.lua ###
2121
22 Safe=Safe
23 Safe (owned by @1)=Safe (gehört @1)
22 Safe=Tresor
23 Safe (owned by @1)=Tresor (gehört @1)
2424
2525 ### shop.lua ###
2626
27 Customer gets:=Kunde bekommt:
28 Customer gives (pay here!)=Kunde gibt (bezahl hier!)
27 Customer gets:=Kunde erhält:
28 Customer gives (pay here!)=Kunde gibt (hier bezahlen!)
2929 Customers gave:=Kunde gab:
30 Exchange can not be done, check if you put all items!=Tausch kann nicht abgeschlossen werden, prüfe nochmal alles was du hinein gelegt hast!
31 Exchange can not be done, contact the shop owner.=Tausch kann nicht abgeschlossen werden, benachrichtige den Geschäftsinhaber.
30 Exchange can not be done, check if you put all items!=Tausch kann nicht abgeschlossen werden. Prüfen, ob alle Gegenstände platziert wurden!
31 Exchange can not be done, contact the shop owner.=Tausch kann nicht abgeschlossen werden. Geschäftsinhaber benachrichtigen!
3232 Exchange shop (owned by @1)=Tauschgeschäft (gehört @1)
3333 Exchanged!=Getauscht!
34 In exchange, you give:=Im Tausch, du gibst:
34 In exchange, you give:=Im Tausch geben Sie:
35 out of stock=Ausverkauft
3536 Owner gives:=Inhaber gibt:
3637 Owner wants:=Inhaber will:
3738
38 Owner, Use (E)+Place (right mouse button) for customer interface=Inhaber, Benutze (E)+Platziere (rechte Maustaste) für Kunde ...
39 Owner, Use (E)+Place (right mouse button) for customer interface=Inhaber: (E)+Platzieren (rechte Maustaste) drücken für Kundeninterface ...
3940
4041 Shop=Geschäft
41 This is your own shop, you can't exchange to yourself!=Das ist dein eigenes Geschäft, du kannst nicht mit dir selbst tauschen!
42 You want:=Du willst:
43 Your stock:=Dein Lager:
44
45
42 This is your own shop, you can't exchange to yourself!=Dies ist Ihr eigenes Geschäft, Sie können nicht mit sich selbst tauschen!
43 You want:=Sie wollen:
44 Your stock:=Ihr Lager:
0 # textdomain: currency
1 # author: PsycoJaker
2
3
4 ### barter.lua ###
5
6 Barter Table=Mesa de intercambios
7 Cancel=Denegar
8 Confirm=Aceptar
9 Start=Intercambiar
10
11 ### shop.lua ###
12
13 Exchange=Trato
14
15 ### craftitems.lua ###
16
17 @1 Minegeld Note=Billete de @1 Minegeld
18 @1 Minegeld cent coin= Moneda de @1 Minegeld
19 Bundle of random Minegeld notes=Monton de dinero
20
21 ### safe.lua ###
22
23 Safe=Caja fuerte
24 Safe (owned by @1)=Caja fuerte de @1
25
26 ### shop.lua ###
27
28 Customer gets:=Tu compra:
29 Customer gives (pay here!)=Paga aqui
30 Customers gave:=Los compradores ofrecieron:
31 Exchange can not be done, check if you put all items!=La compra ha fallado, comprueba tu pago
32 Exchange can not be done, contact the shop owner.=La compra ha fallado, comunicate con el vendedor
33 Exchange shop (owned by @1)=Tienda de @1
34 Exchanged!=Comprado
35 In exchange, you give:=Vendes:
36 out of stock=Sin exsitencias
37 Owner gives:=Vendedor ofrece:
38 Owner wants:=Vendedor pide:
39
40 Owner, Use (E)+Place (right mouse button) for customer interface=Usa, las teclas (especial + boton derecho del raton) para ver a la interfaz del comprador
41
42 Shop=Tienda
43 This is your own shop, you can't exchange to yourself!=No puedes comprar en tu propia tienda
44 You want:=Tu pides:
45 Your stock:=Tus existencias:
0 # textdomain: currency
1 # Saturn, 2020-10-23
2
3
4 ### barter.lua ###
5
6 Barter Table=Tavolo di baratto
7 Cancel=Annulla
8 Confirm=Conferma
9 Start=Inizia
10
11 ### shop.lua ###
12
13 Exchange=Scambia
14
15 ### craftitems.lua ###
16
17 @1 Minegeld Note=Banconota da @1 Minegeld
18 @1 Minegeld cent coin=Moneta da @1 centesimo/i Minegeld
19 Bundle of random Minegeld notes=Pacchetto di banconote Minegeld casuali
20
21 ### safe.lua ###
22
23 Safe=Cassaforte
24 Safe (owned by @1)=Cassaforte (di proprietà di @1)
25
26 ### shop.lua ###
27
28 Customer gets:=Il cliente ottiene:
29 Customer gives (pay here!)=Il cliente dà (paga qui!)
30 Customers gave:=I clienti hanno dato:
31 Exchange can not be done, check if you put all items!=Lo scambio non può essere fatto, controlla di avere messo tutti gli oggetti!
32 Exchange can not be done, contact the shop owner.=Lo scambio non può essere fatto, contatta il proprietario del negozio.
33 Exchange shop (owned by @1)=Negozio di scambio (di proprietà di @1)
34 Exchanged!=Scambiato!
35 In exchange, you give:=In cambio, tu dai:
36 Owner gives:=Il proprietario dà:
37 Owner wants:=Il proprietario vuole:
38
39 Owner, Use (E)+Place (right mouse button) for customer interface=Proprietario, usa (E)+Posiziona (click destro) per l'UI cliente
40
41 Shop=Negozio
42 This is your own shop, you can't exchange to yourself!=Questo è il tuo negozio, non puoi fare scambi con te stesso!
43 You want:=Tu vuoi:
44 Your stock:=La tua scorta:
3232 Exchange shop (owned by @1)=
3333 Exchanged!=
3434 In exchange, you give:=
35 out of stock=
3536 Owner gives:=
3637 Owner wants:=
3738
00 name = currency
1 depends = default
2 optional_depends = loot, pipeworks
1 optional_depends = default, loot, pipeworks
32 description = Provides shops, barter tables, safes, and multiple denominations of currency, called "Minegeld".
43 min_minetest_version = 5.2.0
00 local S = minetest.get_translator("currency")
11
2 function default.get_safe_formspec(pos)
2 function currency.get_safe_formspec(pos)
33 local spos = pos.x .. "," .. pos.y .. "," ..pos.z
44 local formspec =
55 "size[8,9]"..
88 "listring[nodemeta:".. spos .. ";main]"..
99 "listring[current_player;main]"
1010 return formspec
11 end
12
13 if minetest.global_exists("default") then
14 default.get_safe_formspec = currency.get_safe_formspec
1115 end
1216
1317 local function has_safe_privilege(meta, player)
99103 minetest.show_formspec(
100104 clicker:get_player_name(),
101105 "currency:safe",
102 default.get_safe_formspec(pos)
106 currency.get_safe_formspec(pos)
103107 )
104108 end
105109 end,
00 local S = minetest.get_translator("currency")
11
2 default.shop = {}
3 default.shop.current_shop = {}
4 default.shop.formspec = {
2 currency.shop = {}
3 if minetest.global_exists("default") then
4 default.shop = currency.shop
5 end
6
7 currency.shop.current_shop = {}
8 currency.shop.formspec = {
59 customer = function(pos)
610 local list_name = "nodemeta:"..pos.x..','..pos.y..','..pos.z
711 local formspec = "size[8,9.5]"..
3640
3741 local have_pipeworks = minetest.global_exists("pipeworks")
3842
39 default.shop.check_privilege = function(listname,playername,meta)
43 currency.shop.check_privilege = function(listname,playername,meta)
4044 --[[if listname == "pl1" then
4145 if playername ~= meta:get_string("pl1") then
4246 return false
5559 end
5660
5761
58 default.shop.give_inventory = function(inv,list,playername)
62 currency.shop.give_inventory = function(inv,list,playername)
5963 player = minetest.get_player_by_name(playername)
6064 if player then
6165 for k,v in ipairs(inv:get_list(list)) do
6569 end
6670 end
6771
68 default.shop.cancel = function(meta)
69 --[[default.shop.give_inventory(meta:get_inventory(),"pl1",meta:get_string("pl1"))
70 default.shop.give_inventory(meta:get_inventory(),"pl2",meta:get_string("pl2"))
72 currency.shop.cancel = function(meta)
73 --[[currency.shop.give_inventory(meta:get_inventory(),"pl1",meta:get_string("pl1"))
74 currency.shop.give_inventory(meta:get_inventory(),"pl2",meta:get_string("pl2"))
7175 meta:set_string("pl1","")
7276 meta:set_string("pl2","")
7377 meta:set_int("pl1step",0)
7478 meta:set_int("pl2step",0)]]
7579 end
7680
77 default.shop.exchange = function(meta)
78 --[[default.shop.give_inventory(meta:get_inventory(),"pl1",meta:get_string("pl2"))
79 default.shop.give_inventory(meta:get_inventory(),"pl2",meta:get_string("pl1"))
81 currency.shop.exchange = function(meta)
82 --[[currency.shop.give_inventory(meta:get_inventory(),"pl1",meta:get_string("pl2"))
83 currency.shop.give_inventory(meta:get_inventory(),"pl2",meta:get_string("pl1"))
8084 meta:set_string("pl1","")
8185 meta:set_string("pl2","")
8286 meta:set_int("pl1step",0)
8387 meta:set_int("pl2step",0)]]
88 end
89
90 local check_stock = function(
91 pos
92 )
93 local meta = minetest.get_meta(
94 pos
95 )
96 local minv = meta:get_inventory(
97 )
98 local gives = minv:get_list(
99 "owner_gives"
100 )
101 local can_exchange = true
102 for i, item in pairs(
103 gives
104 ) do
105 if not minv:contains_item(
106 "stock",
107 item
108 ) then
109 can_exchange = false
110 end
111 end
112 local owner = meta:get_string(
113 "owner"
114 )
115 if can_exchange then
116 meta:set_string(
117 "infotext",
118 S(
119 "Exchange shop (owned by @1)",
120 owner
121 )
122 )
123 local applicable = "currency:shop"
124 local node = minetest.get_node(
125 pos
126 )
127 if node.name == applicable then
128 return
129 end
130 node.name = applicable
131 minetest.swap_node(
132 pos,
133 node
134 )
135 else
136 meta:set_string(
137 "infotext",
138 S(
139 "Exchange shop (owned by @1)",
140 owner
141 ) .. ", " .. S(
142 "out of stock"
143 )
144 )
145 local applicable = "currency:shop_empty"
146 local node = minetest.get_node(
147 pos
148 )
149 if node.name == applicable then
150 return
151 end
152 node.name = applicable
153 minetest.swap_node(
154 pos,
155 node
156 )
157 end
84158 end
85159
86160 minetest.register_node("currency:shop", {
94168 "shop_front.png"},
95169 inventory_image = "shop_front.png",
96170 groups = {choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1},
97 sounds = default.node_sound_wood_defaults(),
171 sounds = currency.node_sound_wood_defaults(),
98172 after_place_node = function(pos, placer, itemstack)
99173 local owner = placer:get_player_name()
100174 local meta = minetest.get_meta(pos)
108182 inv:set_size("owner_wants", 3*2)
109183 inv:set_size("owner_gives", 3*2)
110184 if have_pipeworks then pipeworks.after_place(pos) end
185 check_stock(
186 pos
187 )
111188 end,
112189 after_dig_node = (have_pipeworks and pipeworks and pipeworks.after_dig),
113190 tube = {
114191 insert_object = function(pos, node, stack, direction)
115192 local meta = minetest.get_meta(pos)
116193 local inv = meta:get_inventory()
117 return inv:add_item("stock",stack)
194 local result = inv:add_item("stock",stack)
195 check_stock(
196 pos
197 )
198 return result
118199 end,
119200 can_insert = function(pos,node,stack,direction)
120201 local meta = minetest.get_meta(pos)
127208 on_rightclick = function(pos, node, clicker, itemstack)
128209 clicker:get_inventory():set_size("customer_gives", 3*2)
129210 clicker:get_inventory():set_size("customer_gets", 3*2)
130 default.shop.current_shop[clicker:get_player_name()] = pos
211 currency.shop.current_shop[clicker:get_player_name()] = pos
131212 local meta = minetest.get_meta(pos)
132213 if clicker:get_player_name() == meta:get_string("owner") and not clicker:get_player_control().aux1 then
133 minetest.show_formspec(clicker:get_player_name(),"currency:shop_formspec",default.shop.formspec.owner(pos))
214 minetest.show_formspec(clicker:get_player_name(),"currency:shop_formspec",currency.shop.formspec.owner(pos))
134215 else
135 minetest.show_formspec(clicker:get_player_name(),"currency:shop_formspec",default.shop.formspec.customer(pos))
216 minetest.show_formspec(clicker:get_player_name(),"currency:shop_formspec",currency.shop.formspec.customer(pos))
136217 end
137218 end,
138219 allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
150231 if player:get_player_name() ~= meta:get_string("owner") then return 0 end
151232 return stack:get_count()
152233 end,
234 on_metadata_inventory_move = check_stock,
235 on_metadata_inventory_put = check_stock,
236 on_metadata_inventory_take = check_stock,
237 can_dig = function(pos, player)
238 local meta = minetest.get_meta(pos)
239 local inv = meta:get_inventory()
240 return inv:is_empty("stock") and inv:is_empty("customers_gave") and inv:is_empty("owner_wants") and inv:is_empty("owner_gives")
241 end
242 })
243
244 minetest.register_node("currency:shop_empty", {
245 description = S("Shop") .. " (" .. S("out of stock") .. ")",
246 paramtype2 = "facedir",
247 tiles = {"shop_top.png",
248 "shop_top.png",
249 "shop_side_empty.png",
250 "shop_side_empty.png",
251 "shop_side_empty.png",
252 "shop_front_empty.png"},
253 drop = "currency:shop",
254 groups = {choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1,not_in_creative_inventory=1},
255 sounds = currency.node_sound_wood_defaults(),
256 after_dig_node = (have_pipeworks and pipeworks and pipeworks.after_dig),
257 tube = {
258 insert_object = function(pos, node, stack, direction)
259 local meta = minetest.get_meta(pos)
260 local inv = meta:get_inventory()
261 local result = inv:add_item("stock",stack)
262 check_stock(
263 pos
264 )
265 return result
266 end,
267 can_insert = function(pos,node,stack,direction)
268 local meta = minetest.get_meta(pos)
269 local inv = meta:get_inventory()
270 return inv:room_for_item("stock", stack)
271 end,
272 input_inventory = "customers_gave",
273 connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1}
274 },
275 on_rightclick = function(pos, node, clicker, itemstack)
276 clicker:get_inventory():set_size("customer_gives", 3*2)
277 clicker:get_inventory():set_size("customer_gets", 3*2)
278 currency.shop.current_shop[clicker:get_player_name()] = pos
279 local meta = minetest.get_meta(pos)
280 if clicker:get_player_name() == meta:get_string("owner") and not clicker:get_player_control().aux1 then
281 minetest.show_formspec(clicker:get_player_name(),"currency:shop_formspec",currency.shop.formspec.owner(pos))
282 else
283 minetest.show_formspec(clicker:get_player_name(),"currency:shop_formspec",currency.shop.formspec.customer(pos))
284 end
285 end,
286 allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
287 local meta = minetest.get_meta(pos)
288 if player:get_player_name() ~= meta:get_string("owner") then return 0 end
289 return count
290 end,
291 allow_metadata_inventory_put = function(pos, listname, index, stack, player)
292 local meta = minetest.get_meta(pos)
293 if player:get_player_name() ~= meta:get_string("owner") then return 0 end
294 return stack:get_count()
295 end,
296 allow_metadata_inventory_take = function(pos, listname, index, stack, player)
297 local meta = minetest.get_meta(pos)
298 if player:get_player_name() ~= meta:get_string("owner") then return 0 end
299 return stack:get_count()
300 end,
301 on_metadata_inventory_move = check_stock,
302 on_metadata_inventory_put = check_stock,
303 on_metadata_inventory_take = check_stock,
153304 can_dig = function(pos, player)
154305 local meta = minetest.get_meta(pos)
155306 local inv = meta:get_inventory()
160311 minetest.register_on_player_receive_fields(function(sender, formname, fields)
161312 if formname == "currency:shop_formspec" and fields.exchange ~= nil and fields.exchange ~= "" then
162313 local name = sender:get_player_name()
163 local pos = default.shop.current_shop[name]
314 local pos = currency.shop.current_shop[name]
164315 local meta = minetest.get_meta(pos)
165316 if meta:get_string("owner") == name then
166317 minetest.chat_send_player(name, S("This is your own shop, you can't exchange to yourself!"))
201352 pinv:add_item("customer_gets",item)
202353 end
203354 minetest.chat_send_player(name, S("Exchanged!"))
355 check_stock(
356 pos
357 )
204358 else
205359 if owners_fault then
206360 minetest.chat_send_player(name, S("Exchange can not be done, contact the shop owner."))
211365 end
212366 end
213367 end)
214