update to v6
*sell stuff for free (bug) #do not accept used items (wear>0) +give item with its meta (makes it possible to sell tickets, keys...) +send mesecon signal on exchange (I thought i added it before)master
parent
90a2d78660
commit
be35f663bb
99
init.lua
99
init.lua
|
@ -81,22 +81,83 @@ smartshop.receive_fields=function(player,pressed)
|
||||||
local pname=player:get_player_name()
|
local pname=player:get_player_name()
|
||||||
if pressed["buy" .. n] then
|
if pressed["buy" .. n] then
|
||||||
local name=inv:get_stack("give" .. n,1):get_name()
|
local name=inv:get_stack("give" .. n,1):get_name()
|
||||||
local stack=name .." ".. inv:get_stack("give" .. n,1):get_count()
|
local gc=inv:get_stack("give" .. n,1):get_count()
|
||||||
local pay=inv:get_stack("pay" .. n,1):get_name() .." ".. inv:get_stack("pay" .. n,1):get_count()
|
local stack=name .." ".. gc
|
||||||
|
local pc=inv:get_stack("pay" .. n,1):get_count()
|
||||||
|
local pay=inv:get_stack("pay" .. n,1):get_name() .." ".. pc
|
||||||
if name~="" then
|
if name~="" then
|
||||||
if type==1 and inv:room_for_item("main", pay)==false then minetest.chat_send_player(pname, "Error: The owners stock is full, cant receive, exchange aborted.") return end
|
local pstack={}
|
||||||
if type==1 and sellall==1 and inv:contains_item("main", stack)==false and inv:contains_item("give" .. n, stack)==true then
|
local nstack={}
|
||||||
inv:add_item("main", stack)
|
|
||||||
inv:remove_item("give" .. n, stack)
|
--fast checks
|
||||||
|
if not pinv:room_for_item("main", stack) then
|
||||||
|
minetest.chat_send_player(pname, "Error: Your inventory is full, exchange aborted.")
|
||||||
|
return
|
||||||
|
elseif not pinv:contains_item("main", pay) then
|
||||||
|
minetest.chat_send_player(pname, "Error: You dont have enough in your inventory to buy this, exchange aborted.")
|
||||||
|
return
|
||||||
|
elseif type==1 and inv:room_for_item("main", pay)==false then
|
||||||
|
minetest.chat_send_player(pname, "Error: The owners stock is full, cant receive, exchange aborted.")
|
||||||
|
return
|
||||||
|
elseif type==1 then
|
||||||
|
--if sells from stock only, or give line, 1 itemstack or multiply
|
||||||
|
if inv:contains_item("main", stack) then
|
||||||
|
|
||||||
|
elseif sellall==1 and inv:contains_item("give" .. n, stack) then
|
||||||
|
if gc==1 then
|
||||||
|
nstack={stack=inv:get_stack("give" .. n, 1),take="give" .. n,n=1}
|
||||||
|
else
|
||||||
|
nstack={item=stack,take="give" .. n}
|
||||||
|
end
|
||||||
|
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(pname, "Error: The owners stock is end.")
|
||||||
|
return
|
||||||
|
end
|
||||||
end
|
end
|
||||||
if type==1 and inv:contains_item("main", stack)==false then minetest.chat_send_player(pname, "Error: The owners stock is end.") return end
|
--is in stock, 1 itemstack or multiply
|
||||||
if not pinv:contains_item("main", pay) then minetest.chat_send_player(pname, "Error: You dont have enough in your inventory to buy this, exchange aborted.") return end
|
if not nstack.take and gc==1 then
|
||||||
if not pinv:room_for_item("main", stack) then minetest.chat_send_player(pname, "Error: Your inventory is full, exchange aborted.") return end
|
for i=1,32,1 do
|
||||||
|
if inv:get_stack("main", i):get_name()==inv:get_stack("give" .. n,1):get_name() then
|
||||||
|
|
||||||
|
if inv:get_stack("main", i):get_count()>1 then
|
||||||
|
nstack={item=stack,take="main"}
|
||||||
|
else
|
||||||
|
nstack={stack=inv:get_stack("main", i),take="main",n=i}
|
||||||
|
end
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif not nstack.take then
|
||||||
|
nstack={item=stack,take="main"}
|
||||||
|
end
|
||||||
|
--take from player, itemstack or multiply
|
||||||
|
if pc==1 then
|
||||||
|
for i=0,32,1 do
|
||||||
|
if pinv:get_stack("main", i):get_name()==inv:get_stack("pay" .. n,1):get_name() and pinv:get_stack("main",i):get_wear()>0 then
|
||||||
|
minetest.chat_send_player(pname, "Error: your item is used")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if nstack.stack then
|
||||||
|
pinv:add_item("main",nstack.stack)
|
||||||
|
if type==1 then inv:remove_item(nstack.take, stack,nstack.n) end
|
||||||
|
elseif type==1 and nstack.item then
|
||||||
|
pinv:add_item("main",nstack.item)
|
||||||
|
if type==1 then inv:remove_item(nstack.take, stack) end
|
||||||
|
elseif type==1 then
|
||||||
|
minetest.chat_send_player(pname, "Unknown Error")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
pinv:remove_item("main", pay)
|
pinv:remove_item("main", pay)
|
||||||
pinv:add_item("main", stack)
|
inv:add_item("main", pay)
|
||||||
if type==1 then
|
|
||||||
inv:remove_item("main", stack)
|
if mesecon then
|
||||||
inv:add_item("main", pay)
|
mesecon.receptor_on(pos)
|
||||||
|
minetest.get_node_timer(pos):start(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -308,13 +369,19 @@ end
|
||||||
minetest.register_node("smartshop:shop", {
|
minetest.register_node("smartshop:shop", {
|
||||||
description = "Smartshop",
|
description = "Smartshop",
|
||||||
tiles = {"default_chest_top.png^[colorize:#ffffff77^default_obsidian_glass.png"},
|
tiles = {"default_chest_top.png^[colorize:#ffffff77^default_obsidian_glass.png"},
|
||||||
groups = {choppy = 2, oddly_breakable_by_hand = 1,tubedevice = 1, tubedevice_receiver = 1},
|
groups = {choppy = 2, oddly_breakable_by_hand = 1,tubedevice = 1, tubedevice_receiver = 1,mesecon=2},
|
||||||
drawtype="nodebox",
|
drawtype="nodebox",
|
||||||
node_box = {type="fixed",fixed={-0.5,-0.5,-0.0,0.5,0.5,0.5}},
|
node_box = {type="fixed",fixed={-0.5,-0.5,-0.0,0.5,0.5,0.5}},
|
||||||
paramtype2="facedir",
|
paramtype2="facedir",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
light_source = 10,
|
light_source = 10,
|
||||||
|
on_timer = function (pos, elapsed)
|
||||||
|
if mesecon then
|
||||||
|
mesecon.receptor_off(pos)
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end,
|
||||||
tube = {insert_object = function(pos, node, stack, direction)
|
tube = {insert_object = function(pos, node, stack, direction)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
|
@ -357,7 +424,7 @@ on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
||||||
smartshop.showform(pos,player)
|
smartshop.showform(pos,player)
|
||||||
end,
|
end,
|
||||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||||
if minetest.get_meta(pos):get_string("owner")==player:get_player_name() or minetest.check_player_privs(player:get_player_name(), {protection_bypass=true}) then
|
if stack:get_wear()==0 and (minetest.get_meta(pos):get_string("owner")==player:get_player_name() or minetest.check_player_privs(player:get_player_name(), {protection_bypass=true})) then
|
||||||
return stack:get_count()
|
return stack:get_count()
|
||||||
end
|
end
|
||||||
return 0
|
return 0
|
||||||
|
@ -382,4 +449,4 @@ can_dig = function(pos, player)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue