mirror of
https://github.com/mt-mods/currency.git
synced 2024-08-20 04:24:08 +02:00
Merge branch 'master' into 'master'
allow table to reset itself See merge request VanessaE/currency!2
This commit is contained in:
commit
5931460d85
@ -2,3 +2,11 @@ currency
|
|||||||
========
|
========
|
||||||
|
|
||||||
Repo for Currency Mod
|
Repo for Currency Mod
|
||||||
|
|
||||||
|
# Settings
|
||||||
|
|
||||||
|
Settings with default values:
|
||||||
|
```
|
||||||
|
# After how much idle-time barter table is reset (seconds)
|
||||||
|
barter.chest.expireafter 15 * 60
|
||||||
|
```
|
||||||
|
41
barter.lua
41
barter.lua
@ -5,6 +5,7 @@ local MP = minetest.get_modpath(minetest.get_current_modname())
|
|||||||
local S, NS = dofile(MP.."/intllib.lua")
|
local S, NS = dofile(MP.."/intllib.lua")
|
||||||
|
|
||||||
barter.chest = {}
|
barter.chest = {}
|
||||||
|
barter.chest.expire_after = tonumber(minetest.settings:get('barter.chest.expireafter')) or 15 * 60
|
||||||
barter.chest.formspec = {
|
barter.chest.formspec = {
|
||||||
main = "size[8,9]"..
|
main = "size[8,9]"..
|
||||||
"list[current_name;pl1;0,0;3,4;]"..
|
"list[current_name;pl1;0,0;3,4;]"..
|
||||||
@ -81,6 +82,8 @@ barter.chest.cancel = function(meta)
|
|||||||
meta:set_string("pl2","")
|
meta:set_string("pl2","")
|
||||||
meta:set_int("pl1step",0)
|
meta:set_int("pl1step",0)
|
||||||
meta:set_int("pl2step",0)
|
meta:set_int("pl2step",0)
|
||||||
|
meta:set_int("clean",1)
|
||||||
|
meta:set_int("timer",0)
|
||||||
end
|
end
|
||||||
|
|
||||||
barter.chest.exchange = function(meta)
|
barter.chest.exchange = function(meta)
|
||||||
@ -90,6 +93,16 @@ barter.chest.exchange = function(meta)
|
|||||||
meta:set_string("pl2","")
|
meta:set_string("pl2","")
|
||||||
meta:set_int("pl1step",0)
|
meta:set_int("pl1step",0)
|
||||||
meta:set_int("pl2step",0)
|
meta:set_int("pl2step",0)
|
||||||
|
meta:set_int("clean",1)
|
||||||
|
meta:set_int("timer",0)
|
||||||
|
end
|
||||||
|
|
||||||
|
barter.chest.start_timer = function(pos, meta)
|
||||||
|
meta:set_int("clean",0)
|
||||||
|
meta:set_int("timer",0)
|
||||||
|
local node_timer = minetest.get_node_timer(pos)
|
||||||
|
if node_timer:is_started() then return end
|
||||||
|
node_timer:start(22)
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_node("currency:barter", {
|
minetest.register_node("currency:barter", {
|
||||||
@ -118,13 +131,16 @@ minetest.register_node("currency:barter", {
|
|||||||
meta:set_string("infotext", S("Barter Table"))
|
meta:set_string("infotext", S("Barter Table"))
|
||||||
meta:set_string("pl1","")
|
meta:set_string("pl1","")
|
||||||
meta:set_string("pl2","")
|
meta:set_string("pl2","")
|
||||||
|
meta:set_int("clean",1)
|
||||||
|
meta:set_int("timer",0)
|
||||||
barter.chest.update_formspec(meta)
|
barter.chest.update_formspec(meta)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
inv:set_size("pl1", 3*4)
|
inv:set_size("pl1", 12) -- 3*4
|
||||||
inv:set_size("pl2", 3*4)
|
inv:set_size("pl2", 12) -- 3*4
|
||||||
end,
|
end,
|
||||||
on_receive_fields = function(pos, formname, fields, sender)
|
on_receive_fields = function(pos, formname, fields, sender)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
barter.chest.start_timer(pos, meta)
|
||||||
pl_receive_fields = function(n)
|
pl_receive_fields = function(n)
|
||||||
if fields[n.."_start"] and meta:get_string(n) == "" then
|
if fields[n.."_start"] and meta:get_string(n) == "" then
|
||||||
meta:set_string(n,sender:get_player_name())
|
meta:set_string(n,sender:get_player_name())
|
||||||
@ -152,18 +168,39 @@ minetest.register_node("currency:barter", {
|
|||||||
end,
|
end,
|
||||||
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
barter.chest.start_timer(pos, meta)
|
||||||
if not barter.chest.check_privilege(from_list,player:get_player_name(),meta) then return 0 end
|
if not barter.chest.check_privilege(from_list,player:get_player_name(),meta) then return 0 end
|
||||||
if not barter.chest.check_privilege(to_list,player:get_player_name(),meta) then return 0 end
|
if not barter.chest.check_privilege(to_list,player:get_player_name(),meta) then return 0 end
|
||||||
return count
|
return count
|
||||||
end,
|
end,
|
||||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
barter.chest.start_timer(pos, meta)
|
||||||
if not barter.chest.check_privilege(listname,player:get_player_name(),meta) then return 0 end
|
if not barter.chest.check_privilege(listname,player:get_player_name(),meta) then return 0 end
|
||||||
return stack:get_count()
|
return stack:get_count()
|
||||||
end,
|
end,
|
||||||
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
barter.chest.start_timer(pos, meta)
|
||||||
if not barter.chest.check_privilege(listname,player:get_player_name(),meta) then return 0 end
|
if not barter.chest.check_privilege(listname,player:get_player_name(),meta) then return 0 end
|
||||||
return stack:get_count()
|
return stack:get_count()
|
||||||
end,
|
end,
|
||||||
|
on_timer = function(pos, dtime)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
if 1 == meta:get_int("clean") then return false end
|
||||||
|
|
||||||
|
local timer = meta:get_int("timer")
|
||||||
|
timer = timer + dtime
|
||||||
|
if timer > barter.chest.expire_after then
|
||||||
|
-- attempt to return items to owners
|
||||||
|
barter.chest.cancel(meta)
|
||||||
|
-- also clear out items of offline users
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
inv:set_list("pl1", {})
|
||||||
|
inv:set_list("pl2", {})
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
meta:set_int("timer",timer)
|
||||||
|
return true
|
||||||
|
end
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user